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