一牍氛、使用配置中心的意義
1.配置實時生效
傳統(tǒng)的靜態(tài)配置方式要想修改某個配置只能修改之后重新發(fā)布應(yīng)用曲横。要實現(xiàn)動態(tài)性桨啃,可以選擇使用數(shù)據(jù)庫睦刃,通過定時輪詢訪問數(shù)據(jù)庫來感知配置的變化砚嘴。
輪詢頻率低感知配置變化的延時就長,輪詢頻率高涩拙,感知配置變化的延時就短际长,但比較損耗性能,需要在實時性和性能之間做折中兴泥。配置中心專門針對這個業(yè)務(wù)場景工育,兼顧實時性和一致性來管理動態(tài)配置。
2.配置管理流程
配置的權(quán)限管控郁轻、灰度發(fā)布翅娶、版本管理、格式檢驗和安全配置等一系列的配置管理相關(guān)的特性也是配置中心不可獲取的一部分好唯。
文章較長竭沫,盡早收藏!
二骑篙、市面常見的幾種配置中心介紹
1.Disconf
2014年7月百度開源的配置管理中心蜕提,同樣具備配置的管理能力,不過目前已經(jīng)不維護了靶端,最近的一次提交是兩年前(2017年)了谎势。下文不做比較凛膏。
2.Spring Cloud Config
2014年9月開源,Spring Cloud 生態(tài)組件脏榆,可以和Spring Cloud體系無縫整合猖毫。
3.Apollo
2016年5月,攜程開源的配置管理中心须喂,具備規(guī)范的權(quán)限吁断、流程治理等特性。
4.Nacos
2018年6月坞生,阿里開源的配置中心仔役,也可以做DNS和RPC的服務(wù)發(fā)現(xiàn)。
順便給大家推薦一個Java技術(shù)交流群:473984645里面會分享一些資深架構(gòu)師錄制的視頻資料:有Spring是己,MyBatis又兵,Netty源碼分析,高并發(fā)卒废、高性能沛厨、分布式、微服務(wù)架構(gòu)的原理升熊,JVM性能優(yōu)化俄烁、分布式架構(gòu)等這些成為架構(gòu)師必備的知識體系。還能領(lǐng)取免費的學(xué)習(xí)資源级野,目前受益良多页屠!
三、市面常見的幾種配置中心對比
3.1核心概念的對比
1.應(yīng)用
應(yīng)用是客戶端系統(tǒng)的基本單位蓖柔。
1-1:Spring Cloud Config 將應(yīng)用名稱和對應(yīng)Git中的文件名稱關(guān)聯(lián)起來了辰企,這樣可以起到多個應(yīng)用配置相互隔離的作用。
1-2:Apollo的配置都是在某個應(yīng)用下面的(除了公共配置)况鸣,也起到了多個應(yīng)用配置相互隔離的作用牢贸。
1-3:Nacos的應(yīng)用概念比較弱,只有一個用于區(qū)分配置的額外屬性镐捧,不過可以使用 Group 來做應(yīng)用字段潜索,可以起到隔離作用。
2.集群
不同的環(huán)境可以搭建不同的集群懂酱,這樣可以起到物理隔離的作用竹习,Spring Cloud Config、Apollo列牺、Nacos都支持多個集群整陌。
3.Label Profile & 環(huán)境 & 命名空間
3-1:Spring Cloud Config可以使用Label和Profile來做邏輯隔離,Label指遠程倉庫的分支,Profile類似Maven Profile可以區(qū)分環(huán)境泌辫,比如{application}-{profile}.properties随夸。
3-2:Apollo中的命名空間指配置的名稱,具體的配置項指配置文件中的一個Property震放。
3-3:Nacos的命名空間和Apollo的環(huán)境一樣宾毒,是一個邏輯概念,可以作為環(huán)境邏輯隔離澜搅。
3.2 配置管理功能的對比
1)灰度發(fā)布
配置的灰度發(fā)布是配置中心比較重要的功能伍俘,當(dāng)配置的變更影響比較大的時候,需要先在部分應(yīng)用實例中驗證配置的變更是否符合預(yù)期勉躺,然后再推送到所有應(yīng)用實例。
1-1:Spring Cloud Config支持通過/bus/refresh端點的destination參數(shù)來指定要更新配置的機器觅丰,不過整個流程不夠自動化和體系化饵溅。
1-2:Apollo可以直接在控制臺上點灰度發(fā)布指定發(fā)布機器的IP,接著再全量發(fā)布妇萄,做得比較體系化蜕企。
1-3:Nacos目前發(fā)布到0.9版本,還不支持灰度發(fā)布冠句。
2)權(quán)限管理
配置的變更和代碼變更都是對應(yīng)用運行邏輯的改變轻掩,重要的配置變更常常會帶來核彈的效果,對于配置變更的權(quán)限管控和審計能力同樣是配置中心重要的功能懦底。
2-1:Spring Cloud Config依賴Git的權(quán)限管理能力唇牧,開源的GitHub權(quán)限控制可以分為Admin、Write和Read權(quán)限聚唐,權(quán)限管理比較完善丐重。
2-2:Apollo通過項目的維度來對配置進行權(quán)限管理,一個項目的owner可以授權(quán)給其他用戶配置的修改發(fā)布權(quán)限杆查。
2-3:Nacos目前看還不具備權(quán)限管理能力扮惦。
3)版本管理&回滾
當(dāng)配置變更不符合預(yù)期的時候,需要根據(jù)配置的發(fā)布版本進行回滾亲桦。Spring Cloud Config崖蜜、Apollo和Nacos都具備配置的版本管理和回滾能力,可以在控制臺上查看配置的變更情況或進行回滾操作客峭。Spring Cloud Config通過Git來做版本管理豫领,更方便些。
4)配置格式校驗
應(yīng)用的配置數(shù)據(jù)存儲在配置中心一般都會以一種配置格式存儲桃笙,比如Properties氏堤、Json、Yaml等,如果配置格式錯誤鼠锈,會導(dǎo)致客戶端解析配置失敗引起生產(chǎn)故障闪檬,配置中心對配置的格式校驗?zāi)軌蛴行Х乐谷藶殄e誤操作的發(fā)生,是配置中心核心功能中的剛需购笆。
4-1:Spring Cloud Config使用Git粗悯,目前還不支持格式檢驗,格式的正確性依賴研發(fā)人員自己同欠。
4-2:Apollo和Nacos都會對配置格式的正確性進行檢驗样傍,可以有效防止人為錯誤。
5)監(jiān)聽查詢
當(dāng)排查問題或者進行統(tǒng)計的時候铺遂,需要知道一個配置被哪些應(yīng)用實例使用到衫哥,以及一個實例使用到了哪些配置。
5-1:Spring Cloud Config使用Spring Cloud Bus推送配置變更襟锐,Spring Cloud Bus兼容 RabbitMQ撤逢、Kafka等,支持查詢訂閱Topic和Consumer的訂閱關(guān)系粮坞。
5-2:Apollo可以通過灰度實例列表查看監(jiān)聽配置的實例列表蚊荣,但實例監(jiān)聽的配置(Apollo稱為命名空間)目前還沒有展示出來。
5-3:Nacos可以查看監(jiān)聽配置的實例莫杈,也可以查看實例監(jiān)聽的配置情況互例。
基本上,這三個產(chǎn)品都具備監(jiān)聽查詢能力筝闹,在使用過程中媳叨,Nacos使用起來相對簡單,易用性相對更好些丁存。
6)多環(huán)境
在實際生產(chǎn)中肩杈,配置中心常常需要涉及多環(huán)境或者多集群,業(yè)務(wù)在開發(fā)的時候可以將開發(fā)環(huán)境和生產(chǎn)環(huán)境分開解寝,或者根據(jù)不同的業(yè)務(wù)線存在多個生產(chǎn)環(huán)境扩然。如果各個環(huán)境之間的相互影響比較小(開發(fā)環(huán)境影響到生產(chǎn)環(huán)境穩(wěn)定性)聋伦,配置中心可以通過邏輯隔離的方式支持多環(huán)境夫偶。
6-1:Spring Cloud Config支持Profile的方式隔離多個環(huán)境,通過在Git上配置多個Profile的配置文件觉增,客戶端啟動時指定Profile就可以訪問對應(yīng)的配置文件兵拢。
6-2:Apollo也支持多環(huán)境,在控制臺創(chuàng)建配置的時候就要指定配置所在的環(huán)境逾礁,客戶端在啟動的時候指定JVM參數(shù)ENV來訪問對應(yīng)環(huán)境的配置文件说铃。
6-3:Nacos通過命名空間來支持多環(huán)境访惜,每個命名空間的配置相互隔離,客戶端指定想要訪問的命名空間就可以達到邏輯隔離的作用腻扇。
順便給大家推薦一個Java技術(shù)交流群:473984645里面會分享一些資深架構(gòu)師錄制的視頻資料:有Spring债热,MyBatis,Netty源碼分析幼苛,高并發(fā)窒篱、高性能、分布式舶沿、微服務(wù)架構(gòu)的原理墙杯,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識體系括荡。還能領(lǐng)取免費的學(xué)習(xí)資源高镐,目前受益良多!
7)多集群
當(dāng)對穩(wěn)定性要求比較高畸冲,不允許各個環(huán)境相互影響的時候避消,需要將多個環(huán)境通過多集群的方式進行物理隔離。
7-1:Spring Cloud Config可以通過搭建多套Config Server召夹,Git使用同一個Git的多個倉庫,來實現(xiàn)物理隔離恕沫。
7-2:Apollo可以搭建多套集群监憎,Apollo的控制臺和數(shù)據(jù)更新推送服務(wù)分開部署,控制臺部署一套就可以管控多個集群婶溯。
7-3:Nacos控制臺和后端配置服務(wù)是部署在一起的鲸阔,可以通過不同的域名切換來支持多集群。
3.3 配置實時推送的對比
當(dāng)配置變更的時候迄委,配置中心需要將配置實時推送到應(yīng)用客戶端褐筛。
1.Nacos和Apollo配置推送都是基于HTTP長輪詢,客戶端和配置中心建立HTTP長聯(lián)接叙身,當(dāng)配置變更的的時候渔扎,配置中心把配置推送到客戶端。
2.Spring Cloud Config原生不支持配置的實時推送信轿,需要依賴Git的WebHook晃痴、Spring Cloud Bus和客戶端/bus/refresh端點:
①基于Git的WebHook,配置變更觸發(fā)server端refresh
②Server端接收到請求并發(fā)送給Spring Cloud Bus
③Spring Cloud Bus接到消息并通知給客戶端
④客戶端接收到通知财忽,請求Server端獲取最新配置
整體比較下來倘核,Nacos和Apollo在配置實時推送鏈路上是比較簡單高效的,Spring Cloud Config的配置推送引入Spring Cloud Bus即彪,鏈路較長紧唱,比較復(fù)雜。
3.4 部署結(jié)構(gòu) & 高可用的對比
1.Spring Cloud Config
Spring Cloud Config包含config-server、Git和Spring Cloud Bus三大組件:①config-server提供給客戶端獲取配置;②Git用于存儲和修改配置;③Spring Cloud Bus通知客戶端配置變更;
本地測試模式下漏益,Spring Cloud Bus和config-server需要部署一個節(jié)點蛹锰,Git使用GitHub就可以。在生產(chǎn)環(huán)境中遭庶,Spring Cloud Config宁仔,config-server需要部署至少兩個節(jié)點。Spring Cloud Bus如果使用RabbitMQ峦睡,普通集群模式至少需要兩個節(jié)點翎苫。
Git服務(wù)如果使用GitHub就不用考慮高可用問題,如果考慮到安全性要自建Git私有倉庫榨了,整體的成本比較高煎谍。Web服務(wù)可以部署多節(jié)點支持高可用,由于Git有數(shù)據(jù)的一致性問題龙屉,可以通過以下的方式來支持高可用:①Git+Keepalived冷備模式呐粘,當(dāng)主Git掛了可以馬上切到備Git;②Git多節(jié)點部署,存儲使用網(wǎng)絡(luò)文件系統(tǒng)或者通過DRBD實現(xiàn)多個Git節(jié)點的數(shù)據(jù)同步;
2.Apollo
Apollo分為MySQL转捕,Config Service作岖,Admin Service,Portal四個模塊:①MySQL存儲Apollo元數(shù)據(jù)和用戶配置數(shù)據(jù);②Config Service提供配置的讀取五芝、推送等功能痘儡,客戶端請求都是落到Config Service上;③Admin Service提供配置的修改、發(fā)布等功能枢步,Portal操作的服務(wù)就是Admin Service;④Portal提供給用戶配置管理界面沉删。
本地測試Config Service,Admin Service醉途,Portal三個模塊可以合并一起部署矾瑰,MySQL單獨安裝并創(chuàng)建需要的表結(jié)構(gòu)。在生產(chǎn)環(huán)境使用Apollo隘擎,Portal可以兩個節(jié)點單獨部署殴穴,穩(wěn)定性要求沒那么高的話,Config Service和Admin Service可以部署在一起嵌屎,數(shù)據(jù)庫支持主備容災(zāi)推正。
3.Nacos
Nacos部署需要Nacos Service和MySQL:①Nacos對外提供服務(wù),支持配置管理和服務(wù)發(fā)現(xiàn);②MySQL提供Nacos的數(shù)據(jù)持久化存儲;
單機模式下宝惰,Nacos可以使用嵌入式數(shù)據(jù)庫部署一個節(jié)點植榕,就能啟動。如果對MySQL比較熟悉尼夺,想要了解整體數(shù)據(jù)流向尊残,可以安裝MySQL提供給Nacos數(shù)據(jù)持久化服務(wù)炒瘸。生產(chǎn)環(huán)境使用Nacos,Nacos服務(wù)需要至少部署三個節(jié)點寝衫,再加上MySQL主備顷扩。
整體來看:Nacos的部署結(jié)構(gòu)比較簡單,運維成本較低慰毅。Apollo部署組件較多隘截,運維成本比Nacos高。Spring Cloud Config生產(chǎn)高可用的成本最高汹胃。
3.5 多語言支持的對比
一個公司的各個系統(tǒng)可能語言不盡相同婶芭,現(xiàn)在使用的比較多的比如C++,Java着饥,PHP犀农,Python,Nodejs宰掉,還有Go等呵哨。引入配置中心之后,配置中心要想讓多語言的系統(tǒng)都能享受到動態(tài)配置的能力轨奄,需要支持多語言生態(tài)孟害。
1.Spring Cloud服務(wù)于Java生態(tài),一開始只是針對Java微服務(wù)應(yīng)用挪拟,對于非Java應(yīng)用的微服務(wù)調(diào)用纹坐,可以使用Sidecar提供了HTTP API,但動態(tài)配置方面還不能很好的支持舞丛。
2.Apollo已經(jīng)支持了多種語言,并且提供了open API果漾。其他不支持的語言球切,Apollo的接入成本相對較低。
3.Nacos支持主流的語言绒障,例如Java吨凑、Go、Python户辱、Nodejs鸵钝、PHP等,也提供了open API庐镐。
3.6 遷移支持
國內(nèi)主流的互聯(lián)網(wǎng)公司仍是以Java為主恩商,除了原生Java SDK,在對整個Java生態(tài)必逆,比如Spring Boot和Spring Cloud的支持上怠堪,三個產(chǎn)品都是支持的揽乱。
1.Spring Cloud Config原生就支持Spring Boot和Spring Cloud,Nacos通過Spring Cloud for Alibaba支持Spring Boot和Spring Cloud生態(tài)粟矿,符合Spring生態(tài)中的標準實現(xiàn)方式凰棉,可以無縫從Spring Cloud Conig遷移到Nacos。
2.Apollo支持Spring Boot和Spring Cloud項目陌粹,但是實現(xiàn)方式不同于標準撒犀,無法做無縫遷移,從Spring Cloud遷移到Apollo掏秩,存在代碼改造和兼容性成本或舞。
3.7 性能對比
性能也是配置中心繞不過的一環(huán),在同樣的機器規(guī)格下哗讥,如果能支撐更大的業(yè)務(wù)量嚷那,勢必能替公司節(jié)省更多的資源成本,提高資源利用率杆煞。應(yīng)用客戶端對配置中心的接口操作有讀魏宽、寫和變更通知,由于變更通知需要大量的客戶端實例决乎,不好模擬測試場景队询,下面僅對讀和寫操作做了測試。
1.硬件環(huán)境
Nacos和Apollo使用同樣的數(shù)據(jù)庫(32C128G)构诚,部署Server服務(wù)的機器使用的8C16G配置的容器蚌斩,磁盤是100G SSD。
2.版本
Spring Cloud Config使用2.0.0.M9版本范嘱,Apollo使用1.2.0 release版本送膳,Nacos使用0.5版本。
3.單機讀場景
客戶端測試程序通過部署多臺機器丑蛤,每臺機器開啟多個線程從配置中心讀取不同的配置(3000個)叠聋。Nacos QPS可以達到15000,Apollo分為讀內(nèi)存緩存和從數(shù)據(jù)庫中讀兩種方式受裹,從數(shù)據(jù)庫中讀能達到7500碌补,從內(nèi)存讀緩存性能可以達到9000QPS。Spring Cloud Config使用jGit讀寫Git棉饶,由于有客戶端限制厦章,單機讀能力被限制在7QPS。
順便給大家推薦一個Java技術(shù)交流群:473984645里面會分享一些資深架構(gòu)師錄制的視頻資料:有Spring照藻,MyBatis袜啃,Netty源碼分析,高并發(fā)幸缕、高性能囊骤、分布式晃择、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化也物、分布式架構(gòu)等這些成為架構(gòu)師必備的知識體系宫屠。還能領(lǐng)取免費的學(xué)習(xí)資源,目前受益良多滑蚯!
4.3個節(jié)點讀場景
將配置中心的壓測節(jié)點數(shù)都部署成3個節(jié)點浪蹂。Nacos QPS可以達到45000 QPS,Apollo讀內(nèi)存緩存可以達到27000 QPS告材。Nacos和Apollo由于讀場景各個節(jié)點是獨立的坤次,基本就是單機讀場景的3倍關(guān)系。Spring Cloud Config三個節(jié)點讀能力可以到達21QPS斥赋。
5.單機寫場景
同樣的方式缰猴,多臺機器同時在配置中心修改不同的配置。Nacos QPS可以達到1800疤剑,Apollo未使用默認的數(shù)據(jù)庫連接池(10)QPS只能達到800 QPS(CPU未壓滿)滑绒,調(diào)整連接池至100可以達到1100 QPS(CPU壓滿)。Git在提交同一個項目的時候會加鎖隘膘,單機Git寫能在5QPS左右疑故,Spring Cloud Config在使用的時候以一個項目作為數(shù)據(jù)源,寫能力受到Git限制弯菊。
.6. 3個節(jié)點寫場景
同樣的方式纵势,將配置中心的壓測節(jié)點數(shù)都部署成3個節(jié)點。Nacos QPS可以達到6000管钳,Apollo可以達到3300 QPS(CPU壓滿)钦铁,此時MySQL數(shù)據(jù)庫因為配置較高,未成為性能瓶頸才漆。Spring Cloud Config三個節(jié)點時候育瓜,Git也是一個節(jié)點,寫QPS為5栽烂。
整體上來看,Nacos的讀寫性能最高恋脚,Apollo次之腺办,Spring Cloud Config的依賴Git場景不適合開放的大規(guī)模自動化運維API。
四糟描、市面常見的幾種配置中心對比總結(jié)
五怀喉、小結(jié)
總的來說,Apollo和Nacos相對于Spring Cloud Config的生態(tài)支持更廣船响,在配置管理流程上做的更好躬拢。Apollo相對于Nacos在配置管理做的更加全面躲履,不過使用起來也要麻煩一些。Nacos使用起來相對比較簡潔聊闯,在對性能要求比較高的大規(guī)模場景更適合工猜。
此外,Nacos除了提供配置中心的功能菱蔬,還提供了動態(tài)服務(wù)發(fā)現(xiàn)篷帅、服務(wù)共享與管理的功能,降低了服務(wù)化改造過程中的難度拴泌。
文章來源網(wǎng)絡(luò)魏身,對文章有所疑問可以通過私信解決。
在此推薦:個人整理了學(xué)習(xí)資料以PDF文件的形式分享給大家蚪腐,需要查閱的程序員朋友可以來免費領(lǐng)取箭昵。還有我的學(xué)習(xí)筆記PDF文件也免費分享給有需要朋友!Java高級架構(gòu)學(xué)習(xí)資料分享+架構(gòu)師成長之路?