身為後端工程師,你對這類招聘要求肯定不陌生:熟悉分散式系統的設計和應用;熟悉分散式、緩存、消息、搜索等機制;對分散式常用技術進行合理應用、解決問題等等。
而這其中,又以分散式協議與演算法尤甚。很多大公司在招聘架構師或高級工程師時,都要求熟悉這部分內容。面試官不僅要考察其原理和運行機制,還有面試者對這類問題在架構設計層面的理解,以及具體場景下的應用。
但以我作為面試官的經驗看,真正搞懂這部分的候選人少之又少。
其實,分散式協議與演算法(下面簡稱分散式演算法)是分散式系統運行的核心規則和關鍵步驟,想參透分散式技術、開發一個分散式系統,最先要掌握的就是這部分知識。
以 InfluxDB 為例,很多技術團隊試圖自己實現 InfluxDB 的集群功能,但最終都放棄了。因為這裡面的坑實在太多,甚至有人在接入性能敏感的場景,該使用反熵(Anti-Entropy)演算法時,卻用了 Raft 演算法,使得集群性能約等同於單機。
如果你要使用集群功能,又做不到基於開源版本自研,就只能購買人家的企業版。要知道,企業版每個節點的 License 授權費就要 1.5 萬美刀/年,具體貴在哪?它的護城河就是以分散式演算法為核心的分散式集群能力。
由此可見,真正掌握分散式演算法的人並不多。大多數人只是會用分散式系統,卻並不具備分散式系統的獨立開發能力。
所以,不論是基於工作需要,還是想尋求長期職業發展、提升職場競爭力,分散式演算法作為分散式系統的核心,都是你在這個時代應該掌握的基本功。
如何高效學習分散式演算法?
如果你留心觀察,會發現有不少人看了很多資料和書籍,涉及到具體問題,照樣一頭霧水,比如:
• 拜占庭錯誤是怎麼回事?為什麼區塊鏈用拜占庭容錯演算法?Paxos 演算法不行嗎?能黑比特幣嗎?
• 想要實現數據副本的一致性,到底該選 Paxos 演算法,還是 Raft 演算法?
• 為什麼我的集群接入性能低?稍微出現峰值流量,為什麼業務就基本不可用了?
• 如何設計分散式系統架構呢?那麼多演算法,Paxos、Raft、Gossip、Nuorum NWR、PBFT 等等,究竟該選擇哪個?
其實,演算法相對抽象,即使是非常經典的論文,也有一些關鍵細節沒有交代清楚。而網上的信息大多是「複製粘貼」的結果,甚至有不少錯誤,給自主學習帶來了很多障礙和誤導。
在我看來,要掌握這部分內容,不僅要理解常用演算法的原理、特點和局限性,還要根據場景特點選擇適合的分散式演算法。
剛好,極客時間上線了一個新專欄《分散式協議與演算法實戰》,作者是騰訊資深工程師韓健,我有幸提前看到了一部分內容,很想推薦給你。
在專欄中,他分享了自己支撐海量互聯網服務中的分散式演算法實戰心得,讓你學完就能在工作中根據場景特點,靈活地設計架構和運用分散式演算法,開發出適合該場景的分散式系統,對架構設計的理解,也會更上一層樓。
結算時輸入優惠口令「fenbushi6」到手僅 ¥50
從重慶大學的軟體工程專業畢業后,他就開始和分散式系統打交道,至今有 10 多年了。早期,他接觸了電信級分散式系統,比如內核態 HA Cluster,現在是互聯網分散式系統,比如名字服務、NoSQL 存儲、監控大數平台等。
他做過創業公司的 CTO。加入騰訊后,曾負責 QQ 後台海量服務分散式中間件,現致力於時序資料庫 InfluxDB 自研集群系統的架構設計和研發工作。
第一,理論篇,講解分散式架構設計的核心理論,讓你學完就能落地實踐。其中,涉及典型的分散式問題,分散式系統中的相互矛盾特性等,幫你在實戰中根據場景特點選擇適合的分散式演算法。
第二,協議和演算法篇,重點講解其原理、特點、適用場景和常見誤區。比如,你以為開發分散式系統使用 Raft 演算法就足夠了,其實它更適合性能要求不高的強一致性場景;又比如類似「Paxos 和 Raft 的區別在哪裡」等常見面試題,你都會在這部分找到答案。
第三,實戰篇,讓你掌握分散式基礎理論和分散式演算法在工程實踐中的應用。比如,剖析 InfluxDB 企業版的 CP 架構和 AP 架構的設計,以及 Raft、Quorum NWR、Anti-Entropy 等分散式演算法的具體實現。
我仔細看了下,學完實戰篇,你就真正了解如何根據場景特點選擇適合的分散式演算法,以及使用分散式演算法的實戰技巧。這樣,才能根據工作中的實際情況舉一反三,獨立思考、設計和開發。
除此之外,他還專門剖析了 Hashicorp Raft 的實現,並以一個分散式 KV 系統的開發實戰為例,帶你用 Raft 演算法開發一個分散式系統,讓你全面掌握分散式演算法的實戰能力。