本書圍繞“構建高可用系統(tǒng)”(更可靠、更敏捷、更低成本)的主題,系統(tǒng)闡述近年來的技術演進路徑與底層原理。第1章為概論,從業(yè)務需求出發(fā),回顧近年技術架構演進趨勢,幫讀者快速建立全局認知。第2~4章講網絡,以網絡請求鏈路為線索,深入操作系統(tǒng)內核、負載均衡原理,講解“快”背后的系統(tǒng)設計。第5、6章講分布式系統(tǒng),聚焦一致性與容錯,拆解CAP定理、分布式事務與共識算法等核心機制。第7、8章解析Kubernetes架構與服務網格技術,理解云原生基礎設施的設計邏輯。第9章講系統(tǒng)觀測,構建統(tǒng)一觀測體系,掌握指標、日志、鏈路追蹤的集成與分析方法。第10章為軟件交付,剖析聲明式管理理念,講解Kustomize、Helm、Operator、OAM等主流交付模型。本書融合技術理論與一線實踐,適合后端工程師、系統(tǒng)架構師、技術團隊負責人及關注底層原理的高級開發(fā)者閱讀。
系統(tǒng)呈現(xiàn)現(xiàn)代軟件架構全景圖譜,讓讀者在復雜技術版圖中擁有清晰方向;洞悉分布式系統(tǒng)設計背后的邏輯,從整體上把握系統(tǒng)的運作規(guī)律;匯集一線研發(fā)經驗+前沿成果;以實際業(yè)務需求為出發(fā)點,聚焦架構權衡。
推薦語
偉峰是一位兼具前后端能力的全棧技術人,在過去 15 年實戰(zhàn)中積累了深厚的技術。在本書中,他從云計算應用工程師的角度,解讀在大型互聯(lián)網公司中,應如何構建以超高可用性為核心的技術體系。此外,全書吸收了與國際社區(qū)技術互動中的諸多真知灼見,進一步提升了前瞻性和準確度。
陳緒博士 阿里云基礎設施資深總監(jiān)
在過去幾年服務大大小小客戶的過程中,我切身感受到云原生應用及架構和基于傳統(tǒng)服務器集群的 Web 應用之間的不同——并非將裸金屬或 VM 換成容器,將服務拆成眾多的微服務,然后再使用一些通用的中間件就能稱之為云原生應用了。其本質是對應用迭代的敏捷性、對資源使用的高彈性、對高可用架構設計支持的性,以及對用戶行為的可觀測性等要求的全方面提升和重構。而要真正掌握這些本質,需要對底層各分支的技術原理有充分的了解。偉峰的作品正是這樣一本專業(yè)參考書,其流暢的文筆將眾多技術原理深入淺出地呈現(xiàn)在讀者面前,是一本既能提供愉悅閱讀體驗又能提供嚴謹專業(yè)信息的作品。
俞圓圓 騰訊云網絡公網產品負責人
這本書非常適合技術架構師、軟件工程師和運維工程師閱讀。偉峰在書中系統(tǒng)地介紹了如何設計和搭建一套高性能的后臺服務,并保持其高可用性與可維護性。為此,我們需要掌握廣泛的軟件與網絡技術。雖然這些技術跨度大、內容復雜,但后臺相關工作本就是高度關聯(lián)的體系,IT 專業(yè)的價值也正體現(xiàn)在它的深度與挑戰(zhàn)性中。得益于偉峰在本書中的見解,讀者能夠厘清復雜系統(tǒng)的技術脈絡,領會系統(tǒng)設計背后的核心思想。
曹亞孟 EdgeNext 首席架構師,《云計算行業(yè)進階指南》作者
很高興看到王偉峰老師從全局介紹了高可用系統(tǒng)的原理和設計,覆蓋了云原生、網絡、內核、容器以及分布式系統(tǒng)等技術。隨著云原生時代的到來,軟件架構一直隨之演進,基礎設施通過分層的方式簡化軟件的開發(fā)和部署,也帶來了更多的“認知負荷”。我自己也是從《Google SRE 運維解密》一書了解到了整個生態(tài)的變化,所以很開心看到更多結合開源生態(tài)的系統(tǒng)設計的內容,希望它能幫助更多國內架構師和工程師的成長。
毛劍 Bilibili 技術委員會主席
王老師通過多年的積累,終于推出了這本高質量的作品——《深入高可用系統(tǒng)原理與設計》。本書是針對軟件工程師、架構師和技術負責人的指南,幫助讀者在系統(tǒng)架構中做出明智的決策,并加深對各種技術優(yōu)缺點的理解。無論是了解基礎軟件構建還是設計高可用系統(tǒng),本書都是不可或缺的參考。
謝孟軍 積夢智能 CEO,《Go Web 編注》作者
推薦序
我與偉峰共事十余年,他始終對技術充滿熱情,精通多種前后端語言,在網絡技術、云原生、架構設計等領域有著深厚的積累與敏銳的洞察。正因其廣博的知識視野與扎實的技術功底,偉峰在多個項目中都能提出獨到見解,推動創(chuàng)新實踐,并高效地實現(xiàn)技術與業(yè)務的深度融合。在愛奇藝國際站建站初期,他主導了核心技術架構與業(yè)務體系的設計與落地,構建了智能化、模塊化的高可用服務框架,為海外業(yè)務的快速迭代與持續(xù)發(fā)展奠定了堅實基礎。
更難能可貴的是,偉峰將多年來的認知積累與實踐經驗系統(tǒng)化整理成書,惠及廣大技術工作者。這本書系統(tǒng)梳理了從傳統(tǒng)軟件開發(fā)到云計算、微服務、容器技術、服務網格等現(xiàn)代架構理念的演進脈絡。書中不僅詳盡呈現(xiàn)關鍵技術的實現(xiàn)方式,更深入探討其背后的原理與設計哲學。理解問題的本質,權衡解決方案的取舍,正是架構師應具備的核心能力。
書中比較了主流架構方案,并對核心原理進行深入解析,使讀者不僅能夠理解不同設計選擇的優(yōu)劣,還能在實際工作中做出更理性、更具前瞻性的技術決策。全書語言通俗、結構清晰,既適合基礎薄弱的讀者逐步入門,也為經驗豐富的專業(yè)人士提供了新的視角與深度思考的素材。
陸華梅
愛奇藝海外事業(yè)部高級總監(jiān)
前言
如果你是一位互聯(lián)網從業(yè)者,我猜這幾年你大概率會被這些層出不窮的概念包圍:云計算、邊緣計算、PaaS、FaaS、CaaS、ServiceMesh、Serverless,以及各種 Ops,如 DevOps、GitOps、MLOps、FinOps 等。
近幾年,軟件開發(fā)技術經歷了翻天覆地的變革,對構建業(yè)務應用的方式產生了重大影響。在討論如何為業(yè)務賦能之前,我們不妨先思考一下,推動這一波技術浪潮的核心驅動力是什么。
軟件在吞噬世界
互聯(lián)網人 Mark Andreessen 曾在文章 Why Software Is Eating the World 中探討了軟件如何改變各個行業(yè)。以下是文章中的部分內容:
我們處于戲劇性和廣泛的技術和經濟轉變的中間,軟件公司準備接管大量的經濟。
……
十年前,當我在創(chuàng)辦 Netscape 公司時,大概只有 500 萬人使用寬帶互聯(lián)網,而現(xiàn)在有超過 20 億人
使用寬帶互聯(lián)網……
文章發(fā)表于 2011 年,現(xiàn)在再來回顧互聯(lián)網的沖擊,感觸更加深刻:部分軟件變成像水、電、煤一樣的基礎設施。
在展望互聯(lián)網規(guī)模時,作者曾預測“在未來 10 年,至少有 50 億人將擁有智能手機,每個人都可以隨時隨地利用互聯(lián)網”。如今,我們可以確認,Mark Andreessen 的預測很準確:移動互聯(lián)網時代的用戶規(guī)模已經接近人口基數,億級 DAU 規(guī)模的移動應用不斷涌現(xiàn)。軟件對各行各業(yè)的滲透和對世界的改變,以及在移動互聯(lián)網時代巨大的用戶基數下快速
變更和不斷創(chuàng)新的需求,對軟件開發(fā)方式帶來巨大的推動力,我們清晰地看到如此波瀾壯闊的技術浪潮:
??軟件正在改變世界。
??移動互聯(lián)網讓這個變革影響每個人。
??傳統(tǒng)軟件開發(fā)方式受到巨大的挑戰(zhàn)。
??因為云計算及相關技術的普及,軟件上云成為趨勢。
??云計算的形態(tài),以及與之對應的軟件技術在持續(xù)演進。
近年來,軟件的規(guī)模和質量要求不斷提升,云基礎設施和平臺日益強大,軟件技術逐漸發(fā)展成為它本來該有的模樣,形成了與云環(huán)境匹配的架構,并催生了相應的開發(fā)流程和方法論。
大時代下的個體
視角轉回到個體,不管你是否接受,軟件行業(yè)解決問題的技術一直在變化。
這種變化并非簡單的升級,而是劇烈的革新替代,例如,容器替代虛擬機、服務網格替代Spring Cloud、觀測替代監(jiān)控、Network Policy 替代 iptables,等等。這種替代打破了軟件開發(fā)中許多固有的假設。在如此劇烈的變革中,如果只關注眼前的工作,不抬頭“看天”,當大革命來臨時,曾經關注的細節(jié)可能再也沒有意義。
所以,本書很少描述某個軟件如何安裝、如何使用,而是聚焦問題本質,剖析不同方案的核心原理,并探索技術發(fā)展的規(guī)律。例如,網絡優(yōu)化受限于物理世界的約束,分布式系統(tǒng)的演進則是對 CAP 定理的權衡,受時間和空間法則的制約。近幾年流行的容器、服務網格也不是什么黑科技,只是把計算機的基本原理、方法重新組合,換種形式解決業(yè)務變化帶來的新問題。讀完本書,相信讀者將對系統(tǒng)的整體運作有全新的理解,能夠從容選擇方案,輕松應對各種復雜問題。
本書適合哪些讀者
本書主要面向軟件工程師、架構師和技術負責人,特別適合那些需要在系統(tǒng)架構中做出權衡的技術決策者。即便讀者不直接參與這些決策,本書也能幫助讀者深入理解各種技術的優(yōu)缺點。
閱讀本書時,了解一些請求 / 響應型(Web)系統(tǒng)原理,熟悉一些常見的網絡協(xié)議(如 TCP、HTTP 等)。如果有一些后端開發(fā)經驗,將有助于加深對本書內容的理解,
王偉峰愛奇藝架構師,有17年軟件研發(fā)經驗。擅長云計算、大規(guī)模分布式系統(tǒng)的架構設計與工程實現(xiàn),對人工智能領域已有涉獵。開源圖書《創(chuàng)造智慧》作者。
第1 章 云原生技術概論
1.1 云計算的演進變革
1.1.1 物理機時代
1.1.2 虛擬化技術成熟
1.1.3 云計算技術成熟
1.1.4 容器技術興起
1.1.5 云計算形態(tài)演進總結
1.2 云原生出現(xiàn)的背景
1.2.1 軟件正在吞噬世界
1.2.2 移動互聯(lián)網在加劇變化
1.2.3 云原生的誕生
1.3 云原生的定義
1.3.1 Pivotal 對云原生的定義
1.3.2 CNCF 對云原生的定義
1.3.3 云原生定義之外
1.4 云原生技術的目標
1.5 云原生代表技術
1.5.1 容器技術
1.5.2 微服務
1.5.3 服務網格
1.5.4 可變基礎設施與不可變基礎設施
1.5.5 聲明式設計
1.5.6 DevOps
1.6 云原生架構的演進
1.7 云原生架構技術棧
1.8 小結
第 2 章 構建“足夠快”的網絡服務
2.1 了解各類延遲指標
2.2 HTTPS 請求優(yōu)化分析
2.2.1 請求階段分析
2.2.2 各階段耗時分析
2.2.3 HTTPS 的優(yōu)化總結
2.3 域名解析的原理與實踐
2.3.1 域名解析的原理
2.3.2 排查域名解析故障
2.3.3 Facebook 故障分析與總結
2.3.4 使用 HTTPDNS 解決“中間商”問題
2.4 使用 Brotli 壓縮傳輸內容
2.5 HTTPS 加密原理及優(yōu)化實踐
2.5.1 HTTPS 加密原理
2.5.2 HTTPS 優(yōu)化實踐
2.6 網絡擁塞控制原理與實踐
2.6.1 網絡擁塞控制原理
2.6.2 早期擁塞控制旨在收斂
2.6.3 現(xiàn)代擁塞控制旨在效能最大化
2.6.4 BBR 的設計原理
2.6.5 BBR 的性能表現(xiàn)
2.7 對請求進行“動態(tài)加速”
2.8 QUIC 設計原理與實踐
2.8.1 QUIC 出現(xiàn)的背景
2.8.2 QUIC 的特點
2.8.3 QUIC 實踐
2.9 小結
第 3 章 深入 Linux 內核網絡技術
3.1 OSI 網絡分層模型
3.2 Linux 系統(tǒng)收包流程
3.3 Linux 內核網絡框架
3.3.1 Netfilter 的 5 個鉤子
3.3.2 數據包過濾工具 iptables
3.3.3 連接跟蹤模塊 conntrack
3.4 內核旁路技術
3.4.1 數據平面開發(fā)套件DPDK
3.4.2 eBPF 和快速數據路徑XDP
3.4.3 遠程直接內存訪問RDMA
3.5 Linux 網絡虛擬化
3.5.1 網絡命名空間
3.5.2 虛擬網絡設備 TUN 和TAP
3.5.3 虛擬網卡 Veth
3.5.4 虛擬交換機 Linux Bridge
3.5.5 虛擬網絡通信技術
3.6 小結
第 4 章 負載均衡與代理技術
4.1 負載均衡與代理的分類
4.1.1 四層負載均衡
4.1.2 七層負載均衡
4.2 負載均衡器總體功能
4.2.1 服務發(fā)現(xiàn)
4.2.2 健康檢查
4.2.3 黏性會話
4.2.4 TLS 卸載
4.2.5 安全和 DDoS 防御
4.2.6 觀測
4.2.7 負載均衡
4.3 負載均衡部署拓撲
4.3.1 中間代理型
4.3.2 邊緣代理型
4.3.3 客戶端內嵌型
4.3.4 邊車代理型
4.4 四層負載均衡技術
4.4.1 直接路由模式
4.4.2 隧道模式
4.4.3 網絡地址轉換模式
4.4.4 主備模式
4.4.5 基于集群和一致性哈希的容錯和可擴展模式
4.5 從七層負載均衡到網關
4.6 全局負載均衡設計
4.7 小結
第 5 章 數據一致性與分布式事務
5.1 數據一致性
5.2 一致性與可用性的權衡
5.3 分布式事務模型
5.3.1 可靠事件隊列
5.3.2 TCC
5.3.3 Saga
5.4 服務冪等性設計
5.4.1 全局優(yōu)質 ID 方案
5.4.2 樂觀鎖方案
5.5 小結
第 6 章 分布式共識及算法
6.1 什么是共識
6.2 日志與復制狀態(tài)機
6.3 Paxos 算法
6.3.1 Paxos 算法起源
6.3.2 Paxos 算法詳述
6.4 Raft 算法
6.4.1 者選舉
6.4.2 日志復制
6.4.3 成員變更
6.5 小結
第 7 章 容器編排技術
7.1 容器編排系統(tǒng)的演進
7.1.1 Borg 系統(tǒng)
7.1.2 Omega 系統(tǒng)
7.1.3 Kubernetes 系統(tǒng)
7.1.4 以應用為中心的轉變
7.2 容器技術的原理與演進
7.2.1 文件系統(tǒng)隔離
7.2.2 資源全方位隔離
7.2.3 資源全方位限制
7.2.4 設計容器協(xié)作的方式
7.2.5 超親密容器組 Pod
7.2.6 Pod 是 Kubernetes 的基本單位
7.2.7 Pod 是調度的原子單元
7.2.8 容器邊車模式
7.3 容器鏡像的原理與應用
7.3.1 什么是容器鏡像
7.3.2 容器鏡像分層設計原理
7.3.3 構建足夠小的容器鏡像
7.3.4 加速容器鏡像下載
7.3.5 加速容器鏡像啟動
7.4 容器運行時與 CRI 接口
7.4.1 Docker 與 Kubernetes
7.4.2 容器運行時接口 CRI
7.4.3 Kubernetes 專用容器運行時
7.4.4 Containerd 與 CRI
7.4.5 安全容器運行時
7.4.6 容器運行時生態(tài)
7.5 容器持久化存儲設計
7.5.1 Docker 的存儲設計
7.5.2 Kubernetes 的存儲設計
7.5.3 普通的 Volume
7.5.4 持久化的 Volume
7.5.5 PV 的使用:從手動到自動
7.5.6 Kubernetes 存儲系統(tǒng)設計
7.5.7 存儲分類:塊存儲、文件存儲和對象存儲
7.6 容器間通信的原理
7.6.1 Overlay 覆蓋網絡模式
7.6.2 三層路由模式
7.6.3 Underlay 底層網絡模式
7.6.4 CNI 插件及生態(tài)
7.7 資源模型及編排調度
7.7.1 資源模型與資源管理
7.7.2 擴展資源與設備插件
7.7.3 默認調度器及擴展設計
7.8 資源彈性伸縮
7.8.1 Pod 水平自動伸縮
7.8.2 Pod 垂直自動伸縮
7.8.3 基于事件驅動的伸縮
7.8.4 節(jié)點自動伸縮
7.9 小結
第 8 章 服務網格技術
8.1 什么是服務網格
8.2 服務間通信的演化
8.2.1 原始的通信時代
8.2.2 優(yōu)質代微服務
8.2.3 第二代微服務
8.2.4 微服務框架的痛點
8.2.5 思考服務間通信的本質
8.2.6 代理模式的探索
8.2.7 優(yōu)質代服務網格
8.2.8 第二代服務網格
8.3 數據平面的設計
8.3.1 Sidecar 自動注入
8.3.2 流量透明劫持
8.3.3 實現(xiàn)可靠通信
8.4 控制面的設計
8.5 服務網格的產品與生態(tài)
8.5.1 Linkerd2 出擊
8.5.2 其他參與者
8.5.3 Istio 與 Linkerd2 性能對比
8.6 服務網格的未來
8.6.1 Proxyless 模式
8.6.2 Sidecarless 模式
8.6.3 Ambient Mesh 模式
8.7 小結
第 9 章 系統(tǒng)可觀測性
9.1 什么是可觀測性
9.2 可觀測性與傳統(tǒng)監(jiān)控的區(qū)別
9.3 遙測數據的分類與處理
9.3.1 指標的處理
9.3.2 日志的索引與存儲
9.3.3 分布式鏈路追蹤
9.3.4 性能剖析
9.3.5 核心轉儲
9.4 可觀測標準的演進
9.5 小結
第 10 章 應用封裝與交付
10.1 “以應用為中心”的設計思想
10.2 聲明式管理的本質
10.2.1 控制器模式
10.2.2 基礎設施即數據思想
10.3 從“封裝配置”到“應用模型”
10.3.1 Kustomize
10.3.2 Helm 與 Chart
10.3.3 Operator
10.3.4 OAM 與 KubeVela
10.4 小結
附錄 A 術語縮寫與釋義