Disconf-簡(jiǎn)介與安裝使用_第1頁(yè)
Disconf-簡(jiǎn)介與安裝使用_第2頁(yè)
Disconf-簡(jiǎn)介與安裝使用_第3頁(yè)
Disconf-簡(jiǎn)介與安裝使用_第4頁(yè)
Disconf-簡(jiǎn)介與安裝使用_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、DisConf簡(jiǎn)述摘要為了更好的解決分布式環(huán)境下多臺(tái)服務(wù)實(shí)例的配置統(tǒng)一管理問(wèn)題,本文提出了一套完整的分布式配置管理解決方案(簡(jiǎn)稱為disconf4,下同)。 首先,實(shí)現(xiàn)了同構(gòu)系統(tǒng)的配置發(fā)布統(tǒng)一化,提供了配置服務(wù)server,該服務(wù)可以對(duì)配置進(jìn)行持久化管理并對(duì)外提供restful接口,在此基礎(chǔ)上,基于 zookeeper實(shí)現(xiàn)對(duì)配置更改的實(shí)時(shí)推送,并且,提供了穩(wěn)定有效的容災(zāi)方案,以及用戶體驗(yàn)良好的編程模型和WEB用戶管理界面。其次,實(shí)現(xiàn)了異構(gòu)系統(tǒng) 的配置包管理,提出基于zookeeper的全局分布式一致性鎖來(lái)實(shí)現(xiàn)主備統(tǒng)一部署、系統(tǒng)異常時(shí)的主備自主切換。通過(guò)在百度內(nèi)部以及外部等多個(gè)產(chǎn)品線的實(shí) 踐結(jié)果

2、表明,本解決方案是有效且穩(wěn)定的。技術(shù)背景在一個(gè)分布式環(huán)境中,同類型的服務(wù)往往會(huì)部署很多實(shí)例。這些實(shí)例使用了一些配置,為了更好地維護(hù)這些配置就產(chǎn)生了配置管理服務(wù)。通過(guò)這個(gè)服務(wù)可以輕松地管理成千上百個(gè)服務(wù)實(shí)例的配置問(wèn)題。王阿晶提出了基于zooKeeper的配置信息存儲(chǔ)方案的設(shè)計(jì)與實(shí)現(xiàn)1, 它將所有配置存儲(chǔ)在zookeeper上,這會(huì)導(dǎo)致配置的管理不那么方便,而且他們沒(méi)有相關(guān)的源碼實(shí)現(xiàn)。淘寶的diamond2是淘寶內(nèi)部使用的一個(gè) 管理持久配置的系統(tǒng),它具有完整的開(kāi)源源碼實(shí)現(xiàn),它的特點(diǎn)是簡(jiǎn)單、可靠、易用,淘寶內(nèi)部絕大多數(shù)系統(tǒng)的配置都采用diamond來(lái)進(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)是市場(chǎng)的主流,特別地,在業(yè)界大量使用部署虛擬化(如JPAAS系統(tǒng),SAE,BAE)的情況下,同一個(gè)系統(tǒng)使用同一個(gè)部署包的情景會(huì)越來(lái) 越多。但是,異構(gòu)系統(tǒng)也有一定的存在意義,譬如,對(duì)于“拉模式”的多個(gè)下游實(shí)例,同一時(shí)間點(diǎn)只能只有一個(gè)下游實(shí)例在運(yùn)行。在這種情景下,就存在多臺(tái)實(shí)例機(jī) 器有“主備機(jī)”模式的問(wèn)題。目前國(guó)內(nèi)并沒(méi)有很明顯的解決方案來(lái)統(tǒng)一解決此問(wèn)題。功能特點(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)分配。特別地,在業(yè)界大量使用部署虛

5、擬化(如JPAAS系統(tǒng),SAE,BAE) 的情況下,同一個(gè)系統(tǒng)使用同一個(gè)部署包的情景會(huì)越來(lái)越多,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。可以使用Context共享工具來(lái)共享主備的Context。 注解式編程,極簡(jiǎn)的使用方式:我們追求的是極簡(jiǎn)的、用戶編程體驗(yàn)良好的編程方式。通過(guò)簡(jiǎn)單的標(biāo)注+極簡(jiǎn)單的代碼撰寫(xiě),即可完成復(fù)雜的配置分布式化。 需要Spring編程環(huán)境它的設(shè)計(jì)理念是: 簡(jiǎn)單,用戶體驗(yàn)良好:o 摒棄了

