覆雜系統架構設計實戰:從架構設計原理到頂尖公司面試

張逸 周學文

買這商品的人也買了...

商品描述

本書系統講解覆雜系統架構設計知識,兼具理論深度與實踐價值。全書分為三部分,先闡述系統設計基礎概念、分布式系統屬性及核心定理與數據結構;再詳解DNS、負載均衡器、數據庫、分布式緩存等核心組件的設計與實現; 通過API設計、安全防護等實踐內容及URL短鏈、仿Twitter/Instagram/Google Docs等真實案例,結合面試指南與實用手冊,助力讀者掌握系統設計思維。本書面向軟件工程師、面試求職者等群體,既夯實理論基礎,又提供實操方法,幫助應對系統設計面試與實際工作中的覆雜問題。

作者簡介

迪倫德拉·辛哈(Dhirendra Sinha) 谷歌軟件工程 ,天使投資人,曾在多家創業公司擔任戰略與技術顧問。Dhirendra在軟件工程領域深耕近20年,善於構建高度可擴展的覆雜分布式系統,長於管理多團隊的工程項目,職業生涯橫跨思科、甲骨文、雅虎和谷歌等科技巨頭,並在多家早期及成熟創業公司擔任領導職務。除了紮實的軟件工程實踐經驗,他還持續7年講授分布式系統設計課程。Dhirendra擁有印度理工學院古瓦哈提分校工學學士學位和美國得克薩斯農工大學理學碩士學位。特賈斯·喬普拉(Tejas Chopra) Netflix 軟件工程師, 開發了支持Netflix 系統和個性化服務的機器學 臺。作為美國 的EB1A(愛因斯坦)簽證獲得者,Tejas還榮獲“40位40歲以下科技精英”獎項,兩度登上TEDx演講臺,並當選英國計算機學會(BCS)會士。他經常在雲計算、區塊鏈、機器學習、軟件開發和工程領導力等領域的重要會議和專題研討會上發表演講。2023年,Tejas獲得印度成就者論壇頒發的“ 成就獎”。他在美國亞利桑那州 技術大學擔任軟件開發客座教授,同時也是一位活躍的天使投資人。他擁有美國匹茲堡卡內基梅隆大學電氣與計算機工程碩士學位。

目錄大綱

前言
作者簡介
審校者簡介
第一部分 系統設計基礎
第1章 系統設計基礎知識
1.1 什麼是系統設計
1.1.1 軟件系統
1.1.2 分布式軟件系統
1.1.3 理解系統設計
1.2 系統設計的類型有哪些
1.2.1 高層系統設計
1.2.2 系統架構
1.2.3 數據流
1.2.4 可擴展性
1.2.5 容錯性
1.2.6 低層系統設計
1.2.7 算法
1.2.8 數據結構
1.2.9 API
1.2.10 代碼優化
1.3 系統設計在業界的重要性
1.4 凸顯系統設計重要性的實踐案例
1.5 總結
第2章 分布式系統屬性
2.1 酒店客房預訂示例
2.2 一致性
2.2.1 強一致性
2.2.2 最終一致性
2.3 可用性
2.4 理解分區容錯性
2.4.1 網絡分區
2.4.2 分區容錯性
2.5 延遲
2.6 持久性
2.7 可靠性
2.8 容錯性
2.9 可擴展性
2.9.1 垂直擴展
2.9.2 水平擴展
2.10 總結
第3章 分布式系統核心定理和數據結構
3.1 CAP定理
3.2 PACELC定理
3.2.1 Paxos
3.2.2 Raft
3.3 BGP
3.3.1 拜占庭故障
3.3.2 拜占庭容錯
3.3.3 現代拜占庭容錯
3.4 FLP不可能性定理
3.5 一致性哈希
3.6 布隆過濾器
3.7 計數最小草圖
3.8 超對數計數
3.9 總結
第二部分 分布式系統的核心組件
第4章 分布式系統的基礎組件:DNS、負載均衡器與應用網關
4.1 DNS探析
4.2 DNS的可擴展性、可靠性與一致性
4.2.1 可擴展性
4.2.2 可靠性
4.2.3 一致性
4.3 負載均衡器
4.3.1 部署負載均衡器
4.3.2 負載均衡器的優點
4.3.3 全局負載均衡與本地負載均衡
4.3.4 DNS和GSLB
4.3.5 負載均衡算法
4.3.6 位於開放系統互連模型各層級的負載均衡
4.3.7 部署負載均衡器
4.3.8 實現負載均衡器
4.4 應用網關
4.5 微服務架構
4.6 雲原生部署方案
4.7 本地化部署方案
4.8 總結
第5章 設計與實現系統組件——數據庫與存儲
5.1 數據庫
5.1.1 數據庫類型
5.1.2 關系數據庫
5.1.3 NoSQL數據庫
5.1.4 對比關系數據庫與NoSQL數據庫
5.2 鍵值存儲
5.2.1 什麼是鍵值存儲
5.2.2 在分布式系統中的應用
5.2.3 設計鍵值存儲系統
5.3 可擴展性與數據覆制
5.3.1 提升可擴展性
5.3.2 一致性哈希
5.3.3 虛擬節點
5.3.4 數據冗餘策略
5.4 實現get和put函數
5.4.1 實現get和put操作
5.4.2 使用r和w
5.5 鍵值存儲的容錯機制與故障識別
5.5.1 管理臨時故障
5.5.2 處理永久故障
5.5.3 提升環成員關系以用於檢測故障
5.6 系統設計面試:鍵值存儲的設計要點與策略
5.7 DynamoDB
5.7.1 無固定樣式
5.7.2 API函數
5.7.3 DynamoDB的數據分區
5.7.4 DynamoDB的吞吐量優化
5.7.5 DynamoDB的高可用性
5.8 列族數據庫
5.9 HBase
5.10 圖數據庫
5.11 Neo4j圖數據庫
5.12 關系建模與圖建模
5.12.1 圖建模
5.12.2 向現有圖結構添加新節點
5.13 總結
5.14 參考文獻
第6章 分布式緩存
6.1 什麼是緩存
6.1.1 什麼是分布式緩存
6.1.2 分布式緩存與常規緩存有何區別
6.1.3 應用場景
6.1.4 使用分布式緩存的優勢
6.1.5 使用分布式緩存的挑戰
6.2 設計分布式緩存
6.2.1 需求
6.2.2 設計歷程
6.3 主流分布式緩存方案
6.3.1 Redis
6.3.2 Memcached
6.3.3 如何在Redis與Memcached之間選擇
6.4 總結
第7章 發布/訂閱系統與分布式隊列
7.1 分布式系統的演進歷程
7.2 設計發布/訂閱系統
7.2.1 發布/訂閱系統的關鍵特征
7.2.2 發布/訂閱系統的設計要點
7.3 Kafka
7.4 Kafka Streams
7.5 Kinesis
7.6 總結
第三部分 系統設計實踐
第8章 系統組件的設計與實現:API、安全與指標
8.1 REST API
8.1.1 REST API的設計原則
8.1.2 REST API的應用場景
8.1.3 優勢與不足
8.2 gRPC API
8.2.1 gRPC API的設計原則
8.2.2 gRPC API的應用場景
8.2.3 優勢與不足
8.3 對比REST與gRPC
8.4 API安全
8.4.1 認證
8.4.2 授權
8.4.3 API的安全通信
8.4.4 速率限制
8.5 分布式系統日誌
8.5.1 集