成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微服務(wù)的靈魂擺渡者——Nacos,來一篇原理全攻略

開發(fā) 架構(gòu)
Nacos在微服務(wù)系統(tǒng)的服務(wù)注冊和發(fā)現(xiàn)領(lǐng)域,勢頭迅猛是肉眼可見的。在微服務(wù)系統(tǒng)中,服務(wù)的注冊和發(fā)現(xiàn)又是一個靈魂的存在。沒有注冊中心的存在,成百上千服務(wù)之間的調(diào)用復(fù)雜度不可想象。

[[398190]]

本文轉(zhuǎn)載自微信公眾號「程序新視界」,作者二師兄。轉(zhuǎn)載本文請聯(lián)系程序新視界公眾號。  

前言

Nacos在微服務(wù)系統(tǒng)的服務(wù)注冊和發(fā)現(xiàn)領(lǐng)域,勢頭迅猛是肉眼可見的。在微服務(wù)系統(tǒng)中,服務(wù)的注冊和發(fā)現(xiàn)又是一個靈魂的存在。沒有注冊中心的存在,成百上千服務(wù)之間的調(diào)用復(fù)雜度不可想象。

如果你計(jì)劃或已經(jīng)在使用Nacos了,但僅停留在使用層面,那這篇文章值得你一讀。

本文我們先從服務(wù)發(fā)現(xiàn)機(jī)制說起,然后講解Nacos的基本介紹、實(shí)現(xiàn)原理、架構(gòu)等,真正做到深入淺出的了解Nacos。

服務(wù)注冊與發(fā)現(xiàn)

說起Nacos,不得不先聊聊微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)。關(guān)于服務(wù)發(fā)現(xiàn)其實(shí)已經(jīng)在《要學(xué)習(xí)微服務(wù)的服務(wù)發(fā)現(xiàn)?先來了解一些科普知識吧》一文中進(jìn)行了全面的講解。我們這里再簡要梳理一下。

在傳統(tǒng)應(yīng)用中,一個服務(wù)A訪問另外一個服務(wù)B,我們只需將服務(wù)B的服務(wù)地址和端口在服務(wù)A的靜態(tài)配置文件中進(jìn)行配置即可。

但在微服務(wù)的架構(gòu)中,這種情況就有所變化了,如下圖所示:

上圖中,服務(wù)實(shí)例的IP是動態(tài)分配。同時,還面臨著服務(wù)的增減、故障、升級等變化。這種情況,對于客戶端程序來說,就需要使用更精確的服務(wù)發(fā)現(xiàn)機(jī)制。

為了解決這個問題,于是像etcd、Consul、Apache Zookeeper、Nacos等服務(wù)注冊中間件便應(yīng)運(yùn)而生。

Nacos簡介

Nacos一般讀作/nɑ:k??s/,這個名字來源于“Dynamic Naming and Configuration Service”。其中na取自“Naming”的前兩個字母,co取自“Configuration”的前兩個字母,而s則取自“Service”的首字母。

Nacos的功能官方用一句話來進(jìn)行了說明:“一個更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。”也就是說Nacos不僅提供了服務(wù)注冊與發(fā)現(xiàn)功能,還提供了配置管理的功能,同時還提供了可視化的管理平臺。

官方文檔中還提到“服務(wù)(Service)是Nacos世界的一等公民。”,也就是說在Nacos是圍繞著Service轉(zhuǎn)的。

如果查看源碼,會發(fā)現(xiàn)Nacos的核心API中定義了兩個接口NamingService和ConfigService。服務(wù)注冊與發(fā)現(xiàn)圍繞著NamingService展開,而配置管理則圍繞著ConfigService展開。

官網(wǎng)給出了Nacos的4個核心特性:服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測、動態(tài)配置服務(wù)、動態(tài)DNS服務(wù)、服務(wù)及其元數(shù)據(jù)管理。我們主要來講服務(wù)發(fā)現(xiàn)功能。

Nacos的Server與Client

Nacos注冊中心分為Server與Client,Nacos提供SDK和openApi,如果沒有SDK也可以根據(jù)openApi手動寫服務(wù)注冊與發(fā)現(xiàn)和配置拉取的邏輯。

Server采用Java編寫,基于Spring Boot框架,為Client提供注冊發(fā)現(xiàn)服務(wù)與配置服務(wù)。

