聊聊分散式系統


整理資料,回顧之前寫的東西,常常覺得這些就是要不斷地拿出來提,特別是 分散式系統 (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 效能問題。


二、理論基礎與方法概念

理論基礎

相關論文與代表人物

底下論文整理摘錄自 那些你不能錯過的分散式系統論文

基礎論文

  • Time, Clocks, and the Ordering of Events in a Distributed System
  • The Byzantine Generals Problem
  • Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services
  • CAP Twelve Years Later: How the “Rules” Have Changed
  • BASE: An Acid Alternative
  • A Simple Totally Ordered Broadcast Protocol
  • Virtual Time and Global States of Distributed Systems

一致性演算法

  • A Brief History of Consensus, 2PC and Transaction Commit
  • Paxos Made Simple
  • Paxos Made Practical
  • Paxos Made Live: An Engineering Perspective
  • Raft: In Search of an Understandable Consensus Algorithm
  • ZooKeeper: Wait-Free Coordination for Internet-Scale Systems
  • Using Paxos to Build a Scalable, Consistent, and Highly Available Datastore
  • Impossibility of Distributed Consensus With One Faulty Process
  • Consensus in the Presence of Partial Synchrony

實踐理論

  • The Google File System
  • BigTable: A Distributed Storage System for Structured Data
  • The Chubby Lock Service for Loosely-Coupled Distributed Systems
  • Finding a Needle in Haystack: Facebook’s Photo Storage
  • Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency
  • Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
  • Scaling Distributed Machine Learning with the Parameter Server
  • Dremel: Interactive Analysis of Web-Scale Datasets
  • Pregel: A System for Large-Scale Graph Processing
  • Spanner: Google’s Globally-Distributed Database
  • Dynamo: Amazon’s Highly Available Key-value Store
  • S4: Distributed Stream Computing Platform
  • Storm @Twitter
  • Large-scale Cluster Management at Google with Borg
  • F1 - The Fault-Tolerant Distributed RDBMS Supporting Google’s Ad Business
  • Cassandra: A Decentralized Structured Storage System
  • MegaStore: Providing Scalable, Highly Available Storage for Interactive Services
  • Dapper, a Large-Scale Distributed Systems Tracing Infrast

三、當代工程方法與實踐

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

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.

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

  • 內功心法:
  • 外家功夫:
    • 分散式架構概念,像是 Microservices、Service Mesh、API Gateway
    • 分散式系統治理:Service Mesh、Service Discovery、Config Management
    • 通訊方法:IPC, 2PC, 3PC
    • 配容器技術,像是 Docker、Kubernetes、ECS
    • Cloud Native 概念,包含 CI/CD
    • 雲端架構實務,像是 Architecting for the Cloud
    • Site Reliability Engineering
    • Chaos Engineering
    • Resiliency and Availability
    • Distributed Tracing: Jaeger, Istio

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

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

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

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

微服務架構

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 億台計算機 (灰質、細胞體) 同時在運作,計算機之間透過網路連結 (白質、神經纖維)。

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

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

註:大腦白質有價值

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

一些對照:

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

人類群體社會的運作

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

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

延伸閱讀 (站內)


參考資料

書籍 / 論文

網站文章

聯想參考

異動紀錄

  • 2019/10/13: [增加段落] 相關論文與代表人物、人類群體社會的運作

Comments