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

削微寒發表於2021-01-21

本文作者:HelloGitHub-老荀

一、起因

良好的開端,是成功的一半。

我是作者老荀,一個普通的程式設計師,沒有 985 和 211 的背景,也從沒在大廠工作過。僅僅是喜歡研究技術,一直想做一個講解技術的完整系列。然後我加入了 HelloGitHub 開源組織,在大家的鼓勵和幫助下,我開啟了講解系列。

經過和蛋蛋討論,最終確定了這次系列的主題是頂級開源專案 ZooKeeper 以下簡稱 ZK。

ZooKeeper 是 Apache 軟體基金會的一個軟體專案,它為大型分散式計算提供開源的分散式配置服務、同步服務和命名註冊。 ZooKeeper 曾經是 Hadoop 的一個子專案,現在是一個頂級獨立的開源專案。

選它的原因如下:

  • ZK 我曾經大概是在去年的時候,有深入研究過一段時間,只是當時沒有做過多的記錄,就自己隨便看看,但是沒能整理出來,心裡總留著一絲的遺憾

  • 我本身是 Java 程式設計師,所以從閱讀理解上來說,還是看 Java 的程式碼最親切,最舒服,而且我已經練就了一定程度的肉眼 DEBUG 能力,不需要將程式執行起來就能在腦中推導整個流程

  • ZK 本身是一個基礎的協調框架,而且其他程式語言也有對應的客戶端,所以受眾比較廣,並且 ZK 本身架構是分散式的,具有一定的複雜性,非常值得學習

  • ZK 市面上的書本資料很少(相較於 MySQL 或 Redis)而且基於的也是 ZK 的舊版本(不是最新版本),我想盡自己所能為開源社群添磚加瓦

二、介紹

系列文章基於當前 ZK 最新的版本:3.6.2

這個系列還是延續 HelloGitHub 的 Hello 宇宙,起名為 「HelloZooKeeper」。文章大致分幾個部分來講解:

  • 基本介紹(安裝和使用)
  • 業務處理流程
  • 資料記憶體模型
  • 選舉
  • 會話管理
  • 持久化 & 協議
  • 面試題
  • 配置大全及其他 ZK 的隱藏功能

差不多就以上這些主題,又因為 ZK 本身的話題還是比較大的,另一方面受限於本人水平,沒辦法做到事無鉅細、面面俱到,所以之後如果有補充我會做成單篇文章,新增進去。

三、內容

不積跬步,無以至千里。

不積小流,無以成江海。

講解原理難免會和枯燥掛鉤起來,我和蛋蛋也在交流到底是怎麼樣的形式才更容易讓大家接受,而我們的目標就是希望大家都能通過我們的文章有所收穫,所以這一次:

  • 採用基本不講解原始碼的方式來講解 ZK 的原理

  • 在講解的過程中我自己會虛(chui)構(niu)一個生動的小故事幫助大家理解

  • 儘量用通俗、幽默的語言把一個個複雜難懂的知識點講清楚、講明白

  • 以圖為主,文字為輔的方式,儘量減少讀者的閱讀負擔

  • 在文章中時不時穿插一些我認為很搞笑的網路梗、表情包,進一步提高讀者的閱讀興趣

開始之前,有兩句話想要說在前面:

文章中的觀點不一定是客觀的事實,但是都是本人通過原始碼推敲得出的結果,至少在本人主觀的認知上都是正確的結論,盡最大的努力對讀者負責。所以,有問題歡迎大家指出和討論,不要留一句:“垃圾”就走了。這是不負責任的表現!

開始動手寫該系列的時候 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

預告:下一篇是安裝和上手,帶你進入 ZooKeeper 的世界。下週見!

五、最後

我是 HelloGitHub 的滷蛋:

荀哥兒是我們 HelloGitHub Java 技術群的群主,他是個資深 Java 程式設計師,不僅技術好、熱愛開源還很幽默和謙遜。他經常在群裡耐心地回答大家的問題,我說他一個人盤活了 Java 群,他卻說:“別這麼說,都是群裡的兄弟們挺我!”

由荀哥兒編寫的 HelloZooKeeper 系列,從籌劃到最終釋出用了 2 個月的時間,他為了讓枯燥的文字變得風趣,自己畫了 50 多張圖+並插入了各種有趣的圖片,相信大家一定會喜歡的。還為了保證連載不斷,他完成了 9 篇才決定開始釋出,期間還不斷打磨文章的質量。對於我提出的修改建議,他都會認真考慮並在保持自己文章風格的情況下進行採納。該教程還採用開源和開放的編寫方式,方便大家貢獻和執行,後面會有幫助理解的示例專案。

講解技術的連載文章往往都沒有好看的閱讀數,但 HG 會把這個系列(10+篇)從頭到尾連載完成!不忘初心,由衷的希望讀者能從《講解開源專案》中學到東西,找到樂趣愛上開源。

HelloGitHub 感恩有你!


關注 HelloGitHub 公眾號 收到第一時間的更新。

還有更多開源專案的介紹和寶藏專案等待你的發掘。

相關文章