配置中心 選型 : Apollo Vs. Nacos Vs. spring cloud config

為什么我們需要一個微服務配置中心?

首先,我們可以想象下,如果沒有配置中心,我們的項目可能是這樣的:不同環境的配置文件都放在項目里面,部署時可以通過啟動參數來指定使用哪個環境的配置。

這種方式有兩個比較大的缺點:

一是不安全,項目的開發人員可以看到生產環境的各種地址、賬號、密碼等敏感信息;

二是配置更新需要重啟項目才能生效,影響了服務的連續性和效率。配置中心就是為了解決這些問題而存在的。

它能夠提供一個集中的地方來管理和存儲配置信息,使得配置與代碼分離,并且支持動態刷新配置,無需重啟應用即可使新的配置生效,從而提高了系統的安全性及靈活性。

配置中心最關鍵的技術要素

安全性

將配置文件從項目中分離出來,并放置在一個獨立的存儲位置,是提高安全性的一種常見做法。然而,僅通過這種方式并不能完全解決安全問題。在測試環境和生產環境共用同一個配置中心的情況下,開發人員能夠訪問到測試環境中的配置,也就意味著他們同樣可以獲取到生產環境中的敏感信息,如地址、賬號、密碼等。為了進一步加強安全性,一種有效的策略是為不同的環境設置獨立的配置中心。這樣一來,即便開發人員擁有測試環境配置中心的訪問權限,也無法直接接觸到生產環境的配置信息。此外,還可以結合使用加密技術對敏感數據進行保護,以及采用細粒度的權限控制機制,確保只有授權用戶才能查看或修改特定配置。

高可用性

高可用性對于配置中心而言至關重要,尤其是在系統出現故障需要緊急調整配置時,如果此時配置管理系統本身不可用,將會導致整個恢復過程受阻。實現配置中心高可用性的關鍵在于冗余設計。一方面,可以通過部署多個配置服務實例來提供服務端的高可用支持,這些實例間應具備良好的負載均衡能力,即使部分節點失效,剩余節點也能繼續對外提供穩定的服務;另一方面,在客戶端側,當主配置服務器發生故障時,應該能自動切換至備用服務器讀取配置信息,以保證業務連續性不受影響。同時,為了確保推送配置的可靠性,建議采用異步消息隊列機制,使得即使在網絡不穩定的情況下,也能可靠地完成配置更新操作。

實時性

實時響應配置變更對于現代應用來說非常重要。理想情況下,一旦配置發生變化,所有相關的客戶端都應該能夠立即感知并應用新的設置。實現這一點通常有兩種方法:第一種方式是讓客戶端周期性地向配置中心請求最新的配置版本,這種方法簡單但效率較低,特別是在配置變化頻繁時可能會產生較高的網絡開銷;另一種更高效的方法是由配置中心主動向已注冊的客戶端推送變更通知,客戶端收到通知后拉取最新配置即可。后者不僅減少了不必要的網絡通信,還顯著提高了配置更新的速度與準確性。

方便管理

良好的用戶體驗對于配置中心來說也是必不可少的一環。為此,大多數配置中心都會配備一個直觀易用的控制臺界面,供管理員執行日常維護任務。根據實際需求的不同,控制臺的設計可能存在差異。一種常見的模式是所有環境共享同一套控制臺工具,這種方式的好處在于簡化了運維流程,降低了學習成本;而另一種模式則是根據不同環境定制專門的控制臺入口,這樣做的優點在于能夠更好地隔離不同環境下的配置管理工作,避免誤操作帶來的風險。無論采取哪種形式,理想的配置中心控制臺都應當具備清晰的功能布局、強大的搜索過濾功能以及完善的審計日志記錄等功能,從而幫助管理員更加高效準確地管理海量配置信息。

那怎么選一個好的配置中心

從我們的經驗來說。

在功能層面,你需要明確自己應用程序的具體需求,包括支持哪些類型的配置項、主要使用的編程語言以及是否涉及微服務架構等。對于采用微服務架構的企業來說,自動化的服務發現和服務注冊能力尤為重要,這將直接影響到系統的靈活性和可擴展性。