Client支持包含了目前已知的Nacos多語言客戶端及Spring生態(tài)的相關(guān)客戶端。Client與微服務(wù)嵌套在一起。

Nacos的DNS實(shí)現(xiàn)依賴了CoreDNS,其項(xiàng)目為nacos-coredns-plugin。該插件提供了基于CoreDNS的DNS-F客戶端,開發(fā)語言為go。

Nacos注冊中的交互流程

作為注冊中心的功能來說,Nacos提供的功能與其他主流框架很類似,基本都是圍繞服務(wù)實(shí)例注冊、實(shí)例健康檢查、服務(wù)實(shí)例獲取這三個核心來實(shí)現(xiàn)的。

以Java版本的Nacos客戶端為例,服務(wù)注冊基本流程:

  • 服務(wù)實(shí)例啟動將自身注冊到Nacos注冊中心,隨后維持與注冊中心的心跳;
  • 心跳維持策略為每5秒向Nacos Server發(fā)送一次心跳,并攜帶實(shí)例信息(服務(wù)名、實(shí)例IP、端口等);
  • Nacos Server也會向Client主動發(fā)起健康檢查,支持TCP/Http;
  • 15秒內(nèi)無心跳且健康檢查失敗則認(rèn)為實(shí)例不健康,如果30秒內(nèi)健康檢查失敗則剔除實(shí)例;
  • 服務(wù)消費(fèi)者通過注冊中心獲取實(shí)例,并發(fā)起調(diào)用;

其中服務(wù)發(fā)現(xiàn)支持兩種場景:第一,服務(wù)消費(fèi)者直接向注冊中心發(fā)送獲取某服務(wù)實(shí)例的請求,注冊中心返回所有可用實(shí)例,但一般不推薦此種方式;第二、服務(wù)消費(fèi)者向注冊中心訂閱某服務(wù),并提交一個監(jiān)聽器,當(dāng)注冊中心中服務(wù)發(fā)生變化時,監(jiān)聽器會收到通知,消費(fèi)者更新本地服務(wù)實(shí)例列表,以保證所有的服務(wù)均可用。

Nacos數(shù)據(jù)模型

關(guān)于數(shù)據(jù)模型,官網(wǎng)描述道:Nacos數(shù)據(jù)模型的Key由三元組唯一確定,Namespace默認(rèn)是空串,公共命名空間(public),分組默認(rèn)是DEFAULT_GROUP。

上面的圖為官方提供的圖,我們可以進(jìn)一步細(xì)化拆分來看一下:

如果還無法理解,我們可以直接從代碼層面來看看Namespace、Group和Service是如何存儲的:

  1. /** 
  2.  * Map(namespace, Map(group::serviceName, Service)). 
  3.  */ 
  4. private final Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>(); 

也就是說Nacos服務(wù)注冊表結(jié)構(gòu)為:Map

Nacos基于namespace的設(shè)計(jì)是為了做多環(huán)境以及多租戶數(shù)據(jù)(配置和服務(wù))隔離的。如果用戶有多套環(huán)境(開發(fā)、測試、生產(chǎn)等環(huán)境),則可以分別建三個不同的namespace,比如上圖中的dev-namespace和prod-namespace。

Nacos服務(wù)領(lǐng)域模型

在上面的數(shù)據(jù)模式中,我們可以定位到一個服務(wù)(Service)了,那么服務(wù)的模型又是如何呢?官網(wǎng)提供了下圖:

從圖中的分級存儲模型可以看到,在服務(wù)級別,保存了健康檢查開關(guān)、元數(shù)據(jù)、路由機(jī)制、保護(hù)閾值等設(shè)置,而集群保存了健康檢查模式、元數(shù)據(jù)、同步機(jī)制等數(shù)據(jù),實(shí)例保存了該實(shí)例的ip、端口、權(quán)重、健康檢查狀態(tài)、下線狀態(tài)、元數(shù)據(jù)、響應(yīng)時間。

此時,我們忽略掉一對多的情況,整個Nacos中數(shù)據(jù)存儲的關(guān)系如下圖:

可以看出,整個層級的包含關(guān)系為Namespace包含多個Group、Group可包含多個Service、Service可包含多個Cluster、Cluster中包含Instance集合。

