偶然看到Redhet Principal Engineer的一篇slides,內(nèi)容是關(guān)于Telemetry Central Agent Partitioning的读恃。 比較感興趣搏屑,先簡單翻譯下從宏觀上了解下低缩。
Background
在Ironic conductors中堪旧,使用
連續(xù)哈希環(huán)(consistent hash-ring)
來分配節(jié)點。受此方法啟發(fā)才睹。主要想法是當(dāng)共享最小信息時徘跪,允許central agents來自我組織。
BP spec中的關(guān)鍵步驟是
blissful ignorance
砂竖。
How does it work?
啟動多個central agents真椿。
tooz group membership允許每個agent知道其他agents的存在。
每個agent載入相同的discovery extensions乎澄。
每個discoverer都嘗試來discover所有的resources突硝。
但是只poll被分配的resources的子集。
How does the agent know which resources it's been assigned?
每個discovered resource都有一個resource ID(UUID, IP addr, etc)置济。
每個獨立的agent使用agent pool的基數(shù)來運算一個list清單做哈希解恰。
我們依賴哈希算法的均勻分布特性。
所以每個agent能分辨:我是不是該為這個事情負(fù)責(zé)浙于。
What happens when an agent dies or a fresh agent is started?
每個agent注冊一個tooz group membership callback护盈,所以一旦pool中l(wèi)ive agents發(fā)生了變化,所有注冊了的agent都會被通知到羞酗。
一旦發(fā)生agent join或者leave腐宋,hash清單會改變大小。
在下一次polling cycle中檀轨,每個agent劃分不同的不連續(xù)的子集來決定做哪些resources的discover胸竞。
總之,我們覆蓋到所有的resources参萄,以一個single polling cycle為模卫枝。
What are the keys win for this approach?
light
fast
simple
ignorant
thrifty
Reference
Eoghan Glynn http://www.slideshare.net/EoghanGlynn/hash-based-central-agent-workload-partitioning-37760440