基於zk的配置管理

2021-07-22 08:39:26 字數 2587 閱讀 5135

com.netflix.archaiusgroupid>

archaius-coreartifactid>

0.6.5version>

org.apache.curatorgroupid>

curator-clientartifactid>

exclusion>

exclusions>

dependency>

com.netflix.archaiusgroupid>

archaius-zookeeperartifactid>

0.6.5version>

org.apache.curatorgroupid>

curator-clientartifactid>

exclusion>

exclusions>

dependency>

如果之前pom檔案已經引入了curator-client,則需要在引入archaius時exclude下

@before

public

void

before

() throws exception

/*** 僅僅是在本地記憶體中更新

* 即concurrentmapconfiguration中的map更新

* 不會更新到zk

*/@test

public

void

locatset

()

它是在start的時候,去註冊節點的監聽事件,預設採用的是pathchildrencache只能監聽子節點的變化事件,如果需要監聽整個樹的話,則需要treecache。

它是在new dynamicwatchedconfiguration的時候去讀取zk的所有資料的。

public

dynamicwatchedconfiguration

(watchedconfigurationsource source, boolean ignoredeletesfromsource,

dynamicpropertyupdater updater)

catch (final exception exc)

// add a listener for subsequent config updates

this.source.addupdatelistener(this);

}

記憶體資料儲存在concurrentmapconfiguration中的map中,對於set方法,只是作用於此map,並不會對遠端zk進行set操作

zk預設採用的是最終一致性的,即對於乙個更新操作,leader在獲得超半數follower的支援後,返回更新。這裡有兩個問題容易導致一致性問題:

a、如果應用程式是通過本地記憶體讀取的資料,則由於zk的事件通知延遲,可能讀到髒資料

b、如果應用程式是通過遠端讀取zk的資料,則由於zk leader同步資料到follower的延遲,可能連線到的follower尚未更新,讀到髒資料

如果要讀取最新資料,則需要採取上邊提到的b方法,但是在該方法之前先,呼叫下zk的client方法,跟leader同步資料,只要是在sync之前更新的資料,sync之後,讀到的是最新的。但是會有效能消耗問題:

/**

* 強一致性的讀取方法

* 不從本地記憶體快取讀取

* 也不從zk的follower讀取

* 通過sync從zk的leader讀取

* @param key

* @param defaultvalue

* @return

*/private object getrawpropertysync

(string key,object defaultvalue)

//if read from zk is null,return defaultvalue

return defaultvalue;

}

大部分場景是讀多寫少,對於新增配置的操作,從本地記憶體讀取,讀取不到,則從zk去讀取,這樣能最大限度地保證讀到最新資料;對於更新操作,始終都是更新到zk,然後本地記憶體等待zk事件通知,才更新本地資料。

由於配置通常不區分add操作還是update操作,因此對zk的操作,有幾種策略:

/**

* 幾種實現策略選擇:

* 1、先更新、出錯在新增

* 2、先新增、出錯在更新

* 3、先刪除再新增

* @param fullpath

* @param value

*/public

static

void

setvalue

(string fullpath,string value)

// try catch (keeperexception.nonodeexception exc) catch (exception e)

// } catch (exception e)

try catch (exception e) catch (exception e1)

e.printstacktrace();

}}

基於CMM和CMMI的配置管理(一)

本文主要從cmm和cmmi的要求出發,介紹了標準主要涉及的配置管理內容,並對相應內容進行初步地說明,最後提供了乙個配置管理在專案實施的指南和乙個在組織中部署配置管理的模型。1配置管理內容的邏輯關係 在cmm和cmmi中,將配置管理的目的定義為 建立和維護產品的完整性 這個目標沒有提到對專案管理的支援...

資料 配置管理

目前國內外常見的10種配置管理工具一覽 配置管理不是單純的指軟體的 版本管理,上面的資料介紹的主要是 級管理.配置管理的目的是為了準確交付,減少事故.當專案本身是由多個語言,多個部門來開發,採用了較多開源和第三方的軟體例項時,需要好的配置管理.配置管理之路 scmroad 軟體測試網 軟體測試管理 ...

cmmi配置管理

配置管理的目的是通過執行版本控制 變更控制等規程,以及使用配置管理軟體,來保證所以配置項的完整性和可跟蹤性。配置管理是對工作成果的一種有效保護。凡是納入配置管理範疇的工作成果統稱為配置項 comfiguration item,ci 配置項主要有兩大類 屬於產品組成部分的工作成果,如需求文件 設計文件...