nacos註冊中心源碼流程分析

作爲一個註冊中心,和eureka類似,核心的功能點:

1.服務註冊:nacos客戶端攜帶自身信息向nacos服務端進行註冊。

2.服務心跳:客戶端定時向服務端發送心跳,告知服務端自己處於可用狀態

3.服務健康檢查:服務端定時檢查客戶端是否有發送心跳,如果超過15s沒有收到心跳,那麼就會將該客戶端實例設置爲不健康狀態,如果超過30s沒有收到心跳則會剔除該客戶端實例

4.服務同步:服務端爲了高可用,通常都是集羣模式,那麼集羣之間需要進行數據的同步。

5.服務發現:客戶端向服務端查詢所有註冊的服務列表。客戶端獲取到之後會放入自己的本地緩存,需要使用的時候,先從本地緩存拿,沒有再去服務獲取。同時還有定時任務,去服務端拉取註冊列表,更新本地緩存,如果失敗拉取的間隔時間會根據失敗次數增加。

 

源碼分析:

從客戶端開始入手,切入點當然是spring-cloud-starter-alibaba-nacos-discovery包的spring.factories文件中的自動配置類

1.最爲關鍵的就是NacosDiscoveryAutoConfigurationNacosServiceRegistryAutoConfiguration 這兩個配置類了,eureka是通過SmartLifecycle整合進spring的,從配置類中創建的NacosAutoServiceRegistration這個類,追溯一下可以看到這個是實現了ApplicationListener接口,所以nacos是通過這個接口整合進spring的

2.nacos源碼中很多地方都是初始化的時候就設置好了定時任務,或者線程池,後續的任務都是直接扔進去執行就是了。

3.nacos提供了AP和CP 兩種模式。非持久化實例註冊,數據放在內存中,和eureka類似,集羣節點之間都是點對點的。如果是持久化實例,則是CP模式,集羣節點會有leader和follower,客戶端註冊的數據會寫入磁盤,節點重啓時會從磁盤上把數據讀取出來。

4.和eureka不同的是,nacos還有主動推送功能,eureka的註冊列表發生改變的時候,eureka是失效讀寫緩存,等待下一次只讀緩存(如果使用了)來更新時,重建讀寫緩存,或者客戶端拉取數據時重建讀寫緩存。nacos並沒有使用多級緩存。當註冊列表發生改變時,會發送ServiceChangeEvent事件,然後主動向客戶端推送信息

源碼關鍵流程圖:基於1.4.0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章