



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 微服務(wù)配置中心完全解讀 在撰寫這篇技術(shù)選型的文章之前,是比較猶豫的。因為,以其中一個開源項目開發(fā)者的身份,去寫一篇三個開源項目的對比,即便很克制的去客觀的比較,也很難有信服力。這就像,既是參賽選手,又想做裁判,觀眾肯定是不買賬的。但最后,仍然決定去寫一篇配置中心的技術(shù)選型參考文,是因為:工作所需,要做一款好用的開源產(chǎn)品,去試用提供相似功能的開源產(chǎn)品是必要的環(huán)節(jié),以找出優(yōu)勢,彌補(bǔ)不足;用戶所需,對于提供相似功能的產(chǎn)品進(jìn)行選型對比,是引入某個開源項目必須要做的事,如果有一份參考,那么勢必能提供一些幫助;(建議:即便有一份可參考的材料,技術(shù)選型的工作仍需要親力親為,實際的業(yè)務(wù)場景和資源配置才是技術(shù)
2、選型最重要的依據(jù));微服務(wù)配置中心是一個微服務(wù)組件,而不是一個大的框架,選型成本較小,客觀對比時不易走偏;本文將從產(chǎn)品功能、使用體驗、實施過程和性能4個緯度進(jìn)行對比,所有素材均來源于該開源項目的官網(wǎng)或GitHub項目頁。為什么需要配置中心配置實時生效:傳統(tǒng)的靜態(tài)配置方式要想修改某個配置只能修改之后重新發(fā)布應(yīng)用,要實現(xiàn)動態(tài)性,可以選擇使用數(shù)據(jù)庫,通過定時輪詢訪問數(shù)據(jù)庫來感知配置的變化。輪詢頻率低感知配置變化的延時就長,輪詢頻率高,感知配置變化的延時就短,但比較損耗性能,需要在實時性和性能之間做折中。配置中心專門針對這個業(yè)務(wù)場景,兼顧實時性和一致性來管理動態(tài)配置。配置管理流程:配置的權(quán)限管控、灰度
3、發(fā)布、版本管理、格式檢驗和安全配置等一系列的配置管理相關(guān)的特性也是配置中心不可獲取的一部分。開源配置中心基本介紹目前市面上用的比較多的配置中心有:(按開源時間排序)Disconf2014年7月百度開源的配置管理中心,同樣具備配置的管理能力,不過目前已經(jīng)不維護(hù)了,最近的一次提交是兩年前了。Spring Cloud Config2014年9月開源,Spring Cloud 生態(tài)組件,可以和Spring Cloud體系無縫整合。Apollo2016年5月,攜程開源的配置管理中心,具備規(guī)范的權(quán)限、流程治理等特性。Nacos2018年6月,阿里開源的配置中心,也可以做DNS和RPC的服務(wù)發(fā)現(xiàn)。配置中心核
4、心概念的對比由于Disconf不再維護(hù),下面對比一下Spring Cloud Config、Apollo和Nacos。Spring Cloud Config、Apollo和Nacos在配置管理領(lǐng)域的概念基本相同,但是也存在一些不同的點,使用配置的過程中會涉及到一些比較重要的概念。應(yīng)用應(yīng)用是客戶端系統(tǒng)的基本單位,Spring Cloud Config 將應(yīng)用名稱和對應(yīng)Git中的文件名稱關(guān)聯(lián)起來了,這樣可以起到多個應(yīng)用配置相互隔離的作用。Apollo的配置都是在某個應(yīng)用下面的(除了公共配置),也起到了多個應(yīng)用配置相互隔離的作用。Nacos的應(yīng)用概念比較弱,只有一個用于區(qū)分配置的額外屬性,不過可以使
5、用 Group 來做應(yīng)用字段,可以起到隔離作用。集群不同的環(huán)境可以搭建不同的集群,這樣可以起到物理隔離的作用,Spring Cloud Config、Apollo、Nacos都支持多個集群。Label Profile & 環(huán)境 & 命名空間Spring Cloud Config可以使用Label和Profile來做邏輯隔離,Label指遠(yuǎn)程倉庫的分支,Profile類似Maven Profile可以區(qū)分環(huán)境,比如perties。Nacos的命名空間和Apollo的環(huán)境一樣,是一個邏輯概念,可以作為環(huán)境邏輯隔離。Apollo中的命名空間指配置的名稱,
6、具體的配置項指配置文件中的一個Property。配置管理功能的對比作為配置中心,配置的整個管理流程應(yīng)該具備流程化能力?;叶劝l(fā)布配置的灰度發(fā)布是配置中心比較重要的功能,當(dāng)配置的變更影響比較大的時候,需要先在部分應(yīng)用實例中驗證配置的變更是否符合預(yù)期,然后再推送到所有應(yīng)用實例。Spring Cloud Config支持通過/bus/refresh端點的destination參數(shù)來指定要更新配置的機(jī)器,不過整個流程不夠自動化和體系化。Apollo可以直接在控制臺上點灰度發(fā)布指定發(fā)布機(jī)器的IP,接著再全量發(fā)布,做得比較體系化。Nacos目前發(fā)布到0.9版本,還不支持灰度發(fā)布。權(quán)限管理配置的變更和代碼變更
7、都是對應(yīng)用運行邏輯的改變,重要的配置變更常常會帶來核彈的效果,對于配置變更的權(quán)限管控和審計能力同樣是配置中心重要的功能。Spring Cloud Config依賴Git的權(quán)限管理能力,開源的GitHub權(quán)限控制可以分為Admin、Write和Read權(quán)限,權(quán)限管理比較完善。Apollo通過項目的維度來對配置進(jìn)行權(quán)限管理,一個項目的owner可以授權(quán)給其他用戶配置的修改發(fā)布權(quán)限。Nacos目前看還不具備權(quán)限管理能力。版本管理&回滾當(dāng)配置變更不符合預(yù)期的時候,需要根據(jù)配置的發(fā)布版本進(jìn)行回滾。Spring Cloud Config、Apollo和Nacos都具備配置的版本管理和回滾能力,可以在控制臺
8、上查看配置的變更情況或進(jìn)行回滾操作。Spring Cloud Config通過Git來做版本管理,更方便些。配置格式校驗應(yīng)用的配置數(shù)據(jù)存儲在配置中心一般都會以一種配置格式存儲,比如Properties、Json、Yaml等,如果配置格式錯誤,會導(dǎo)致客戶端解析配置失敗引起生產(chǎn)故障,配置中心對配置的格式校驗?zāi)軌蛴行Х乐谷藶殄e誤操作的發(fā)生,是配置中心核心功能中的剛需。Spring Cloud Config使用Git,目前還不支持格式檢驗,格式的正確性依賴研發(fā)人員自己。Apollo和Nacos都會對配置格式的正確性進(jìn)行檢驗,可以有效防止人為錯誤。監(jiān)聽查詢當(dāng)排查問題或者進(jìn)行統(tǒng)計的時候,需要知道一個配置被
9、哪些應(yīng)用實例使用到,以及一個實例使用到了哪些配置。Spring Cloud Config使用Spring Cloud Bus推送配置變更,Spring Cloud Bus兼容 RabbitMQ、Kafka等,支持查詢訂閱Topic和Consumer的訂閱關(guān)系。Apollo可以通過灰度實例列表查看監(jiān)聽配置的實例列表,但實例監(jiān)聽的配置(Apollo稱為命名空間)目前還沒有展示出來。Nacos可以查看監(jiān)聽配置的實例,也可以查看實例監(jiān)聽的配置情況?;旧希@三個產(chǎn)品都具備監(jiān)聽查詢能力,在我們自己的使用過程中,Nacos使用起來相對簡單,易用性相對更好些。多環(huán)境在實際生產(chǎn)中,配置中心常常需要涉及多環(huán)境或
10、者多集群,業(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)境。Spring Cloud Config支持Profile的方式隔離多個環(huán)境,通過在Git上配置多個Profile的配置文件,客戶端啟動時指定Profile就可以訪問對應(yīng)的配置文件。Apollo也支持多環(huán)境,在控制臺創(chuàng)建配置的時候就要指定配置所在的環(huán)境,客戶端在啟動的時候指定JVM參數(shù)ENV來訪問對應(yīng)環(huán)境的配置文件。Nacos通過命名空間來支持多環(huán)境,每個命名空間的配置相互隔離,客戶端指定想要訪問
11、的命名空間就可以達(dá)到邏輯隔離的作用。多集群當(dāng)對穩(wěn)定性要求比較高,不允許各個環(huán)境相互影響的時候,需要將多個環(huán)境通過多集群的方式進(jìn)行物理隔離。Spring Cloud Config可以通過搭建多套Config Server,Git使用同一個Git的多個倉庫,來實現(xiàn)物理隔離。Apollo可以搭建多套集群,Apollo的控制臺和數(shù)據(jù)更新推送服務(wù)分開部署,控制臺部署一套就可以管控多個集群。Nacos控制臺和后端配置服務(wù)是部署在一起的,可以通過不同的域名切換來支持多集群。配置實時推送的對比當(dāng)配置變更的時候,配置中心需要將配置實時推送到應(yīng)用客戶端。Nacos和Apollo配置推送都是基于HTTP長輪詢,客戶
12、端和配置中心建立HTTP長聯(lián)接,當(dāng)配置變更的的時候,配置中心把配置推送到客戶端。Spring Cloud Config原生不支持配置的實時推送,需要依賴Git的WebHook、Spring Cloud Bus和客戶端/bus/refresh端點:基于Git的WebHook,配置變更觸發(fā)server端refreshServer端接收到請求并發(fā)送給Spring Cloud BusSpring Cloud Bus接到消息并通知給客戶端客戶端接收到通知,請求Server端獲取最新配置整體比較下來,Nacos和Apollo在配置實時推送鏈路上是比較簡單高效的,Spring Cloud Config的配置
13、推送引入Spring Cloud Bus,鏈路較長,比較復(fù)雜。部署結(jié)構(gòu) & 高可用的對比Spring Cloud ConfigSpring 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é)點。S
14、pring 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ù)同步;ApolloApollo分為MySQL,Config Service,Admin Service,Portal四個模塊:MySQL存儲Apollo元數(shù)
15、據(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)。NacosN
16、acos部署需要Nacos Service和MySQL:Nacos對外提供服務(wù),支持配置管理和服務(wù)發(fā)現(xiàn);MySQL提供Nacos的數(shù)據(jù)持久化存儲;單機(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)高可用的成本最高。多語言支持的對比一個公司的各個系統(tǒng)可能語言不盡
17、相同,現(xiàn)在使用的比較多的比如C+,Java,PHP,Python,Nodejs,還有Go等。引入配置中心之后,配置中心要想讓多語言的系統(tǒng)都能享受到動態(tài)配置的能力,需要支持多語言生態(tài)。多語言支持Spring Cloud服務(wù)于Java生態(tài),一開始只是針對Java微服務(wù)應(yīng)用,對于非Java應(yīng)用的微服務(wù)調(diào)用,可以使用Sidecar提供了HTTP API,但動態(tài)配置方面還不能很好的支持。Apollo已經(jīng)支持了多種語言,并且提供了open API。其他不支持的語言,Apollo的接入成本相對較低。Nacos支持主流的語言,例如Java、Go、Python、Nodejs、PHP等,也提供了open API。
18、遷移支持國內(nèi)主流的互聯(lián)網(wǎng)公司仍是以Java為主,除了原生Java SDK,在對整個Java生態(tài),比如Spring Boot和Spring Cloud的支持上,三個產(chǎn)品都是支持的。Spring Cloud Config原生就支持Spring Boot和Spring Cloud,Nacos通過Spring Cloud for Alibaba支持Spring Boot和Spring Cloud生態(tài),符合Spring生態(tài)中的標(biāo)準(zhǔn)實現(xiàn)方式,可以無縫從Spring Cloud Conig遷移到Nacos。Apollo支持Spring Boot和Spring Cloud項目,但是實現(xiàn)方式不同于標(biāo)準(zhǔn),無法做無
19、縫遷移,從Spring Cloud遷移到Apollo,存在代碼改造和兼容性成本。性能對比性能也是配置中心繞不過的一環(huán),在同樣的機(jī)器規(guī)格下,如果能支撐更大的業(yè)務(wù)量,勢必能替公司節(jié)省更多的資源成本,提高資源利用率。應(yīng)用客戶端對配置中心的接口操作有讀、寫和變更通知,由于變更通知需要大量的客戶端實例,不好模擬測試場景,下面僅對讀和寫操作做了測試。硬件環(huán)境Nacos和Apollo使用同樣的數(shù)據(jù)庫(32C128G),部署Server服務(wù)的機(jī)器使用的8C16G配置的容器,磁盤是100G SSD。版本Spring Cloud Config使用2.0.0.M9版本,Apollo使用1.2.0 release版本
20、,Nacos使用0.5版本。單機(jī)讀場景客戶端測試程序通過部署多臺機(jī)器,每臺機(jī)器開啟多個線程從配置中心讀取不同的配置(3000個)。Nacos QPS可以達(dá)到15000,Apollo分為讀內(nèi)存緩存和從數(shù)據(jù)庫中讀兩種方式,從數(shù)據(jù)庫中讀能達(dá)到7500,從內(nèi)存讀緩存性能可以達(dá)到9000QPS。Spring Cloud Config使用jGit讀寫Git,由于有客戶端限制,單機(jī)讀能力被限制在7QPS。3節(jié)點讀場景將配置中心的壓測節(jié)點數(shù)都部署成3個節(jié)點。Nacos QPS可以達(dá)到45000 QPS,Apollo讀內(nèi)存緩存可以達(dá)到27000 QPS。Nacos和Apollo由于讀場景各個節(jié)點是獨立的,基本就是單機(jī)讀場景的3倍關(guān)系。Spring Cloud Config三個節(jié)點讀能力可以到達(dá)21QPS。單機(jī)寫場景同樣的方式,多臺機(jī)器同時在配置中心修改不同的配置。Nacos QPS可以達(dá)到1800,Apollo未使用默認(rèn)的數(shù)據(jù)庫連接池(10)QPS只能達(dá)到800 QPS(CPU未壓滿),調(diào)整連接池至100可以達(dá)到1100 QPS(CPU壓滿)。Git在提交同一個項目的時候會加鎖,單機(jī)Git寫能在5QPS左右,Spring Cloud Config在使用的時候以一個項目作為數(shù)據(jù)源,寫能力受到Git限制。3節(jié)點寫場景同樣的方式,將配置中心
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 飲料合作加盟合同范本
- 公司聘用文秘合同范本
- 隔熱夾芯板采購合同范本
- 公司代簽合同范本
- 香港公司股權(quán)合同范本
- 基地魚塘租售合同范本
- 新款合同范本模板
- 衣物袋采購合同范本
- 倉庫舊料回收合同范本
- 車輛安全協(xié)議合同范本
- 惠州衛(wèi)生職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試真題2022
- XXX加油站風(fēng)險分級管控臺賬
- 甘12J8 屋面標(biāo)準(zhǔn)圖集
- 購買設(shè)備合同
- GB/T 28288-2012足部防護(hù)足趾保護(hù)包頭和防刺穿墊
- GB/T 19666-2019阻燃和耐火電線電纜或光纜通則
- GA/T 1241-2015法庭科學(xué)四甲基聯(lián)苯胺顯現(xiàn)血手印技術(shù)規(guī)范
- 小學(xué)和初中科學(xué)教學(xué)銜接
- 《循證醫(yī)學(xué)》治療性研究證據(jù)的評價和應(yīng)用
- “李可中醫(yī)藥學(xué)術(shù)流派論治厥陰病”-課件
- 通用技術(shù)作品設(shè)計報告
評論
0/150
提交評論