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