系統的穩定性和可靠性,高可用設計是不可忽視的關鍵因素之一。一個良好的配置中心應該具備故障恢復機制,能夠在部分節點出現問題時仍能正常提供服務,從而保證業務連續運行不受影響。

生態系統的成熟度,也是一個重要的考量點。廣泛被采用的技術方案通常意味著社區活躍度較高,相關資源豐富,遇到問題時更容易找到解決方案或獲得幫助。此外,龐大的用戶基數也有助于快速發現潛在的問題,并促使開發者們不斷改進產品。

部署的難易程度,也是不可忽略的一環。理想情況下,所選工具應具有較低的學習曲線及安裝配置門檻,這樣可以節省大量的時間和成本。同時,還應該根據自身實際情況評估所需投入的硬件資源是否合理。

尋找那些擁有良好文檔支持、活躍討論區或者專業客服團隊的產品也非常重要。這些“周邊”服務可以幫助你在使用過程中更加順暢地解決問題,提升工作效率。

最后但同樣關鍵的是,考察背后開發團隊的實力及其商業模型。一個健康發展的項目往往能夠獲得足夠的資金支持來維持其長期運營與發展,這意味著你所依賴的技術棧在未來幾年內都將是安全可靠的。綜上所述,通過全面權衡上述各個方面,可以幫助企業做出更為明智的選擇。

主流配置中心功能選型表

Server端選型對比表

功能

子功能點

Nacos

Apollo

Spring Cloud Config

備注

發布配置

二階段發布(編輯草稿->發布)

properties key單行變更

格式校驗

實時推送

變更歷史

正式歷史

灰度歷史

變更對比

nacos只展示變更前的內容,apollo支持單key維度變更前后對比,及全量對比

配置對比

跨實例對比

nacos跨實例對比對應apollo的跨環境對比

跨分組對比

nacos跨分組對比對應apollo跨集群對比

跨dataId對比

nacos支持任意配置對比,apollo支持appId下的某個namespace跨環境和集群對比

單行key級別對比

配置克隆

灰度發布

nacos 基于IP+標簽(多key可擴展),apollo 基于IP+標簽(單key)

監聽查詢

apollo中展示ip最新配置查詢時間,nacos中展示

推送軌跡

配置推送軌跡

apollo在監聽查詢中展示最新配置獲取時間(nacos中可優化),但沒有md5

IP推送軌跡

鑒權管理

寫權限

apollo對創建配置和發布配置分配不同的權限

讀身份

讀權限

nacos基于ram支持實例,分組,dataId命名空間維度鑒權,apollo支持配置秘鑰,只校驗身份,無鑒權

細粒度鑒權

nacos基于ram支持實例,分組,dataId命名空間維度鑒權,apollo支持namespace維度,apollo易用性更高

運維管理

部門管理

應用管理

用戶管理

加解密

apollo需要自行加解密

導入導出

多實例管理

控制臺和配置服務分離,支持通過env區分多個配置中心實例

運維審計日志

創建用戶,創建應用,創建配置,修改配置,發布灰度

容量保護

集群容量,命名空間容量

反脆弱

查詢配置,發布配置限流

監控

基礎監控及業務監控

client端功能對比表

功能

子功能

Nacos

Apollo

Spring Cloud Config

查詢配置

本地容災

本地緩存

監聽回調

配置整體監聽

單行key級別監聽

注解

Spring Value注解注入key值

注解監聽回調

對象級別變更回調

配置注入對象

發布配置

刪除配置

市面主流的配置中心的一些個人主觀快速評價

Nacos 是目前推薦的配置中心之一,因其具備了功能齊全、社區活躍度高以及阿里等大公司都在使用的特點。它不僅支持多環境配置管理,還提供了服務發現和動態配置等功能,這使得它在云原生應用構建中顯得尤為重要。關于多語言支持方面,雖然之前存在一定的局限性,特別是在Python的支持上不夠理想,但最近社區已經在這方面進行了改進,具體情況值得持續關注。

對于Apollo來說,盡管其作為攜程開源項目,在分布式配置管理和集中化管理方面做得不錯,但是它的架構相對復雜,且對多語言及不同配置格式的支持較為有限。尤其是部署過程中需要依賴Eureka這樣的組件,增加了使用的難度。