6、打散化配置的管理方式2,3,仍舊采用基于配置文件的編程方式,這和程序員以前的編程習(xí)慣(配置都是放在配置文件里)一致。特別的,為了支持較為小眾的打散化配置功能,還特別支持了配置項(xiàng)。o 采用了基于XML無(wú)代碼侵入編程方式:只需要幾行XML配置,即可實(shí)現(xiàn)配置文件發(fā)布更新統(tǒng)一化、自動(dòng)化。o 采用了基于注解式的弱代碼侵入編程方式:通過(guò)編程規(guī)范,一個(gè)配置文件一個(gè)配置類,代碼結(jié)構(gòu)簡(jiǎn)單易懂。XML幾乎沒(méi)有任何更改,與原springXML配置一樣。真正編程時(shí),幾乎感覺(jué)不到配置已經(jīng)分布式化 可以托管任何類型的配置文件,這與2,3只能支持KV結(jié)構(gòu)的功能有較大的改進(jìn)。 配置更新實(shí)時(shí)推送 提供界面良好Web管理功能,可

7、以非常方便的查看配置被哪些實(shí)例使用了。詳細(xì)設(shè)計(jì)架構(gòu)設(shè)計(jì)disconf服務(wù)集群模式:disconf的模塊架構(gòu)圖:每個(gè)模塊的簡(jiǎn)單介紹如下: Disconf-coreo 分布式通知模塊:支持配置更新的實(shí)時(shí)化通知o 路徑管理模塊:統(tǒng)一管理內(nèi)部配置路徑URL Disconf-cliento 配置倉(cāng)庫(kù)容器模塊:統(tǒng)一管理用戶實(shí)例中本地配置文件和配置項(xiàng)的內(nèi)存數(shù)據(jù)存儲(chǔ)o 配置reload模塊:監(jiān)控本地配置文件的變動(dòng),并自動(dòng)reload到指定beano 掃描模塊:支持掃描所有disconf注解的類和域o 下載模塊:restful風(fēng)格的下載配置文件和配置項(xiàng)o watch模塊:監(jiān)控遠(yuǎn)程配置文件和配置項(xiàng)的變化o 主備分

8、配模塊:主備競(jìng)爭(zhēng)結(jié)束后,統(tǒng)一管理主備分配與主備監(jiān)控控制o 主備競(jìng)爭(zhēng)模塊:支持分布式環(huán)境下的主備競(jìng)爭(zhēng) Disconf-webo 配置存儲(chǔ)模塊:管理所有配置的存儲(chǔ)和讀取o 配置管理模塊:支持配置的上傳、下載、更新o 通知模塊:當(dāng)配置更新后,實(shí)時(shí)通知使用這些配置的所有實(shí)例o 配置自檢監(jiān)控模塊:自動(dòng)定時(shí)校驗(yàn)實(shí)例本地配置與中心配置是否一致o 權(quán)限控制:web的簡(jiǎn)單權(quán)限控制 Disconf-toolso context共享模塊:提供多實(shí)例間context的共享。流程設(shè)計(jì)運(yùn)行流程詳細(xì)介紹:與2.0版本的主要區(qū)別是支持了:主備分配功能/主備切換事件。 啟動(dòng)事件A:以下按順序發(fā)生。o A3:掃描靜態(tài)注解類數(shù)據(jù),

9、并注入到配置倉(cāng)庫(kù)里。o A4+A2:根據(jù)倉(cāng)庫(kù)里的配置文件、配置項(xiàng),去 disconf-web 平臺(tái)里下載配置數(shù)據(jù)。這里會(huì)有主備競(jìng)爭(zhēng)o A5:將下載得到的配置數(shù)據(jù)值注入到倉(cāng)庫(kù)里。o A6:根據(jù)倉(cāng)庫(kù)里的配置文件、配置項(xiàng),去ZK上監(jiān)控結(jié)點(diǎn)。o A7+A2:根據(jù)XML配置定義,到 disconf-web 平臺(tái)里下載配置文件,放在倉(cāng)庫(kù)里,并監(jiān)控ZK結(jié)點(diǎn)。這里會(huì)有主備競(jìng)爭(zhēng)。o A8:A1-A6均是處理靜態(tài)類數(shù)據(jù)。A7是處理動(dòng)態(tài)類數(shù)據(jù),包括:實(shí)例化配置的回調(diào)函數(shù)類;將配置的值注入到配置實(shí)體里。 更新配置事件B:以下按順序發(fā)生。o B1:管理員在 Disconf-web 平臺(tái)上更新配置。o B2:Discon

