摘要:配置之痛與解決之道當(dāng)有很多項(xiàng)目需要你來(lái)不停的向集成測(cè)試和生產(chǎn)環(huán)境發(fā)時(shí)配置文件的差異性會(huì)造成很大的困撓一方面你不希望把敏感信息到處保存另一方面會(huì)大量的地址信息需要配置每個(gè)引入的第三方都需要配置往往不同環(huán)境的還都不一樣一旦搞錯(cuò)了輕則項(xiàng)目起不來(lái)
配置之痛與解決之道
當(dāng)有很多項(xiàng)目需要你來(lái)不停的向集成,測(cè)試和生產(chǎn)環(huán)境發(fā)時(shí), 配置文件的差異性會(huì)造成很大的困撓.
一方面你不希望把敏感信息到處保存. 另一方面會(huì)大量的地址信息,url,api-key,username/password需要配置. 每個(gè)引入的第三方api都需要配置, 往往不同環(huán)境的還都不一樣. 一旦搞錯(cuò)了,輕則項(xiàng)目起不來(lái),重則數(shù)據(jù)搞亂. 總之,頭疼得很.
把這一切交給zookeeper, 讓項(xiàng)目只有zookeeper的連接,其他找zookeeper要, 不失為一個(gè)解決辦法.
如果將zookeeper寫(xiě)入hosts文件或dns服務(wù), 則完全有可能實(shí)現(xiàn)應(yīng)用零配置發(fā)布. 而zookeeper有完整的分布管理,權(quán)限管理等解決方案, 真正的開(kāi)箱可用.
項(xiàng)目主頁(yè)
commons-configuration包解決的是項(xiàng)目配置參數(shù)集中管理的問(wèn)題.
配置參數(shù)可能來(lái)自于不同渠道,操作系統(tǒng)環(huán)境變量,JVM啟動(dòng)參數(shù),各種配置文件,數(shù)據(jù)庫(kù),web.xml中的應(yīng)用初始化參數(shù)和servlet初始參數(shù)等等. 通過(guò)統(tǒng)的一接口,為應(yīng)用程序屏避這個(gè)細(xì)節(jié)上的差異,同時(shí)保持多種渠道完成應(yīng)用配置的靈活性.同時(shí)增加緩存功能, 減少參數(shù)獲取的時(shí)間延遲.
cofiguration接口實(shí)現(xiàn)類的繼承關(guān)系
github上有三個(gè)類似的項(xiàng)目
針對(duì)的是不同版本的commons-configuration
擴(kuò)展模塊主頁(yè),與commons-configuration 1.10整合, 本文以此為例.
簡(jiǎn)單整合
這個(gè)只接實(shí)現(xiàn)的Configuration接口,把節(jié)點(diǎn)路徑做為key,節(jié)點(diǎn)data做為value.
可以對(duì)屬性進(jìn)行回寫(xiě),支持不同數(shù)據(jù)類型,是一個(gè)不錯(cuò)的輕量級(jí)的方案.缺點(diǎn)是不能對(duì)zookeeper數(shù)據(jù)修改做出反應(yīng).
commons-configuration2.0整合
這個(gè)項(xiàng)目master上沒(méi)有發(fā)布,develope分支上有代碼,沒(méi)有構(gòu)建好的庫(kù)到maven庫(kù).
直接使用會(huì)有些不方便.
pudn上也有一個(gè) http://www.pudn.com/Download/...
但沒(méi)有積分了, 下載不下來(lái),也就當(dāng)沒(méi)看見(jiàn)了.
擴(kuò)展以zookeeper的數(shù)據(jù)樹(shù)為來(lái)源,看成類似的分布式的文件系統(tǒng),讀取某個(gè)節(jié)點(diǎn)的數(shù)據(jù),
通過(guò)Properties的文本鍵值對(duì)格式或XML格式進(jìn)行解析并緩存在內(nèi)存中, 在遠(yuǎn)程數(shù)據(jù)沒(méi)有變化時(shí),后續(xù)的getProperty讀取的是本地緩存,如果遠(yuǎn)程數(shù)據(jù)發(fā)生改變, 緩存會(huì)觸發(fā)更新,后續(xù)讀取getProperty會(huì)得到新的數(shù)據(jù).
值得說(shuō)明的是setProperty與getProperty并不對(duì)稱. 你設(shè)置的值僅在本地緩存里發(fā)生改變,并沒(méi)有真正持久化到遠(yuǎn)程的zookeeper.這與DatabaseConfiguration的行為是不一樣的,只有DatabaseConfiguration是真正持久化的.
通過(guò)zookeeper獲得動(dòng)態(tài)屬性與Spring進(jìn)行整合為spring bean的PropertyPlaceHolder賦值
可以硬編碼實(shí)現(xiàn),但這樣顯然不好 ;), 但好處是少引入兩個(gè)包(spring-context, spring-context-support),因?yàn)椴恍枰狝pplicationContext, 只要BeanFactory即可.
Properties p = Config.getZooProperties(ZK_CONFIG_SPRING_PATH); PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer(); cfg.setProperties(p); cfg.postProcessBeanFactory(m_oXMLlBeanFactory);
可以用注解的方式, 但對(duì)spring3.1的項(xiàng)目不太友好.
XML是經(jīng)典的方式, 讓我們來(lái)試試
先定義的個(gè)類,繼承BeanFactoryPostProcessor
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { private static final String ZK_CONFIG_SPRING_PATH="default"; private String path=ZK_CONFIG_SPRING_PATH; public void setPath(String path){this.path=path;} @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { Properties p = Config.getZooProperties(path); PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer(); cfg.setProperties(p); cfg.postProcessBeanFactory(beanFactory); } }
再在XML聲明一行
這樣做的好處是path變得可配置. 而不是硬編碼進(jìn)去,在同時(shí)運(yùn)行多個(gè)應(yīng)用時(shí),易于解決沖突問(wèn)題.
可視化工具zookeeper-inspector這個(gè)也有幾個(gè)不同的版本
我用的是這個(gè)
https://github.com/zzhang5/zo...
雖然在github上星多,但也是有幾年沒(méi)有更新了,還好,對(duì)我的一些需求來(lái)說(shuō)足夠好了.
可以可視化展示所有節(jié)點(diǎn)和數(shù)據(jù),能編輯修改文本節(jié)點(diǎn)和數(shù)據(jù). 遺憾的是沒(méi)有備份和恢復(fù)功能.
下載后通過(guò)maven構(gòu)建一下就可以用了.
不過(guò)有個(gè)小問(wèn)題就是新版本的Mac OS (High Sierra / Java 8)下Java路徑判斷有問(wèn)題
把pom.xml中的appassemble-maven-plugin的版本升級(jí)至2.0.0就可以了
diff --git a/pom.xml b/pom.xml index 9e80d00..26b38be 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@備份與維護(hù)org.codehaus.mojo appassembler-maven-plugin -1.1.1 +2.0.0 .sh
zookeeper官方說(shuō)法是拷貝datadir下的文件和binlog日志. 我也沒(méi)有找到太好的方法, 誰(shuí)知道給留個(gè)言.
項(xiàng)目源碼說(shuō)了半天,沒(méi)有源碼就太不厚道了. 所以呢, 猛擊此處下載 , 加不加星,就不強(qiáng)求了, 但有bug一定要反饋喲!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68482.html
摘要:今天小數(shù)給大家?guī)?lái)的是數(shù)人云工程師金燁的分享,有關(guān)于自動(dòng)快速部署服務(wù)相關(guān)組件的一些實(shí)踐。當(dāng)與相遇,雙劍合璧,一切變得如此簡(jiǎn)單有趣。通過(guò)將服務(wù)注冊(cè)到來(lái)做健康檢查。 今天小數(shù)給大家?guī)?lái)的是數(shù)人云工程師金燁的分享,有關(guān)于自動(dòng)快速部署DCOS服務(wù)相關(guān)組件的一些實(shí)踐。當(dāng)Ansible與Docker相遇,雙劍合璧,一切變得如此簡(jiǎn)單有趣。 本次分享將包括以下內(nèi)容: 云平臺(tái)部署使用的服務(wù)、組件 Do...
摘要:由于分布式系統(tǒng)和應(yīng)用可以提供更強(qiáng)的計(jì)算能力,還能更好地容災(zāi)和擴(kuò)展,所以逐漸受到青睞。基礎(chǔ)由若干條指令組成,用于完成特定功能的過(guò)程稱為原語(yǔ)。 信息飛速膨脹,很多應(yīng)用無(wú)法依賴單個(gè)服務(wù)器處理龐大的數(shù)據(jù)量。由于分布式系統(tǒng)和應(yīng)用可以提供更強(qiáng)的計(jì)算能力,還能更好地容災(zāi)和擴(kuò)展,所以逐漸受到青睞。 在開(kāi)發(fā)分布式應(yīng)用時(shí),通常需要花費(fèi)大量時(shí)間和精力來(lái)處理異構(gòu)系統(tǒng)中的協(xié)作通信問(wèn)題。 什么是 ZooKeepe...
摘要:今天來(lái)跟大家分享的是奇虎開(kāi)源的配置中心。容錯(cuò)當(dāng)進(jìn)程死掉,網(wǎng)絡(luò)終端,機(jī)器重啟等異常情況發(fā)生時(shí),我們希望能盡可能的提供可靠的配置獲取服務(wù)。配置更新及時(shí)可以秒級(jí)同步到所有客戶端機(jī)器。本身是沒(méi)有的恭喜你,你已經(jīng)構(gòu)建完自己的配置中心了。 今天來(lái)跟大家分享的是奇虎360開(kāi)源的 QConf 配置中心。 為什么我們需要做這么一件事情? 因?yàn)橛龅搅耍?dāng)業(yè)務(wù)分布較廣,配置分布較廣的時(shí)候,就會(huì)很容易地出現(xiàn)一...
摘要:二總結(jié)使用的和的,能夠很好的支持這樣的有狀態(tài)服務(wù)部署到集群上。部署方式有待優(yōu)化本次試驗(yàn)中使用靜態(tài)方式部署集群,如果節(jié)點(diǎn)變遷時(shí),需要執(zhí)行等命令手動(dòng)配置集群,嚴(yán)重限制了集群自動(dòng)故障恢復(fù)擴(kuò)容縮容的能力。 一. 概述 kubernetes通過(guò)statefulset為zookeeper、etcd等這類有狀態(tài)的應(yīng)用程序提供完善支持,statefulset具備以下特性: 為pod提供穩(wěn)定的唯一的...
閱讀 2104·2021-11-23 09:51
閱讀 3706·2021-10-20 13:49
閱讀 1710·2021-09-06 15:13
閱讀 1821·2021-09-06 15:02
閱讀 3169·2021-09-02 15:11
閱讀 895·2019-08-29 15:37
閱讀 1739·2019-08-29 13:24
閱讀 2279·2019-08-29 11:28