Spring Cloud Config 主要為Spring生態下的應用提供了一種集中式配置管理方案,它很好地融入到了Spring Cloud體系內,但缺點在于缺乏圖形化的配置界面,同時對于非GitHub存儲的配置文件管理工具支持不足,這也限制了其適用范圍。

綜上所述,基于當前情況分析,Nacos確實可以被視為最優選擇,尤其是在國內環境中,其強大的功能性與良好的社區支持使其能夠滿足大部分企業級應用場景的需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62565.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62565.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62565.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS(65) ArkUI FrameNode詳解

Node 1、Node簡介2、FrameNode2.1、創建和刪除節點2.2、對FrameNode的增刪改2.3、 FramNode的查詢功能3、demo源碼4、總結5、參考資料1、Node簡介 在HarmonyOS(63) ArkUI 自定義占位組件NodeContainer介紹了自定義節點復用的原理(閱讀本本篇博文之前,建議先讀讀這個),在No…

詳解RabbitMQ在Ubuntu上的安裝

??????? 目錄 Ubuntu 環境安裝 安裝Erlang 查看Erlang版本 退出命令 ?編輯安裝RabbitMQ 確認安裝結果 安裝RabbitMQ管理界面 啟動服務 查看服務狀態 通過IP:port訪問 添加管理員用戶 給用戶添加權限 再次訪問 Ubuntu 環境安裝 安裝Erlang RabbitMq需要…

vue圖片之放大、縮小、1:1、刷新、左切換、全屏、右切換、左旋咋、右旋轉、x軸翻轉、y軸翻轉

先上效果&#xff0c;代碼在下面 <template><!-- 圖片列表 --><div class"image-list"><img:src"imageSrc"v-for"(imageSrc, index) in images":key"index"click"openImage(index)"error"handleI…

【計算機網絡】實驗12:網際控制報文協議ICMP的應用

實驗12 網際控制報文協議ICMP的應用 一、實驗目的 驗證ping命令和tracert命令的工作原理。 二、實驗環境 Cisco Packet Tracer模擬器 三、實驗過程 1.構建網絡拓撲并進行信息標注&#xff0c;將所需要配置的IP地址寫在對應的主機或者路由器旁邊&#xff0c;如圖1所示。 圖…

迭代器模式的理解和實踐

引言 在軟件開發中&#xff0c;我們經常需要遍歷容器對象&#xff08;如數組、列表、集合等&#xff09;中的元素。如果每個容器對象都實現自己的遍歷算法&#xff0c;那么代碼將會變得冗余且難以維護。為了解決這個問題&#xff0c;迭代器模式應運而生。迭代器模式是一種行為型…

TS2339: Property ‘value‘ does not exist on type ‘MessageBoxData‘.

1、源代碼 <template><el-dialog:visible"visible":before-close"handleClose":close-on-click-modal"false"title"邀請碼"width"1200px"append-to-bodydestroy-on-close><div class"invite-code-wrap…

ubuntu防火墻(三)——firewalld使用與講解

本文是Linux下&#xff0c;用ufw實現端口關閉、流量控制(二) firewalld使用方式 firewalld 是一個動態管理防火墻的工具&#xff0c;主要用于 Linux 系統&#xff08;包括 Ubuntu 和 CentOS 等&#xff09;。它提供了一個基于區域&#xff08;zones&#xff09;和服務&#x…

Windows 安裝配置 RabbitMQ 詳解

博主介紹&#xff1a; 計算機科班人&#xff0c;全棧工程師&#xff0c;掌握C、C#、Java、Python、Android等主流編程語言&#xff0c;同時也熟練掌握mysql、oracle、sqlserver等主流數據庫&#xff0c;能夠為大家提供全方位的技術支持和交流。 工作五年&#xff0c;具有豐富的…

R語言的數據結構--矩陣

【圖書推薦】《R語言醫學數據分析實踐》-CSDN博客 《R語言醫學數據分析實踐 李丹 宋立桓 蔡偉祺 清華大學出版社9787302673484》【摘要 書評 試讀】- 京東圖書 (jd.com) R語言醫學數據分析實踐-R語言的數據結構-CSDN博客 矩陣是一個二維數組&#xff0c;矩陣中的元素都具有相…

JAVA基礎學習筆記_反射+動態代理

