1.Nacos架構圖
- Provider App:服務提供方-是指提供可復用和可調用服務的應用方。
- Consumer App:服務消費方-是指會發(fā)起對某個服務調用的應用方。
- Name Service:用過VIP(Vritual IP)或者DNS的方法實現(xiàn)Nacos高可用的服務路由。
- Nacos Service:Nacos服務提供者,里面包含Open API 是功能訪問入口,Config Service 配置服務、Name Servcie注冊服務,Consistency Protocol 是一致性協(xié)議,用于Nacos集群節(jié)點的數(shù)據同步,這里使用的是Raft算法;
- Nacos Console:Nacos控制臺。
整個Nacos集群,服務提供者通過Vip(virtual Ip)訪問Nacos Server 高可用集群,基于Open Api 完成服務的注冊和服務的查詢。Nacos Servcie 本身可以支持主備模式。底層采用數(shù)據一致性算法完成從節(jié)點的數(shù)據同步。
2.Nacos注冊中心原理
服務實例啟動時啟動到服務注冊表中,關閉時注銷;
服務消費者查詢服務注冊表,獲得可用實例并緩存在本地,服務調用時先從本地讀取服務注冊表;
服務注冊中心需求調用服務實例的健康檢查API來驗證它是否能夠處理請求。
3.Nacos和CAP
集群下AC模式NACOS所有節(jié)點在同一時間看到的數(shù)據是一致的;而AP模式的定義是NACOS客戶端所有的請求都會收到響應。
何時選擇使用何種模式?
1.一般來說,如果不需要存儲服務級別的信息且服務實例是通過nacos-client注冊,并能夠保持心跳上報,那么就可以選擇AP模式。當前主流的服務如 Spring cloud 和 Dubbo 服務,都適用于AP模式,AP模式為了服務的可能性而減弱了一致性,因此AP模式下只支持注冊臨時實例。(注冊中心作為系統(tǒng)中很重要的的一個服務,需要盡最大可能對外提供可用的服務,通常選擇 AP 來保證服務的高可用)
2.如果需要在服務級別編輯或者存儲配置信息,那么 CP 是必須,K8S服務和DNS服務則適用于CP模式。CP模式下則支持注冊持久化實例,此時則是以 Raft 協(xié)議為集群運行模式,該模式下注冊實例之前必須先注冊服務,如果服務不存在,則會返回錯誤。(采用 CP 協(xié)議,則需要當前集群可用的節(jié)點數(shù)過半才能工作)
臨時實例和永久實例的區(qū)別
1.臨時實例只是臨時存在于注冊中心中,會在服務下線或不可用時被注冊中心剔除,臨時實例會與注冊中心保持心跳,注冊中心會在?段時間沒有收到來自客戶端的心跳后會將實例設置為不健康,然后在?段時間后進行剔除。
2.永久實例在被刪除之前會永久的存在于注冊中心,且有可能并不知道注冊中心存在,不會主動向注冊中心上報心跳,那么這個時候就需要注冊中心主動進行探活。文章來源:http://www.zghlxwxcb.cn/news/detail-441312.html
4.臨時實例健康檢查機制
在 Nacos 中,用戶可以通過兩種方式進行臨時實例的注冊,通過 Nacos 的 OpenAPI 進行服務注冊或通過 Nacos 提供的 SDK 進行服務注冊。兩種方式都是由客戶端向注冊中心發(fā)送心跳,注冊中心會在連接斷開或是心跳過期后將不健康的實例移除。
OpenAPI 的注冊方式實際是用戶根據自身需求調用 Http 接口對服務進行注冊,然后通過 Http 接口發(fā)送心跳到注冊中心。在注冊服務的同時會注冊?個全局的客戶端心跳檢測的任務。在服務?段時間沒有收到來自客戶端的心跳后,該任務會將其標記為不健康,如果在間隔的時間內還未收到心跳,那么該任務會將其剔除。
SDK 的注冊方式實際是通過 RPC 與注冊中心保持連接(Nacos 2.x 版本中,舊版的還是仍然通過OpenAPI 的方式),客戶端會定時的通過 RPC 連接向 Nacos 注冊中心發(fā)送心跳,保持連接的存活。如果客戶端和注冊中心的連接斷開,那么注冊中心會主動剔除該 client 所注冊的服務,達到下線的效果。同時 Nacos 注冊中心還會在注冊中心啟動時,注冊?個過期客戶端清除的定時任務,用于刪除那些健康狀態(tài)超過?段時間的客戶端。(Nacos2.x默認使用SDK方式,推薦使用改方式)文章來源地址http://www.zghlxwxcb.cn/news/detail-441312.html
到了這里,關于三、nacos注冊中心實現(xiàn)原理分析的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!