對應(yīng)的部分源碼如下:

  1. // ServiceManager類,Map(namespace, Map(group::serviceName, Service)) 
  2. private final Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>(); 
  3.  
  4. // Service類,Map(cluster,Cluster) 
  5. private Map<String, Cluster> clusterMap = new HashMap<>(); 
  6.  
  7. // Cluster類 
  8. private Set<Instance> persistentInstances = new HashSet<>(); 
  9. private Set<Instance> ephemeralInstances = new HashSet<>(); 
  10.  
  11. // Instance類 
  12. private String instanceId; 
  13. private String ip; 
  14. private int port; 
  15. private double weight = 1.0D; 

其中,實(shí)例又分為臨時實(shí)例和持久化實(shí)例。它們的區(qū)別關(guān)鍵是健康檢查的方式。臨時實(shí)例使用客戶端上報(bào)模式,而持久化實(shí)例使用服務(wù)端反向探測模式。

臨時實(shí)例需要能夠自動摘除不健康實(shí)例,而且無需持久化存儲實(shí)例。持久化實(shí)例使用服務(wù)端探測的健康檢查方式,因?yàn)榭蛻舳瞬粫蠄?bào)心跳,自然就不能去自動摘除下線的實(shí)例。

小結(jié)

我們從微服務(wù)系統(tǒng)中為什么使用服務(wù)發(fā)現(xiàn)講起,然后介紹了Nacos、Nacos的實(shí)現(xiàn)機(jī)制、底層數(shù)據(jù)模型以及部分源碼實(shí)現(xiàn)。

在使用過程中除了關(guān)注服務(wù)注冊與發(fā)現(xiàn)、健康檢查之外,對于服務(wù)的數(shù)據(jù)模型中Namespace、Group、Service和Instance也需要重點(diǎn)關(guān)注。

當(dāng)理解了這些背后的工作原理,對于上層應(yīng)用的整合以及配置便可以輕松運(yùn)用了。

責(zé)任編輯:武曉燕 來源: 程序新視界
相關(guān)推薦

2009-10-12 15:06:59

2010-08-25 14:36:02

DHCP服務(wù)器

2023-02-27 09:32:00

微服務(wù)Nacos

2011-04-29 13:41:44

筆記本散熱

2011-04-29 13:41:52

筆記本電池

2011-04-29 13:41:50

2011-04-29 13:41:49

筆記本硬盤

2011-04-29 13:41:41

筆記本清潔

2011-04-29 13:41:36

筆記本液晶屏

2025-04-18 10:26:29

后端接口通用封裝

2010-04-23 14:04:23

Oracle日期操作

2010-08-04 18:03:27

NFS服務(wù)器

2024-05-07 09:01:21

Queue 模塊Python線程安全隊(duì)列

2013-04-15 10:48:16

Xcode ARC詳解iOS ARC使用

2013-06-08 11:13:00

Android開發(fā)XML解析

2011-08-09 09:37:49

2010-09-14 10:08:41

Squid安裝

2009-11-20 15:02:06

2025-05-28 08:45:00

2020-11-15 20:18:41

Google開發(fā)者大會
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 毛片电影 | 中国美女av | 欧美一区二区大片 | 我爱操| 最新中文字幕 | 91精品国产91久久久久久 | 午夜精品久久久久久久 | 久久99这里只有精品 | 欧洲妇女成人淫片aaa视频 | 国产在线aa| 一区二区三区av | 日本 欧美 三级 高清 视频 | 日韩欧美精品在线播放 | 中文字幕第49页 | 午夜99| 一区二区免费 | 亚洲天堂久久新 | 国产女人叫床高潮大片免费 | 国产一区二区在线免费观看 | 亚洲欧美激情国产综合久久久 | 人人做人人澡人人爽欧美 | 国产一区二区在线免费视频 | 黄色一级片aaa| 久久成人一区 | 久久精品亚洲精品国产欧美 | 99re在线播放| 成年人视频免费在线观看 | 成人妇女免费播放久久久 | 在线观看中文字幕视频 | 男人的天堂一级片 | 欧美一级久久 | 国产在线网站 | 欧美一a一片一级一片 | 天天综合网天天综合 | 一本一道久久a久久精品蜜桃 | 欧美日韩精选 | 午夜男人的天堂 | 97日日碰人人模人人澡分享吧 | 国产精品毛片无码 | 国产免费观看久久黄av片涩av | 日韩欧美视频网站 |