文章目錄 反射獲取class對象的三種方式獲取構造方法獲取成員變量獲取成員方法反射的作用 動態代理 反射 允許對成員變量\成員方法\構造方法的信息進行編程訪問 把類內的信息扒的干干凈凈,獲取解剖 獲取從class字節碼文件中獲取 獲取class對象的三種方式 public static void …

微信小程序一鍵復制功能

wx.setClipboardData(Object object) 設置系統剪貼板的內容。調用成功后&#xff0c;會彈出 toast 提示"內容已復制"&#xff0c;持續 1.5s wx.setClipboardData({data: 你需要復制的內容,success (res) {wx.getClipboardData({success (res) {console.log(res.dat…

【Python網絡爬蟲 常見問題匯總】

目錄 1. 爬取圖片出現403解決辦法&#xff1a;設置請求頭中的Referer字段 2.關于干壞事的問題后續不定期更新 歡迎共同探討學習進步 1. 爬取圖片出現403 問題出自案例9&#xff0c;已解決。 【Python網絡爬蟲筆記】9- 抓取優美圖庫高清壁紙 當在爬取圖庫圖片時遇到 403 錯誤…

Linux: docker: 怎么修改 proc下的文件內容?

文章目錄 參考問題方法 1:在宿主機上修改參數方法 2:啟動容器時掛載 /proc 為可寫方法 3:通過 Kubernetes 調整配置方法 4:構建特權容器參考 https://docs.docker.com/security/for-admins/hardened-desktop/enhanced-container-isolation/features-benefits/#procfs–sys…

分布式 分布式事務 總結

前言 相關系列 《分布式 & 目錄》《分布式 & 分布式事務 & 總結》《分布式 & 分布式事務 & 問題》 分布式事務 所謂分布式事務是指操作范圍籠罩多個不同節點的事務。例如對于訂單節點&庫存節點而言&#xff0c;一次完整的交易需要同時調動兩個節…

STM32+模擬或硬件IIC+SHT20驅動問題:接上拉電阻、BUSY死鎖?

主要問題&#xff1a; 1&#xff0c;使用STM32F103C8T6&#xff0c;模擬IIC&#xff0c;SCL和SDA口配置為推挽輸出上拉&#xff0c;主要是SDA腳&#xff0c;每次都要輸出輸入模式重新配置&#xff0c;雖然也能通信&#xff0c;但不穩定&#xff0c;出錯率大&#xff1b; 2&…

【工業機器視覺】基于深度學習的水表盤讀數識別(3-數據標注與轉換)

【工業機器視覺】基于深度學習的儀表盤識讀&#xff08;2&#xff09;-CSDN博客 數據標注 標注擴展 Labelme 和 LabelImg 都是用于創建機器學習和計算機視覺項目所需標注數據的工具。它們都允許用戶通過圖形界面手動標注圖像&#xff0c;但各自有其特點和適用場景。 Labelme…

靜態路由與交換機配置實驗

1.建立網絡拓撲 添加2臺計算機&#xff0c;標簽名為PC0、PC1&#xff1b;添加2臺二層交換機2960&#xff0c;標簽名為S0、S1&#xff1b;添加2臺路由器2811&#xff0c;標簽名為R0、R1&#xff1b;交換機劃分的VLAN及端口根據如下拓撲圖&#xff0c;使用直通線、DCE串口線連接…

【Spark】Spark Join類型及Join實現方式

Spark Join類型 1. Inner Join (內連接) 示例&#xff1a;val result df1.join(df2, df1("id") df2("id"), "inner")執行邏輯&#xff1a;只返回那些在兩個表中都有匹配的行。 2. Left Join (左外連接) 示例&#xff1a;val result df1.jo…

socket UDP 環路回顯的服務端

基于socket通訊的方式&#xff0c;無論用http或者udp或者自定義的協議&#xff0c;程序結構都是類似的。這個以UDP協議為例簡要說明。 #include <stdio.h> // 標準輸入輸出庫 #include <sys/types.h> // 提供了一些數據類型&#xff0c;如ssize_t #include <sy…

Linux:network:添加ip的時候自動添加一個本地路由

文章目錄 問題問題 最近在看一個路由的問題,順便看內核代碼,發現在添加IP的時候,內核會自動添加一個local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…