聊聊分散式系統


整理資料,回顧之前寫的東西,常常覺得這些就是要不斷地拿出來提,特別是 分散式系統 (Distributed Systems) 已經是現代架構的常態,他就跟組織一樣,要面對各式各樣 依賴性內外聚合可控性可治理可觀測網路拓墣效能快取事件處理 … 等問題,這些問題不只可以對應到系統,也可以對應到人、組織 (康威定律)。

  • 一、分散式系統核心問題
  • 二、理論基礎與方法概念
  • 三、當代工程方法與實踐
  • 四、分散式系統、組織運作、腦科學、宇宙、意識

一、分散式系統核心問題

分散式系統相對的就是集中式系統,代表的是 IBM 的大型主機 (Mainframe),像是 z/System、z/OS 系列。分散式系統相對於大型主機的好處,主要在於可擴展性佳、高容錯性、高冗余、可以承載高容量的業務量,但是這些優點背後也是有很大的代價的,也因此有很多學者發表很多理論討論相關議題,整理如下:


分散式系統的謬論 (Fallacies of distributed computing)

計算計科學家 Peter Deutsch 在九零年代就提出 Fallacies of distributed computing (分散式系統的謬論),點出以下容易被忽略、或者輕忽的觀點:

  1. The network is reliable (網路是可靠的)
  2. Latency is zero (網路沒有延遲)
  3. Bandwidth is infinite (頻寬是無限的)
  4. The network is secure (網路是安全的)
  5. Topology doesn’t change (網路拓墣不會改變)
  6. There is one administrator (網路上有個管理員)
  7. Transport cost is zero (傳輸沒有成本)
  8. The network is homogeneous (網路是同質的)

這些概念,特別是在現代雲端流行的時代,更容易被忽略,但實際上卻是很重要的。特別是在 Microservices、SRE、Chaos Engineering 裡都是經常被拿出來個別討論的。

同事 Earou 分享 效能測試 時,提到了我們曾遇過的 DNS resolved 卡在 NAT network throughput 的案例,我們也曾在 K8s 跑效能時,遇到了 kube-dns 效能問題。

下圖是 Why Distributed Systems Are Hard 中用貓來表達這八點:


二、理論基礎與方法概念

理論基礎

相關論文與代表人物


三、當代工程方法與實踐

實踐分散式架構的內外心法

Designing Distributed Systems 開頭第一章就提到一段話:

But building distributed systems is challenging. Often, they are one-off bespoke solutions. In this way, distributed system development bears a striking resemblance to the world of software development prior to the development of modern object-oriented programming languages.

不管是不是分散式系統,本質上,軟體架構關鍵性的從內到外概念包含了:

內外兼修,才能滿足分散式系統的架構實踐。

相關議題:可靠性工程的架構

底下名詞是與可靠性 (Reliability) 有關係的架構議題:

  • Elasticity 彈性
  • Resilient 韌性
  • Redundant 冗餘
  • Replication 副本
  • Highly Availability 可用性
  • Sharding 分片

更多參閱:可靠性工程 Reliability Engineering

微服務架構/分散式架構

API Gateway Private Endpoint 最後畫了一張架構圖,其中包含 API Gateway、Service Discovery、Service Catelog、Message Queue 等概念,主要就是描述大型架構的基礎架構。分散式架構通常要面對的是分散式服務治理的問題。

關聯字 or Buzzwords

最近相關字詞很多,在整理筆記時 (2018/04),慢慢的把這幾件事情都連在一起了,下圖是我在 SRE Taiwan 用比較詼諧、自嘲的方式,紀錄這些流行用詞的關連性,保留原始溫度,截圖記錄如下:

原文 點這裡,歡迎來喇低賽 XD

看完笑笑就好,認真地重新整理如下:

  • SRE (Site Reliability Engineering): 這是我工作上的主軸之一,強調自動化、用軟體工程做 Ops、救火隊兼架構顧問
  • Chaos Engineering:工程問題,中文翻譯成 混沌工程,主要目的是透過破壞、找到系統的脆弱點,目的是 反脆弱 (Antifragile),建立強健可靠的系統。
  • Distributed Systems: 現代架構趨勢,因而有 Chaos Engineering 的方法論。
  • Microservices: 這幾年最潮!但是說很容易,做很不容易,他的前提很多,這些前提都做到通常也不太需要這個架構了。隨便舉例幾個前提:
    • 能夠重構架構 <– 光這點很多公司就不可能了
    • 快速建置環境:很多公司的環境都是亂成一團,快速建置是開玩笑的
  • Service Mesh: 新一代的概念,概念跟 API Gateway 很像。相關介紹參閱我的筆記:Service MeshOverview API Gateway
  • Kubernetes:現代分散式系統的最佳實踐平台,容器編排的戰國時代已經結束了。
  • DevOps:企業組織文化的革新觀念,值得所有經營者、管理者深入了解、思考。
  • Agile:這是軟體開發流程的顯學,導入也是要有很多前提的。例如團隊要夠成熟、願意面對改變。
    • 通常團隊都不夠成熟,不敢面對改變
    • 上述兩個條件都達到時,沒有這個開發流程一樣能做到好的軟體

相關詞很多,例如還有 XyxOps 這類的也可以扯進來,不過這會變得像是無限上綱,所以還是到此為止。


四、分散式系統、組織運作、腦科學、宇宙、意識

人類大腦的運作

我很喜歡研究 科幻 有關的主題,底下是我最喜歡的科幻分析 Youtuber,談的是人類大腦的概念,裡面提到一段想法跟分散式系統很像。

底下整理 Youtube 內容的摘要:

人類大腦由 140 億個神經元組成,神經元又由細胞體、神經纖維組成,其中細胞體想像成計算機,神經纖維想像成網路。生命的演化,正是因為神經元不斷地增長,最後才演化出智慧生命體:人類。人類大腦的 灰質 相當於 計算機 (細胞體)白質 相當於 連結系統 (神經纖維) 的網路。表示人腦約有 140 億台計算機 (灰質、細胞體) 同時在運作,計算機之間透過網路連結 (白質、神經纖維)。

下圖摘錄影片說明細胞體、神經元,對比到計算計、網路的概念圖:

研究顯示,人與人之間的區別,不在灰質,在於白質。例如鋼琴家的白質,遠比普通人發達的多。人與人之間腦袋裡的運算能力其實大同小異,但是相差很大的是腦袋裡的網路的連線方式不同。

註:大腦白質有價值

這段意思不是說網路比運算能力還重要,這只是表面的錯意。實際上要表達的是,計算機之間的溝通、協作,會比計算機本身還要重要。

一些對照:

  • 分散式系統:計算機的連結方式,比計算機本身計算能力還重要。
  • 團隊:團隊的溝通協作模式,比個人能力還重要。

人類群體社會的運作

人類社會群體的運作,就是一個龐大且複雜的分散式系統。

  • 政府、組織,就是治理、負責處理共識、一致性問題問題。
  • 人類的溝通就如同分散式系統的溝通模式,而問題就如同 分散式系統的謬論 的論述
  • 各式各樣的組織與社群、個人,都是系統的一份子,如何管理追蹤群體事件的變化,本身就是困難的。
  • 人類的協作、溝通越順暢,整體社會運作越有效率、成本越低。

延伸閱讀 (站內)

分散式系統系列文章


參考資料

書籍 / 論文

網站文章

聯想參考

異動紀錄

  • 2019/10/13: [增加段落] 相關論文與代表人物、人類群體社會的運作
  • 2020/05/17: 調整文章結構



Comments