




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、DisConf簡述摘要為了更好的解決分布式環(huán)境下多臺(tái)服務(wù)實(shí)例的配置統(tǒng)一管理問題,本文提出了一套完整的分布式配置管理解決方案(簡稱為disconf4,下同)。 首先,實(shí)現(xiàn)了同構(gòu)系統(tǒng)的配置發(fā)布統(tǒng)一化,提供了配置服務(wù)server,該服務(wù)可以對配置進(jìn)行持久化管理并對外提供restful接口,在此基礎(chǔ)上,基于 zookeeper實(shí)現(xiàn)對配置更改的實(shí)時(shí)推送,并且,提供了穩(wěn)定有效的容災(zāi)方案,以及用戶體驗(yàn)良好的編程模型和WEB用戶管理界面。其次,實(shí)現(xiàn)了異構(gòu)系統(tǒng) 的配置包管理,提出基于zookeeper的全局分布式一致性鎖來實(shí)現(xiàn)主備統(tǒng)一部署、系統(tǒng)異常時(shí)的主備自主切換。通過在百度內(nèi)部以及外部等多個(gè)產(chǎn)品線的實(shí) 踐結(jié)果
2、表明,本解決方案是有效且穩(wěn)定的。技術(shù)背景在一個(gè)分布式環(huán)境中,同類型的服務(wù)往往會(huì)部署很多實(shí)例。這些實(shí)例使用了一些配置,為了更好地維護(hù)這些配置就產(chǎn)生了配置管理服務(wù)。通過這個(gè)服務(wù)可以輕松地管理成千上百個(gè)服務(wù)實(shí)例的配置問題。王阿晶提出了基于zooKeeper的配置信息存儲(chǔ)方案的設(shè)計(jì)與實(shí)現(xiàn)1, 它將所有配置存儲(chǔ)在zookeeper上,這會(huì)導(dǎo)致配置的管理不那么方便,而且他們沒有相關(guān)的源碼實(shí)現(xiàn)。淘寶的diamond2是淘寶內(nèi)部使用的一個(gè) 管理持久配置的系統(tǒng),它具有完整的開源源碼實(shí)現(xiàn),它的特點(diǎn)是簡單、可靠、易用,淘寶內(nèi)部絕大多數(shù)系統(tǒng)的配置都采用diamond來進(jìn)行統(tǒng)一管理。他將所有 配置文件里的配置打散化進(jìn)行
3、存儲(chǔ),只支持KV結(jié)構(gòu),并且配置更新的推送是非實(shí)時(shí)的。百度內(nèi)部的BJF配置中心服務(wù)3采用了類似淘寶diamond的實(shí) 現(xiàn),也是配置打散化、只支持KV和非實(shí)時(shí)推送。同構(gòu)系統(tǒng)是市場的主流,特別地,在業(yè)界大量使用部署虛擬化(如JPAAS系統(tǒng),SAE,BAE)的情況下,同一個(gè)系統(tǒng)使用同一個(gè)部署包的情景會(huì)越來 越多。但是,異構(gòu)系統(tǒng)也有一定的存在意義,譬如,對于“拉模式”的多個(gè)下游實(shí)例,同一時(shí)間點(diǎn)只能只有一個(gè)下游實(shí)例在運(yùn)行。在這種情景下,就存在多臺(tái)實(shí)例機(jī) 器有“主備機(jī)”模式的問題。目前國內(nèi)并沒有很明顯的解決方案來統(tǒng)一解決此問題。功能特點(diǎn)與設(shè)計(jì)理念disconf是一套完整的基于zookeeper的分布式配置統(tǒng)
4、一解決方案。它的功能特點(diǎn)是· 支持配置(配置項(xiàng)+配置文件)的分布式化管理o 配置發(fā)布統(tǒng)一化o 配置發(fā)布、更新統(tǒng)一化(云端存儲(chǔ)、發(fā)布):配置存儲(chǔ)在云端系統(tǒng),用戶統(tǒng)一在平臺(tái)上進(jìn)行發(fā)布、更新配置。o 配置更新自動(dòng)化:用戶在平臺(tái)更新配置,使用該配置的系統(tǒng)會(huì)自動(dòng)發(fā)現(xiàn)該情況,并應(yīng)用新配置。特殊地,如果用戶為此配置定義了回調(diào)函數(shù)類,則此函數(shù)類會(huì)被自動(dòng)調(diào)用。· 配置異構(gòu)系統(tǒng)管理o 異構(gòu)包部署統(tǒng)一化:這里的異構(gòu)系統(tǒng)是指一個(gè)系統(tǒng)部署多個(gè)實(shí)例時(shí),由于配置不同,從而需要多個(gè)部署包(jar或war)的情況(下同)。使用 Disconf后,異構(gòu)系統(tǒng)的部署只需要一個(gè)部署包,不同實(shí)例的配置會(huì)自動(dòng)分配。特別
5、地,在業(yè)界大量使用部署虛擬化(如JPAAS系統(tǒng),SAE,BAE) 的情況下,同一個(gè)系統(tǒng)使用同一個(gè)部署包的情景會(huì)越來越多,Disconf可以很自然地與他天然契合。 異構(gòu)主備自動(dòng)切換:如果一個(gè)異構(gòu)系統(tǒng)存在主備機(jī),主機(jī)發(fā)生掛機(jī)時(shí),備機(jī)可以自動(dòng)獲取主機(jī)配置從而變成主機(jī)。o 異構(gòu)主備機(jī)Context共享工具:異構(gòu)系統(tǒng)下,主備機(jī)切換時(shí)可能需要共享Context??梢允褂肅ontext共享工具來共享主備的Context。· 注解式編程,極簡的使用方式:我們追求的是極簡的、用戶編程體驗(yàn)良好的編程方式。通過簡單的標(biāo)注+極簡單的代碼撰寫,即可完成復(fù)雜的配置分布式化。· 需要Spring編程環(huán)境
6、它的設(shè)計(jì)理念是:· 簡單,用戶體驗(yàn)良好:o 摒棄了打散化配置的管理方式2,3,仍舊采用基于配置文件的編程方式,這和程序員以前的編程習(xí)慣(配置都是放在配置文件里)一致。特別的,為了支持較為小眾的打散化配置功能,還特別支持了配置項(xiàng)。o 采用了基于XML無代碼侵入編程方式:只需要幾行XML配置,即可實(shí)現(xiàn)配置文件發(fā)布更新統(tǒng)一化、自動(dòng)化。o 采用了基于注解式的弱代碼侵入編程方式:通過編程規(guī)范,一個(gè)配置文件一個(gè)配置類,代碼結(jié)構(gòu)簡單易懂。XML幾乎沒有任何更改,與原springXML配置一樣。真正編程時(shí),幾乎感覺不到配置已經(jīng)分布式化· 可以托管任何類型的配置文件,這與2,3只能支持KV結(jié)
7、構(gòu)的功能有較大的改進(jìn)。· 配置更新實(shí)時(shí)推送· 提供界面良好Web管理功能,可以非常方便的查看配置被哪些實(shí)例使用了。詳細(xì)設(shè)計(jì)架構(gòu)設(shè)計(jì)disconf服務(wù)集群模式:disconf的模塊架構(gòu)圖:每個(gè)模塊的簡單介紹如下:· Disconf-coreo 分布式通知模塊:支持配置更新的實(shí)時(shí)化通知o 路徑管理模塊:統(tǒng)一管理內(nèi)部配置路徑URL· Disconf-cliento 配置倉庫容器模塊:統(tǒng)一管理用戶實(shí)例中本地配置文件和配置項(xiàng)的內(nèi)存數(shù)據(jù)存儲(chǔ)o 配置reload模塊:監(jiān)控本地配置文件的變動(dòng),并自動(dòng)reload到指定beano 掃描模塊:支持掃描所有disconf注解的
8、類和域o 下載模塊:restful風(fēng)格的下載配置文件和配置項(xiàng)o watch模塊:監(jiān)控遠(yuǎn)程配置文件和配置項(xiàng)的變化o 主備分配模塊:主備競爭結(jié)束后,統(tǒng)一管理主備分配與主備監(jiān)控控制o 主備競爭模塊:支持分布式環(huán)境下的主備競爭· Disconf-webo 配置存儲(chǔ)模塊:管理所有配置的存儲(chǔ)和讀取o 配置管理模塊:支持配置的上傳、下載、更新o 通知模塊:當(dāng)配置更新后,實(shí)時(shí)通知使用這些配置的所有實(shí)例o 配置自檢監(jiān)控模塊:自動(dòng)定時(shí)校驗(yàn)實(shí)例本地配置與中心配置是否一致o 權(quán)限控制:web的簡單權(quán)限控制· Disconf-toolso context共享模塊:提供多實(shí)例間context的共享。流
9、程設(shè)計(jì)運(yùn)行流程詳細(xì)介紹:與2.0版本的主要區(qū)別是支持了:主備分配功能/主備切換事件。· 啟動(dòng)事件A:以下按順序發(fā)生。o A3:掃描靜態(tài)注解類數(shù)據(jù),并注入到配置倉庫里。o A4+A2:根據(jù)倉庫里的配置文件、配置項(xiàng),去 disconf-web 平臺(tái)里下載配置數(shù)據(jù)。這里會(huì)有主備競爭o A5:將下載得到的配置數(shù)據(jù)值注入到倉庫里。o A6:根據(jù)倉庫里的配置文件、配置項(xiàng),去ZK上監(jiān)控結(jié)點(diǎn)。o A7+A2:根據(jù)XML配置定義,到 disconf-web 平臺(tái)里下載配置文件,放在倉庫里,并監(jiān)控ZK結(jié)點(diǎn)。這里會(huì)有主備競爭。o A8:A1-A6均是處理靜態(tài)類數(shù)據(jù)。A7是處理動(dòng)態(tài)類數(shù)據(jù),包括:實(shí)例化配置的
10、回調(diào)函數(shù)類;將配置的值注入到配置實(shí)體里。· 更新配置事件B:以下按順序發(fā)生。o B1:管理員在 Disconf-web 平臺(tái)上更新配置。o B2:Disconf-web 平臺(tái)發(fā)送配置更新消息給ZK指定的結(jié)點(diǎn)。o B3:ZK通知 Disconf-cient 模塊。o B4:與A4一樣。o B5:與A5一樣。o B6:基本與A4一樣,唯一的區(qū)別是,這里還會(huì)將配置的新值注入到配置實(shí)體里。· 主備機(jī)切換事件C:以下按順序發(fā)生。o C1:發(fā)生主機(jī)掛機(jī)事件。o C2:ZK通知所有被影響到的備機(jī)。o C4:與A2一樣。o C5:與A4一樣。o C6:與A5一樣。o C7:與A6一樣。模塊
11、實(shí)現(xiàn)disconf-web提供了前后端分離的web架構(gòu),具體可見: 本部分會(huì)重點(diǎn)介紹disconf-client的實(shí)現(xiàn)方式。注解式disconf實(shí)現(xiàn)本實(shí)現(xiàn)會(huì)涉及到 配置倉庫容器模塊、掃描模塊、下載模塊、watch模塊,使用AOP攔截的一個(gè)好處是可以比較輕松的實(shí)現(xiàn)配置控制,比如并發(fā)環(huán)境下的配置統(tǒng)一生效。關(guān)于這方面的討論可以見這里。特別地,本方式提供的編程模式非常簡單,例如使用以下配置類的程序在使用它時(shí),可以直接Autowired進(jìn)來進(jìn)行調(diào)用,使用它時(shí)就和平常使用普通的JavaBean一樣,但其實(shí)它已經(jīng)分布式化了。配置更新時(shí),配置類亦會(huì)自動(dòng)更新。ServiceDisconfFile(filenam
12、e = "perties")public class JedisConfig / 代表連接地址 private String host; / 代表連接port private int port; /* * 地址, 分布式文件配置 * * return */ DisconfFileItem(name = "redis.host", associateField = "host") public String getHost() return host; public void setHost(String host)
13、this.host = host; /* * 端口, 分布式文件配置 * * return */ DisconfFileItem(name = "redis.port", associateField = "port") public int getPort() return port; public void setPort(int port) this.port = port; 基于XML配置disconf實(shí)現(xiàn)本實(shí)現(xiàn)提供了無任何代碼侵入方式的分布式配置。ReloadablePropertiesFactoryBean繼承了Spring Properti
14、es文件的PropertiesFactoryBean類,管理所有當(dāng)配置更新時(shí)要進(jìn)行reload的配置文件。對于被管理的每一個(gè)配置 文件,都會(huì)通過 配置倉庫容器模塊、掃描模塊、下載模塊、watch模塊 進(jìn)行配置獲取至配置倉庫里。ReloadingPropertyPlaceholderConfigurer繼承了Spring Bean配置值控制類PropertyPlaceholderConfigurer。在第一次掃描spring bean里,disconf會(huì)記錄配置文件的配置與哪些bean有關(guān)聯(lián)。ReloadConfigurationMonitor是一個(gè)定時(shí)任務(wù),定時(shí)check本地配置文件是否有更新
15、。當(dāng)配置中心的配置被更新時(shí),配置文件會(huì)被下載至實(shí)例本地,ReloadConfigurationMonitor即會(huì)監(jiān)控到此行為,并且通知 ReloadingPropertyPlaceholderConfigurer 對相關(guān)的bean類進(jìn)行值更新。特別的,此種方式無法解決并發(fā)情況下配置統(tǒng)一生效的問題。主備分配實(shí)現(xiàn)在實(shí)現(xiàn)中,為每個(gè)配置提供主備選擇的概念。用戶實(shí)例在獲取配置前需要先進(jìn)行全局唯一性競爭才能得到配置值。在這里,我們采用基于zookeeper的全局唯一性鎖來實(shí)現(xiàn)。Comparisons淘寶Diamond2Disconf比較數(shù)據(jù)持久性存儲(chǔ)在mysql上存儲(chǔ)在mysql上都持久化到數(shù)據(jù)庫里,都易
16、于管理推拉模型拉模型,每隔15s拉一次全量數(shù)據(jù)基于Zookeeper的推模型,實(shí)時(shí)推送disconf基于分布式的Zookeeper來實(shí)時(shí)推送,在穩(wěn)定性、實(shí)效性、易用性上均優(yōu)于diamond配置讀寫支持實(shí)例對配置讀寫。支持某臺(tái)實(shí)例寫配置數(shù)據(jù),并廣播到其它實(shí)例上只支持實(shí)例對配置讀。通過在disconf-web上更新配置到達(dá)到廣播寫到所有應(yīng)用實(shí)例從目前的應(yīng)用場景來看,實(shí)例對配置的寫需求不是那么明顯。disconf支持的中心化廣播方案可能會(huì)與人性思考更加相似。容災(zāi)多級容災(zāi)模式,配置數(shù)據(jù)會(huì)dump在本地,避免中心服務(wù)掛機(jī)時(shí)無法使用多級容災(zāi)模式,優(yōu)先讀取本地配置文件。雙方均支持在中心服務(wù)掛機(jī)時(shí)配置實(shí)例仍然
17、可以使用配置數(shù)據(jù)模型只支持KV結(jié)構(gòu)的數(shù)據(jù),非配置文件模式支持傳統(tǒng)的配置文件模式(配置文件),亦支持KV結(jié)構(gòu)數(shù)據(jù)(配置項(xiàng))使用配置文件的編程方式可能與程序員的編程習(xí)慣更為相似,更易于接受和使用。編程模型需要將配置文件拆成多個(gè)配置項(xiàng),沒有明顯的編程模型在使用配置文件的基礎(chǔ)上,提供了注解式和基于XML的兩種編程模型無并發(fā)性多條配置要同時(shí)生效時(shí),無法解決并發(fā)同時(shí)生效的問題基于注解式的配置,可以解決并發(fā)性問題無Reference1. 王阿晶,鄒仕洪: 基于ZooKeeper的配置信息存儲(chǔ)方案的設(shè)計(jì)與實(shí)現(xiàn) 2. 淘寶diamod實(shí)現(xiàn):/p/diamond/src/
18、, 20123. 百度BJF配置中心, 20144. disconf github: 20145. 淘寶分布式配置管理服務(wù)Diamond6. zooKeeper和Diamond有什么不同 7. diamond專題(一)- 簡介和快速使用DisConf-Web安裝官方Git地址: 此文檔所用disconf版本為2.6.25 安裝JDK安裝TOMCAT編譯安裝disconf將你的配置文件放到此地址目錄下(以下地址可自行設(shè)定,此目錄是指定了生成war包時(shí)使用的配置文件):/home/work/disconf-rd配置文件包括:- perties (數(shù)據(jù)庫配置)- redi
19、perties (Redis配置)- perties (Zookeeper配置)- perties (應(yīng)用配置)注意,記得執(zhí)行將perties復(fù)制成perties:cp perties perties 根據(jù)實(shí)際情況更改上面4個(gè)配置中的配置內(nèi)容設(shè)置War包將要被部署的地址(以下地址可自行設(shè)定,此目錄為打包后disconf部署的目錄,在這里我把它直接定義到了tomcat的webapp目錄中):
20、/usr/local/apache-tomcat-7.0.64/webapps構(gòu)建ONLINE_CONFIG_PATH=/home/work/disconf-rdWAR_ROOT_PATH=/usr/local/apache-tomcat-7.0.64/webappsexport ONLINE_CONFIG_PATHexport WAR_ROOT_PATH#切記一定要切換到disconf-web目錄后在執(zhí)行deploy.sh腳本(拷貝配置文件的命令用的是相對路徑)cd disconf-websh deploy/deplopy.sh這樣會(huì)在 /home/work/dsp/disconf-rd/w
21、ar 生成以下結(jié)果:-disconf-web.war -html -META-INF -WEB-INF把目錄下的disconf-web.war可以拷貝走,作為備份,否則啟動(dòng)tomcat時(shí),會(huì)部署兩個(gè)diconf-web項(xiàng)目在tomcat的conf目錄下server.xml的host標(biāo)簽下增加如下配置:<Context path="" docBase="/usr/local/apache-tomcat-7.0.64/webapps "></Context>安裝所需編譯工具 yum -y install gcc automake au
22、toconf libtool make安裝pcre 官網(wǎng):/下載地址:ftp:/ftp.csx.cam.ac.uk/pub/software/programming/pcre/安裝說明: 此處把pcre安裝到了/usr/local目錄下,分別執(zhí)行下面3個(gè)命令./configure -prefix=/usr/local/pcre-8.36 -libdir=/usr/local/pcre-8.36/lib -includedir=/usr/local/pcre-8.36/includemakemake install安裝zlib 官網(wǎng): ./configurem
23、akemake install安裝Nginx 官方文檔:/en/docs/ 此處指定的pcre與zlib路徑為上方安裝的pcre與zlib路徑./configure -with-pcre=/root/disconf/pcre-8.36/ -with-zlib=/root/disconf/zlib-1.2.8 -with-http_ssl_modulemakemake install更改安裝后nginx文件夾下conf/nginx.conf#可以用來負(fù)載均衡upstream disconf server 40:8080; server lis
24、ten 80; server_name 40; #靜態(tài)頁面請求到html中處理 location / root /usr/local/apache-tomcat-7.0.64/webapps/html; if ($query_string) expires max; #后臺(tái)數(shù)據(jù)處理請求到tomcat處理 location /(api|export) proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remo
25、te_addr; proxy_set_header X-Scheme $scheme; proxy_pass http:/ disconf; 安裝Zookeeper 官方文檔:/doc/trunk/ 安裝請參考官方文檔安裝Redis 官網(wǎng):http:/redis.io/ 安裝參考: 切換到redis目錄下,執(zhí)行makemake install初始化數(shù)據(jù)庫執(zhí)行 sql/1-init_table.sql執(zhí)行 sql/2-data.sql執(zhí)行 sql/20141201/disconf.sql注意:根據(jù)實(shí)際情況執(zhí)行disconf-web/sql下的腳本,每個(gè)腳本作用在sql目下都有相應(yīng)說明程序啟動(dòng)Mysql 啟動(dòng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 955-2015豬圓環(huán)病毒2a/2b亞型實(shí)時(shí)熒光PCR檢測和分型方法
- DB31/T 493-2020屋頂綠化技術(shù)規(guī)范
- DB31/T 320-2020工業(yè)開發(fā)區(qū)建設(shè)規(guī)范
- DB31/T 1189.2-2019車載緊急報(bào)警系統(tǒng)第2部分:車輛應(yīng)急救援平臺(tái)技術(shù)要求和測試方法
- DB31/T 1041-2017盆栽紅掌生產(chǎn)技術(shù)規(guī)程
- 2024年冷鏈裝備資金需求報(bào)告代可行性研究報(bào)告
- 2024年養(yǎng)老服務(wù)資金需求報(bào)告代可行性研究報(bào)告
- 2024年商用家具項(xiàng)目投資申請報(bào)告代可行性研究報(bào)告
- 2024年水電站計(jì)算機(jī)監(jiān)控裝置項(xiàng)目資金申請報(bào)告代可行性研究報(bào)告
- 松原市寧江區(qū)2025年八年級《語文》上學(xué)期期末試題與參考答案
- 《大學(xué)生職業(yè)發(fā)展與生涯規(guī)劃(高職版)》 教案 第3課 探索自己的職業(yè)興趣
- 基于主題意義的小學(xué)英語單元整體教學(xué) 論文
- 中山職業(yè)技術(shù)學(xué)院宿舍寬帶接入校園網(wǎng)連接技術(shù)方案
- 陶行知教育名篇讀書分享ppt
- 癌性傷口的處理教學(xué)課件
- 血栓與止血檢驗(yàn)及其相關(guān)疾病-血栓與止血檢驗(yàn)(血液學(xué)檢驗(yàn)課件)
- 深圳中考志愿表格模板
- 村衛(wèi)生室醫(yī)保自查自糾報(bào)告及整改措施
- 【電氣專業(yè)】15D501建筑物防雷設(shè)施安裝
- 中國傳統(tǒng)文化知到章節(jié)答案智慧樹2023年西安理工大學(xué)
- 新疆維吾爾自治區(qū)初中學(xué)業(yè)水平考試英語答題卡
評論
0/150
提交評論