10、f-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一樣。模塊實(shí)現(xiàn)disconf-web提供了前后端分離的web架構(gòu),具體可見(jiàn): 本部分會(huì)重點(diǎn)介紹disconf-client的實(shí)現(xiàn)方式。注解式disconf實(shí)現(xiàn)本實(shí)現(xiàn)會(huì)涉及到 配置倉(cāng)庫(kù)容器模塊

11、、掃描模塊、下載模塊、watch模塊,使用AOP攔截的一個(gè)好處是可以比較輕松的實(shí)現(xiàn)配置控制,比如并發(fā)環(huán)境下的配置統(tǒng)一生效。關(guān)于這方面的討論可以見(jiàn)這里。特別地,本方式提供的編程模式非常簡(jiǎn)單,例如使用以下配置類的程序在使用它時(shí),可以直接Autowired進(jìn)來(lái)進(jìn)行調(diào)用,使用它時(shí)就和平常使用普通的JavaBean一樣,但其實(shí)它已經(jīng)分布式化了。配置更新時(shí),配置類亦會(huì)自動(dòng)更新。ServiceDisconfFile(filename = perties)public class JedisConfig / 代表連接地址 private String host; / 代表連接port pri

12、vate int port; /* * 地址, 分布式文件配置 * * return */ DisconfFileItem(name = redis.host, associateField = host) public String getHost() return host; public void setHost(String host) this.host = host; /* * 端口, 分布式文件配置 * * return */ DisconfFileItem(name = redis.port, associateField = port) public int getPort(

13、) return port; public void setPort(int port) this.port = port; 基于XML配置disconf實(shí)現(xiàn)本實(shí)現(xiàn)提供了無(wú)任何代碼侵入方式的分布式配置。ReloadablePropertiesFactoryBean繼承了Spring Properties文件的PropertiesFactoryBean類,管理所有當(dāng)配置更新時(shí)要進(jìn)行reload的配置文件。對(duì)于被管理的每一個(gè)配置 文件,都會(huì)通過(guò) 配置倉(cāng)庫(kù)容器模塊、掃描模塊、下載模塊、watch模塊 進(jìn)行配置獲取至配置倉(cāng)庫(kù)里。ReloadingPropertyPlaceholderConfigure

14、r繼承了Spring Bean配置值控制類PropertyPlaceholderConfigurer。在第一次掃描spring bean里,disconf會(huì)記錄配置文件的配置與哪些bean有關(guān)聯(lián)。ReloadConfigurationMonitor是一個(gè)定時(shí)任務(wù),定時(shí)check本地配置文件是否有更新。當(dāng)配置中心的配置被更新時(shí),配置文件會(huì)被下載至實(shí)例本地,ReloadConfigurationMonitor即會(huì)監(jiān)控到此行為,并且通知 ReloadingPropertyPlaceholderConfigurer 對(duì)相關(guān)的bean類進(jìn)行值更新。特別的,此種方式無(wú)法解決并發(fā)情況下配置統(tǒng)一生效的問(wèn)題。主

15、備分配實(shí)現(xiàn)在實(shí)現(xiàn)中,為每個(gè)配置提供主備選擇的概念。用戶實(shí)例在獲取配置前需要先進(jìn)行全局唯一性競(jìng)爭(zhēng)才能得到配置值。在這里,我們采用基于zookeeper的全局唯一性鎖來(lái)實(shí)現(xiàn)。Comparisons淘寶Diamond2Disconf比較數(shù)據(jù)持久性存儲(chǔ)在mysql上存儲(chǔ)在mysql上都持久化到數(shù)據(jù)庫(kù)里,都易于管理推拉模型拉模型,每隔15s拉一次全量數(shù)據(jù)基于Zookeeper的推模型,實(shí)時(shí)推送disconf基于分布式的Zookeeper來(lái)實(shí)時(shí)推送,在穩(wěn)定性、實(shí)效性、易用性上均優(yōu)于diamond配置讀寫(xiě)支持實(shí)例對(duì)配置讀寫(xiě)。支持某臺(tái)實(shí)例寫(xiě)配置數(shù)據(jù),并廣播到其它實(shí)例上只支持實(shí)例對(duì)配置讀。通過(guò)在disconf-

