最近一年多,跟ZooKeeper打了挺多交道包各,閱讀了一部分ZooKeeper的源代碼摘仅,也學(xué)習(xí)到了不少知識,包含Java面向?qū)ο笤O(shè)計问畅、分布式一致性協(xié)議等等娃属。ZooKeeper基于github和JIRA的開發(fā)流也讓我覺得挺驚艷的。從開源角度講护姆,ZooKeeper的質(zhì)量可能尚可矾端,而且我們也不應(yīng)該指望開源的項目能有多高質(zhì)量。如果目的是學(xué)習(xí)的話卵皂,ZooKeeper無疑是一個好的代碼庫秩铆,但是企業(yè)級應(yīng)用的話,ZooKeeper還是有很多問題。
- Bug數(shù)量太多殴玛。具體可以參考ZooKeeper在JIRA上的bug列表捅膘。而且有相當(dāng)一部分bug非常致命,包括我提的這個 bug滚粟,可能導(dǎo)致在機(jī)器掛掉后寻仗,選主無法成功!甚至3.4.X版本之前還有幾個很嚴(yán)重的一致性問題(要知道ZooKeeper的設(shè)計目的就是保證一致性的)凡壤。
- 無法動態(tài)配置集群大小署尤。這個問題已經(jīng)持續(xù)很久了,雖然新的3.5版本據(jù)說添加了這個特性亚侠。但是3.5目前還處于beta版本曹体,正式release不知道要到什么時候了,估計得到2019年了盖奈。
- 業(yè)務(wù)級應(yīng)用混坞,通常對高可靠的要求非常高,在極端條件下钢坦,數(shù)據(jù)都不能出錯究孕。例如硬盤空間滿、網(wǎng)絡(luò)閃斷爹凹、多網(wǎng)卡厨诸、機(jī)器重啟。這些環(huán)境下禾酱,ZooKeeper的測試覆蓋可能不足微酬。例如硬盤空間滿后,ZooKeeper服務(wù)掛掉颤陶,并且重啟后不能恢復(fù)(非必現(xiàn))颗管。多網(wǎng)卡是最近我提了一個patch后,才算能正常支持滓走。
- 整體而言垦江,社區(qū)的ZooKeeper開發(fā)者,還是很勤奮的搅方,基本上一直保持更新的節(jié)奏比吭,但是還是讓人非常不放心。
該自己造輪子姨涡,還得自己造衩藤。