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