16、web上更新配置到達(dá)到廣播寫(xiě)到所有應(yīng)用實(shí)例從目前的應(yīng)用場(chǎng)景來(lái)看,實(shí)例對(duì)配置的寫(xiě)需求不是那么明顯。disconf支持的中心化廣播方案可能會(huì)與人性思考更加相似。容災(zāi)多級(jí)容災(zāi)模式,配置數(shù)據(jù)會(huì)dump在本地,避免中心服務(wù)掛機(jī)時(shí)無(wú)法使用多級(jí)容災(zāi)模式,優(yōu)先讀取本地配置文件。雙方均支持在中心服務(wù)掛機(jī)時(shí)配置實(shí)例仍然可以使用配置數(shù)據(jù)模型只支持KV結(jié)構(gòu)的數(shù)據(jù),非配置文件模式支持傳統(tǒng)的配置文件模式(配置文件),亦支持KV結(jié)構(gòu)數(shù)據(jù)(配置項(xiàng))使用配置文件的編程方式可能與程序員的編程習(xí)慣更為相似,更易于接受和使用。編程模型需要將配置文件拆成多個(gè)配置項(xiàng),沒(méi)有明顯的編程模型在使用配置文件的基礎(chǔ)上,提供了注解式和基于XML的兩

17、種編程模型無(wú)并發(fā)性多條配置要同時(shí)生效時(shí),無(wú)法解決并發(fā)同時(shí)生效的問(wèn)題基于注解式的配置,可以解決并發(fā)性問(wèn)題無(wú)Reference1. 王阿晶,鄒仕洪: 基于ZooKeeper的配置信息存儲(chǔ)方案的設(shè)計(jì)與實(shí)現(xiàn) 2. 淘寶diamod實(shí)現(xiàn):/p/diamond/src/, 20123. 百度BJF配置中心, 20144. disconf github: 20145. 淘寶分布式配置管理服務(wù)Diamond6. zooKeeper和Diamond有什么不同 7. diamond專題(一)- 簡(jiǎn)介和快速使用DisConf-Web安裝官方Git地址: 此文檔所用disco

18、nf版本為2.6.25 安裝JDK安裝TOMCAT編譯安裝disconf將你的配置文件放到此地址目錄下(以下地址可自行設(shè)定,此目錄是指定了生成war包時(shí)使用的配置文件):/home/work/disconf-rd配置文件包括:- perties (數(shù)據(jù)庫(kù)配置)- perties (Redis配置)- perties (Zookeeper配置)- perties (應(yīng)用配置)注意,記得執(zhí)行將perties復(fù)制成perties

19、:cp perties perties 根據(jù)實(shí)際情況更改上面4個(gè)配置中的配置內(nèi)容設(shè)置War包將要被部署的地址(以下地址可自行設(shè)定,此目錄為打包后disconf部署的目錄,在這里我把它直接定義到了tomcat的webapp目錄中):/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_CO

20、NFIG_PATHexport WAR_ROOT_PATH#切記一定要切換到disconf-web目錄后在執(zhí)行deploy.sh腳本(拷貝配置文件的命令用的是相對(duì)路徑)cd disconf-websh deploy/deplopy.sh這樣會(huì)在 /home/work/dsp/disconf-rd/war 生成以下結(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)簽下增加如下配置

21、:安裝所需編譯工具 yum -y install gcc automake autoconf libtool make安裝pcre 官網(wǎng):/下載地址:ftp:/ftp.csx.cam.ac.uk/pub/software/programming/pcre/安裝說(shuō)明: 此處把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/includ

22、emakemake install安裝zlib 官網(wǎng): ./configuremakemake 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#可以用來(lái)負(fù)載均衡upstream discon

23、f server 40:8080; server listen 80; server_name 40; #靜態(tài)頁(yè)面請(qǐng)求到html中處理 location / root /usr/local/apache-tomcat-7.0.64/webapps/html; if ($query_string) expires max; #后臺(tái)數(shù)據(jù)處理請(qǐng)求到tomcat處理 location /(api|export) proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http:/ disconf; 安裝Zookeeper 官方文檔:/doc/trunk/ 安裝請(qǐng)參考官方文檔安裝Redis 官網(wǎng):http:/redis.io/ 安裝參考: 切換到redis目錄下,執(zhí)行makemake install初始化數(shù)據(jù)庫(kù)執(zhí)行 sql/1-init_table.sql執(zhí)行 sql/2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論