1. 程式人生 > >開篇:免費開源的趣講 ZooKeeper 教程(連載)

開篇:免費開源的趣講 ZooKeeper 教程(連載)

![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210120171602756-2072189554.png)

本文作者:HelloGitHub-老荀

## 一、起因 > 良好的開端,是成功的一半。 我是作者[老荀](https://github.com/kaixinbaba),一個普通的程式設計師,沒有 985 和 211 的背景,也從沒在大廠工作過。僅僅是喜歡研究技術,一直想做一個講解技術的完整系列。然後我加入了 HelloGitHub 開源組織,在大家的鼓勵和幫助下,我開啟了講解系列。 經過和蛋蛋討論,最終確定了這次系列的主題是頂級開源專案 ZooKeeper 以下簡稱 ZK。 > ZooKeeper 是 Apache 軟體基金會的一個軟體專案,它為大型分散式計算提供開源的分散式配置服務、同步服務和命名註冊。 ZooKeeper 曾經是 Hadoop 的一個子專案,現在是一個頂級獨立的開源專案。 選它的原因如下: - ZK 我曾經大概是在去年的時候,有深入研究過一段時間,只是當時沒有做過多的記錄,就自己隨便看看,但是沒能整理出來,心裡總留著一絲的遺憾 - 我本身是 Java 程式設計師,所以從閱讀理解上來說,還是看 Java 的程式碼最親切,最舒服,而且我已經練就了一定程度的肉眼 DEBUG 能力,不需要將程式執行起來就能在腦中推導整個流程 - ZK 本身是一個基礎的協調框架,而且其他程式語言也有對應的客戶端,所以受眾比較廣,並且 ZK 本身架構是分散式的,具有一定的複雜性,非常值得學習 - ZK 市面上的書本資料很少(相較於 MySQL 或 Redis)而且基於的也是 ZK 的舊版本(不是最新版本),我想盡自己所能為開源社群添磚加瓦 ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210120171626650-2083572596.gif) ## 二、介紹 > 系列文章基於當前 ZK 最新的版本:3.6.2 這個系列還是延續 HelloGitHub 的 Hello 宇宙,起名為 「HelloZooKeeper」。文章大致分幾個部分來講解: - 基本介紹(安裝和使用) - 業務處理流程 - 資料記憶體模型 - 選舉 - 會話管理 - 持久化 & 協議 - 面試題 - 配置大全及其他 ZK 的隱藏功能 差不多就以上這些主題,又因為 ZK 本身的話題還是比較大的,另一方面受限於本人水平,沒辦法做到事無鉅細、面面俱到,所以之後如果有補充我會做成單篇文章,新增進去。 ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210120171639066-1816623706.jpg) ## 三、內容 > 不積跬步,無以至千里。 > > 不積小流,無以成江海。 講解原理難免會和枯燥掛鉤起來,我和蛋蛋也在交流到底是怎麼樣的形式才更容易讓大家接受,而我們的目標就是希望大家都能通過我們的文章有所收穫,所以這一次: - 採用基本不講解原始碼的方式來講解 ZK 的原理 - 在講解的過程中我自己會虛(chui)構(niu)一個生動的小故事幫助大家理解 - 儘量用通俗、幽默的語言把一個個複雜難懂的知識點講清楚、講明白 - 以圖為主,文字為輔的方式,儘量減少讀者的閱讀負擔 - 在文章中時不時穿插一些我認為很搞笑的網路梗、表情包,進一步提高讀者的閱讀興趣 ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210120171651081-1591270942.gif) 開始之前,有兩句話想要說在前面: 文章中的觀點不一定是客觀的事實,但是都是本人通過原始碼推敲得出的結果,至少在本人**主觀的認知上都是正確的結論,盡最大的努力對讀者負責**。所以,有問題歡迎大家指出和討論,不要留一句:“垃圾”就走了。這是不負責任的表現! 開始動手寫該系列的時候 ZK 最新版本是 3.6.2,如果在寫的過程中 ZK 迎來重大升級,**怕不是在玩我?講解的版本號不會做變動**,針對有必要的新特性,會在之後的單篇中進行單獨介紹。為了兼顧有趣和深度,文章中舉的有些例子未必是準確的,只能說是儘量貼近事實的同時會省略一些不重要的流程,從而減少讀者的閱讀負擔。 ## 四、展望 > HelloGitHub 因你們而精彩 既然是 HelloGitHub 出品的系列,怎麼能少了和 GitHub 的夢幻聯動呢? 我們會提供一個倉庫用來存放文章,希望大家可以把關於文章的建議或者關於 ZK 相關的討論,在 issue 區留言: > https://github.com/HelloGitHub-Team/HelloZooKeeper/issues/new 我一定會盡力回覆每一位讀者,同時如果有不少人都有疑惑的知識點,也會收集後通過單篇文章的方式,整理 issue 後統一解答。 請不要吝嗇你們的留言,你們的留言很可能會幫助到其他有相同困惑的人,讓我們一起來把 HelloZooKeeper 建設得更好吧~ 各個階段的小夥伴,都可以加入到**教程的編寫和校審**中。歡迎: - 新手:參與到修改文中的錯字、病句、拼寫、排版等問題 - 使用者:參與到內容的討論和問題解答、幫助其他人的事情 - 老司機:參與到文章的編寫中,讓你的名字出現在作者一欄 - 不懂程式設計的小白:點個 Star 支援我們在做的事吧! > 專案地址:https://github.com/HelloGitHub-Team/HelloZooKeeper ![](https://img2020.cnblogs.com/blog/759200/202101/759200-20210120171735716-1892144591.jpg) **預告**:下一篇是安裝和上手,帶你進入 ZooKeeper 的世界。下週見! ## 五、最後 我是 HelloGitHub 的滷蛋: 荀哥兒是我們 HelloGitHub Java 技術群的群主,他是個資深 Java 程式設計師,不僅技術好、熱愛開源還很幽默和謙遜。他經常在群裡耐心地回答大家的問題,我說他一個人盤活了 Java 群,他卻說:“別這麼說,都是群裡的兄弟們挺我!” 由荀哥兒編寫的 HelloZooKeeper 系列,從籌劃到最終釋出用了 2 個月的時間,他為了讓枯燥的文字變得風趣,自己畫了 50 多張圖+並插入了各種有趣的圖片,相信大家一定會喜歡的。還為了保證連載不斷,他完成了 9 篇才決定開始釋出,期間還不斷打磨文章的質量。對於我提出的修改建議,他都會認真考慮並在保持自己文章風格的情況下進行採納。該教程還採用開源和開放的編寫方式,方便大家貢獻和執行,後面會有幫助理解的示例專案。 講解技術的連載文章往往都沒有好看的閱讀數,但 HG 會把這個系列(10+篇)從頭到尾連載完成!不忘初心,由衷的希望讀者能從《講解開源專案》中學到東西,找到樂趣愛上開源。 HelloGitHub 感恩有你! --- 關注 **HelloGitHub 公眾號** 收到第一時間的更新。 還有更多開源專案的介紹和寶藏專案等待你的