聊聊分散式系統


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

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

一、分散式系統核心問題

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


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

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

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

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

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


二、理論基礎與方法概念


三、當代工程方法與實踐

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

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.

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

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

相關課題

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

微服務架構

API Gateway Private Endpoint 最後畫了一張架構圖,其中包含 API Gateway、Service Discovery、Service Catelog、Message Queue 等概念,主要就是描述大型架構的基礎架構,在分工上如何規劃的想法,當然這張圖只是草圖,很多想法還沒放進來,未來會持續更新想法~

關聯字 or Buzzwords

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

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

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

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

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


四、分散式系統、腦科學、宇宙、意識

人類大腦的運作

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

底下整理 Youtube 內容的摘要:

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

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

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

註:大腦白質有價值

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

一些對照:

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

延伸閱讀 (站內)


參考資料

書籍 / 論文

網站文章

聯想參考


Comments