🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c=1000,移動端可微信小程序搜索“歷代文學”)總架構師,
15年
工作經驗,精通Java編程
,高并發設計
,Springboot和微服務
,熟悉Linux
,ESXI虛擬化
以及云原生Docker和K8s
,熱衷于探索科技的邊界,并將理論知識轉化為實際應用。保持對新技術的好奇心,樂于分享所學,希望通過我的實踐經歷和見解,啟發他人的創新思維。在這里,我希望能與志同道合的朋友交流探討,共同進步,一起在技術的世界里不斷學習成長。
技術合作請加本人wx(注明來自csdn):foreast_sea
微服務面試題:配置中心
1. 為什么微服務需要配置中心?
微服務架構中的每個服務通常都需要一些配置信息,例如數據庫連接地址、服務端口、日志級別等。這些配置可能因為不同環境、不同部署實例或者動態運行時需要進行調整和管理。
微服務的實例一般非常多,如果每個實例都需要一個個地去做這些配置,那么運維成本將會非常大,這時候就需要一個集中化的配置中心,去管理這些配置。
2. SpringCloud 可以選擇哪些配置中心?
和注冊中心一樣,SpringCloud 也支持對多種配置中心的集成。常見的配置中心選型包括:
- Spring Cloud Config:官方推薦的配置中心,支持將配置文件存儲在 Git、SVN 等版本控制系統中,并提供 RESTful API 進行訪問和管理。
- ZooKeeper:一個開源的分布式協調服務,可以用作配置中心。它具有高可用性、一致性和通知機制等特性。
- Consul:另一個開源的分布式服務發現和配置管理工具,也可用作配置中心。支持多種配置文件格式,提供健康檢查、故障轉移和動態變更等功能。
- Etcd:一個分布式鍵值存儲系統,可用作配置中心。它使用基于 Raft 算法的一致性機制,提供分布式數據一致性保證。
- Apollo:攜程開源的配置中心,支持多種語言和框架。提供細粒度的配置權限管理、配置變更通知和灰度發布等高級特性,還有可視化的配置管理界面。
- Nacos:阿里巴巴開源的服務發現、配置管理和服務管理平臺,也可以作為配置中心使用。支持服務注冊與發現、動態配置管理、服務健康監測和動態 DNS 服務等功能。
3. Nacos 配置中心的原理了解嗎?
配置中心,說白了就是一句話:配置信息的 CRUD。
具體的實現大概可以分成這么幾個部分:
- 配置信息存儲:Nacos 默認使用內嵌數據庫 Derby 來存儲配置信息,還可以采用 MySQL 等關系型數據庫。
- 注冊配置信息:服務啟動時,Nacos Client 會向 Nacos Server 注冊自己的配置信息,這個注冊過程就是把配置信息寫入存儲,并生成版本號。
- 獲取配置信息:服務運行期間,Nacos Client 通過 API 從 Nacos Server 獲取配置信息。Server 根據鍵查找對應的配置信息,并返回給 Client。
- 監聽配置變化:Nacos Client 可以通過注冊監聽器的方式,實現對配置信息的監聽。當配置信息發生變化時,Nacos Server 會通知已注冊的監聽器,并觸發相應的回調方法。
4. Nacos 配置中心長輪詢機制?
一般來說客戶端和服務端的交互分為兩種:推(Push)
和拉(Pull)
,Nacos 在Pull
的基礎上,采用了長輪詢來進行配置的動態刷新。
在長輪詢模式下,客戶端定時向服務端發起請求,檢查配置信息是否發生變更。如果沒有變更,服務端會"hold"住這個請求,即暫時不返回結果,直到配置發生變化或達到一定的超時時間。
具體的實現過程如下:
- 客戶端發起 Pull 請求,服務端檢查配置是否有變更。如果沒有變更,則設置一個定時任務,在一段時間后執行,并將當前的客戶端連接加入到等待隊列中。
- 在等待期間,如果配置發生變更,服務端會立即返回結果給客戶端,完成一次"推送"操作。
- 如果在等待期間沒有配置變更,等待時間達到預設的超時時間后,服務端會自動返回結果給客戶端,即使配置沒有變更。
- 如果在等待期間,通過 Nacos Dashboard 或 API 對配置進行了修改,會觸發一個事件機制,服務端會遍歷等待隊列,找到發生變更的配置項對應的客戶端連接,并將變更的數據通過連接返回,完成一次"推送"操作。
通過長輪詢的方式,Nacos 客戶端能夠實時感知配置的變化,并及時獲取最新的配置信息。同時,這種方式也降低了服務端的壓力,避免了大量的長連接占用內存資源。