分散式系統領域,有哪些經典演算法?

身為後端工程師,你對這類招聘要求肯定不陌生:熟悉分散式系統的設計和應用;熟悉分散式、緩存、消息、搜索等機制;對分散式常用技術進行合理應用、解決問題等等。

 

而這其中,又以分散式協議與演算法尤甚。很多大公司在招聘架構師或高級工程師時,都要求熟悉這部分內容。面試官不僅要考察其原理和運行機制,還有面試者對這類問題在架構設計層面的理解,以及具體場景下的應用。

 

但以我作為面試官的經驗看,真正搞懂這部分的候選人少之又少

 

其實,分散式協議與演算法(下面簡稱分散式演算法)是分散式系統運行的核心規則和關鍵步驟,想參透分散式技術、開發一個分散式系統,最先要掌握的就是這部分知識

 

以 InfluxDB 為例,很多技術團隊試圖自己實現 InfluxDB 的集群功能,但最終都放棄了。因為這裡面的坑實在太多,甚至有人在接入性能敏感的場景,該使用反熵(Anti-Entropy)演算法時,卻用了 Raft 演算法,使得集群性能約等同於單機。

 

如果你要使用集群功能,又做不到基於開源版本自研,就只能購買人家的企業版。要知道,企業版每個節點的 License 授權費就要 1.5 萬美刀/年,具體貴在哪?它的護城河就是以分散式演算法為核心的分散式集群能力

 

由此可見,真正掌握分散式演算法的人並不多。大多數人只是會用分散式系統,卻並不具備分散式系統的獨立開發能力。

 

所以,不論是基於工作需要,還是想尋求長期職業發展、提升職場競爭力,分散式演算法作為分散式系統的核心,都是你在這個時代應該掌握的基本功。

如何高效學習分散式演算法?

 

如果你留心觀察,會發現有不少人看了很多資料和書籍,涉及到具體問題,照樣一頭霧水,比如:

 

•  拜占庭錯誤是怎麼回事?為什麼區塊鏈用拜占庭容錯演算法?Paxos 演算法不行嗎?能黑比特幣嗎?

•  想要實現數據副本的一致性,到底該選 Paxos 演算法,還是 Raft 演算法?

•  為什麼我的集群接入性能低?稍微出現峰值流量,為什麼業務就基本不可用了?
•  如何設計分散式系統架構呢?那麼多演算法,Paxos、Raft、Gossip、Nuorum NWR、PBFT 等等,究竟該選擇哪個?
 
其實,演算法相對抽象,即使是非常經典的論文,也有一些關鍵細節沒有交代清楚。而網上的信息大多是「複製粘貼」的結果,甚至有不少錯誤,給自主學習帶來了很多障礙和誤導。
 
在我看來,要掌握這部分內容,不僅要理解常用演算法的原理、特點和局限性,還要根據場景特點選擇適合的分散式演算法
 
剛好,極客時間上線了一個新專欄《分散式協議與演算法實戰》,作者是騰訊資深工程師韓健,我有幸提前看到了一部分內容,很想推薦給你。
 
在專欄中,他分享了自己支撐海量互聯網服務中的分散式演算法實戰心得,讓你學完就能在工作中根據場景特點,靈活地設計架構和運用分散式演算法,開發出適合該場景的分散式系統,對架構設計的理解,也會更上一層樓。
 

👆掃碼免費試讀
結算時輸入優惠口令「fenbushi6」到手僅 ¥50
僅限【前 200 個】名額有效
 
韓健是誰?
 
上面也提到了,韓健是騰訊資深工程師。
 
從重慶大學的軟體工程專業畢業后,他就開始和分散式系統打交道,至今有 10 多年了。早期,他接觸了電信級分散式系統,比如內核態 HA Cluster,現在是互聯網分散式系統,比如名字服務、NoSQL 存儲、監控大數平台等。
 
他做過創業公司的 CTO。加入騰訊后,曾負責 QQ 後台海量服務分散式中間件,現致力於時序資料庫 InfluxDB 自研集群系統的架構設計和研發工作。
 
他是如何講解分散式演算法的?
 
他將整個專欄劃分成三大模塊:
 
第一,理論篇,講解分散式架構設計的核心理論,讓你學完就能落地實踐。其中,涉及典型的分散式問題,分散式系統中的相互矛盾特性等,幫你在實戰中根據場景特點選擇適合的分散式演算法。
 
第二,協議和演算法篇,重點講解其原理、特點、適用場景和常見誤區。比如,你以為開發分散式系統使用 Raft 演算法就足夠了,其實它更適合性能要求不高的強一致性場景;又比如類似「Paxos 和 Raft 的區別在哪裡」等常見面試題,你都會在這部分找到答案。
 
第三,實戰篇,讓你掌握分散式基礎理論和分散式演算法在工程實踐中的應用。比如,剖析 InfluxDB 企業版的 CP 架構和 AP 架構的設計,以及 Raft、Quorum NWR、Anti-Entropy 等分散式演算法的具體實現。
 
我仔細看了下,學完實戰篇,你就真正了解如何根據場景特點選擇適合的分散式演算法,以及使用分散式演算法的實戰技巧。這樣,才能根據工作中的實際情況舉一反三,獨立思考、設計和開發。
 
除此之外,他還專門剖析了 Hashicorp Raft 的實現,並以一個分散式 KV 系統的開發實戰為例,帶你用 Raft 演算法開發一個分散式系統,讓你全面掌握分散式演算法的實戰能力。