1.Nacos實現原理了解嗎?
Nacos是注冊中心,主要是幫助我們管理服務列表。Nacos的實現原理大概可以從下面三個方面來講:
- 服務注冊與發現:當一個服務實例啟動時,它會向
Nacos Server
發送注冊請求,將自己的信息注冊到注冊中心。Nacos Serve會將這些信息保存在內存中,并提供REST接口供其它服務查詢。 - 服務健康檢測:Nacos通過心跳檢測來檢查服務是否正常,服務實例會定期向Nacos Serve發送心跳。如果Nacos Serve在定期的時間內沒有收到服務實例的心跳,則會將其標注為不可用。如果還沒有收到心跳,就從服務實例中移除。
- 服務負載均衡:Nacos會向客戶端返回一個服務列表,客戶端可以選擇本地的負載均衡算法選擇其中的一個進行調用。
Eureka的實現原理是一樣的。
服務實例啟動時,會將自己的信息注冊到注冊中心。Nacos Serve會將注冊信息保存在內存,并提供REST接口供其它服務訪問。Nacos通過心跳監測來檢查服務實例是否異常,如果定期時間內沒有返回心跳,就將服務實例設置為不可用。如果過段時間還沒有返回心跳,則將服務實例從實例列表中移除。注冊中心會將服務實例列表發送給Nacos客戶端,Nacos客戶端會根據本地的負載均衡算法選擇一個實例調用。
2.Nacos是如何實現配置的動態更新的?
- Nacos采用的是長輪詢的方式向Nacos Server發起配置更新的查詢功能,服務端配置沒有變更的時候連接是一直打開的,直到服務端配置發生變更或者連接超時才會返回。
- Nacos 客戶端需要獲取服務端的變更配置,比較本地配置信息和服務器的配置信息。一旦發現服務端的配置有差異就表示服務器的配置有更新,需要將更新的配置拉取到本地。
Nacos采用長輪詢的方式來檢查配置信息變更,如果服務端配置信息沒變更,連接就會一直打開。如果服務端的配置信息發生變更,就將變更的配置信息拉取到本地。
3.Nacos如何完成配置共享和熱更新的?
- 首先添加配置信息到Nacos中
- 然后在
bootstrap.yaml
文件中拉取共享配置。
Spring 在初始化的時候會讀取bootstrap文件。比如我們將購物車上限數量10,設置到Nacos中。這樣我們更新購物車上限數量時,就不需要重啟系統了。
Nacos實現配置共享和熱更新時,首先將配置信息添加到Nacos中,然后在bootstrap.yaml文件中拉取共享配置。Spring初始化的時候會先讀取bootstrap.yaml文件,然后讀取application.yaml文件。