作 者:餘春龍 著
定 價:79
出 版 社:電子工業出版社
出版日期:2019年01月01日
頁 數:256
裝 幀:平裝
ISBN:9787121356032
"揭秘互聯網高並發、高可用、可擴展架構核心技術囊括計算機功底、技術架構、業務架構、職業發展四大維度,建立繫統的架構設計方法論詮釋技術架構與業務架構的融合方法"
●目 錄部分 什麼是架構章 五花八門的架構師職業21.1 架構師職業分類21.2 架構的分類2第2章 架構的道與術52.1 何為道,何為術52.2 道與術的辯證關繫6第2部分 計算機功底第3章 語言103.1 層出不窮的編程語言103.2 精通一門語言10第4章 操作繫統124.1 緩衝I/O和直接I/O124.2 內存映射文件與零拷貝144.2.1 內存映射文件144.2.2 零拷貝154.3 網絡I/O模型174.3.1 實現層面的網絡I/O模型174.3.2 Reactor模式與Preactor模式204.3.3 select、epoll的LT與ET204.3.4 服務器編程的1+N+M模型224.4 進程、線程和協程244.5 無鎖(內存屏障與CAS)274.5.1 內存屏障274.5.2 CAS30第5章 網絡315.1 HTTP 1.0315.1.1 HTTP 1.0的問題315.1.2 Keep-Alive機制與Content-Length屬性315.2 HTTP 1.1325.2.1 連接復用與Chunk機制325.2.2 Pipeline與Head-of-line Blocking問題335.2.3 HTTP/2出現之前的性能提升方法345.2.4 “一來多回”問題355.2.5 斷點續傳365.3 HTTP/2365.3.1 與HTTP 1.1的兼容375.3.2 二進制分幀375.3.3 頭部壓縮395.4 SSL/TLS395.4.1 背景395.4.2 對稱加密的問題405.4.3 雙向非對稱加密415.4.4 單向非對稱加密425.4.5 中間人攻擊435.4.6 數字證書與證書認證中心445.4.7 根證書與CA信任鏈455.4.8 SSL/TLS協議:四次握手475.5 HTTPS485.6 TCP/UDP495.6.1 可靠與不可靠495.6.2 TCP的“假”連接(狀態機)515.6.3 三次握手(網絡2將軍問題)535.6.4 四次揮手545.7 QUIC565.7.1 不丟包(Raid5算法和Raid6算法)575.7.2 更少的RTT585.7.3 連接遷移58第6章 數據庫596.1 範式與反範式596.2 分庫分表596.2.1 為什麼要分606.2.2 分布式ID生成服務606.2.3 拆分維度的選擇606.2.4 Join查詢問題616.2.5 分布式事務616.3 B+樹626.3.1 B+樹邏輯結構626.3.2 B+樹物理結構636.3.3 非主鍵索引656.4 事務與鎖666.4.1 事務的四個隔離級別666.4.2 悲觀鎖和樂觀鎖676.4.3 死鎖檢測716.5 事務實現原理之1:Redo Log726.5.1 Write-Ahead736.5.2 Redo Log的邏輯與物理結構746.5.3 Physiological Logging756.5.4 I/O寫入的原子性(Double Write)766.5.5 Redo Log Block結構776.5.6 事務、LSN與Log Block的關繫786.5.7 事務Rollback與崩潰恢復(ARIES算法)806.6 事務實現原理之2:Undo Log866.6.1 Undo Log是否一定需要866.6.2 Undo Log(MVCC)886.6.3 Undo Log不是Log896.6.4 Undo Log與Redo Log的關聯906.6.4 各種鎖916.7 Binlog與主從復制946.7.1 Binlog與Redo Log的主要差異946.7.2 內部XA ? Binlog與Redo Log一致性問題956.7.3 三種主從復制方式966.7.3 並行復制97第7章 框架、軟件與中間件997.1 對生態體繫的認知997.2 框架997.3 軟件與中間件100第3部分 技術架構之道第8章 高並發問題1048.1 問題分類1048.1.1 側重於“高並發讀”的繫統1048.1.2 側重於“高並發寫”的繫統1058.1.3 同時側重於“高並發讀”和“高並發寫”的繫統1068.2 高並發讀1088.2.1 策略1:加緩存1088.2.2 策略2:並發讀1098.2.3 策略3:重寫輕讀1108.2.4 總結:讀寫分離(CQRS架構)1138.3 高並發寫1148.3.1 策略1:數據分片1148.3.2 策略2:任務分片1158.3.3 策略3:異步化1178.3.4 策略4:批量1238.3.5 策略5:串行化+多進程單線程+異步I/O1248.4 容量規劃1258.4.1 吞吐量、響應時間與並發數1258.4.2 壓力測試與容量評估127第9章 高可用與穩定性1299.1 多副本1299.2 隔離、限流、熔斷和降級1309.3 灰度發布與回滾1359.4 監控體繫與日志報警1360章 事務一致性13810.1 隨處可見的分布式事務問題13810.2 分布式事務解決方案彙總13910.2.1 2PC13910.2.2 最終一致性(消息中間件)14110.2.3 TCC14510.2.4 事務狀態表+調用方重試+接收方冪等14710.2.5 對賬14810.2.6 妥協方案:弱一致性+基於狀態的補償14910.2.7 妥協方案:重試+回滾+報警+人工修復15110.2.8 總結1521章 多副本一致性15311.1 高可用且強一致性到底有多難15311.1.1 Kafka的消息丟失問題15311.1.2 Kafka消息錯亂問題15611.2 Paxos算法解析15811.2.1 Paxos解決什麼問題15811.2.2 復制狀態機16111.2.3 一個樸素而深刻的思想16311.2.4 Basic Paxos算法16411.2.5 lti Paxos算法16711.3 Raft算法解析16911.3.1 為“可理解性”而設計16911.3.2 單點寫入17011.3.3 日志結構17111.3.4 階段1:Leader選舉17411.3.5 階段2:日志復制17611.3.6 階段3:恢復階段17711.3.7 安全性保證17711.4 Zab算法解析18011.4.1 Replicated State Machine vs. Primary-Backup System18011.4.2 zxid18211.4.3 “序”:亂序提交 vs. 順序提交18211.4.4 Leader選舉:FLE算法18411.4.5 正常階段:2階段提交18611.4.6 恢復階段18611.5 三種算法對比1872章 CAP理論18912.1 CAP理論的誤解18912.2 現實世界不存在“強一致性”(PACELC理論)19012.3 典型案例:分布式鎖192第4部分 業務架構之道3章 業務意識19613.1 產品經理vs.需求分析師19613.2 什麼叫作一個“業務”19813.3 “業務架構”的雙重含義19913.4 “業務架構”與“技術架構”的區分2004章 業務架構思維20214.1 “偽”分層20214.2 邊界思維20414.3 繫統化思維20514.4 利益相關者分析20614.5 非功能性需求分析(以終為始)20814.6 視角(橫看成嶺側成峰)20914.7 抽像21014.8 建模21314.9 正交分解2155章 技術架構與業務架構的融合21815.1 各式各樣的方法論21815.2 為什麼要“領域驅動”21815.3 “業務流程”不等於“繫統流程”22115.4 為何很難設計一個好的領域模型22215.5 領域驅動設計與微服務架構的“合”22315.6 領域驅動設計與讀寫分離(CQRS)22415.7 業務分層架構模式22515.8 管道―過濾器架構模式22615.9 狀態機架構模式22615.10 業務切面/業務閉環架構模式228第5部分 從架構到技術管理6章 個人素質的提升23216.1 能力模型23216.2 影響力的塑造2347章 團隊能力的提升23717.1 不確定性與風險把控23717.2 以價值為中心的管理23917.3 團隊培養241
本書繫統化地闡述了技術架構與業務架構的方法論與實踐。本書內容分為5大部分,部分從行業背景出發定義架構的概念與範疇;第2部分細致討論架構所需的計算機功底,包括編程語言、操作繫統、數據庫、網絡、框架、中間件;第3部分從高並發、高可用、穩定性、分布式事務、Paxos/Raft一致性算法、CAP理論等方面探討技術架構;第4部分從業務架構思維、微服務、領域驅動設計、技術架構與業務架構融合的角度探討業務架構;第5部分從個人素質、團隊能力兩大方面,詮釋從技術到管理的轉變方法。通過本書,讀者可以對大型業務繫統的架構方法論有全局的認識,同時對軟件架構的核心能力有深刻的理解,對個人的技術成長起到一定的借鋻作用。本書不僅適合工程師、架構師閱讀,也適合企業繫統開發人員在內的軟件開發從業人員閱讀。
餘春龍 著
餘春龍,中科院軟件所計算機碩士畢業。熱衷於高並發高可用架構、業務建模、領域驅動設計,在十年的工作中,經歷過遊戲、社交、廣告、電商等各種類型的項目,積累了較豐富的工程經驗。
"當我在撰寫本書時,腦海中曾浮現出當初上學期間一個勁兒地啃UML建模、軟件架構設計書籍的情景。對於一個沒有太多項目經驗的人來說有點可笑,但也正是這種“過早熏陶”,使得我之後在工作中接手一個個項目時,會“多想”一些架構方面的事情。為什麼說是“多想”了呢?因為無論在企業面試還是日常工作中,人們更多談論的是語言、數據結構、算法、操作繫統原理,框架或中間件的使用方式、原理等“硬”性的內容,因為這些“硬”性的內容比較容易表述,其中學問的深淺也容易衡量。而對於軟件建模、架構設計等“軟”性的內容,就不容易衡量了。人們都知道它們很重要,但又說不清楚裡面到底包含了哪些學問,所以談論這些內容時通常都比較“虛”,最終導致很少從方法論的角度去講,而是在項目中遇到問題時再具體解決,屬於實用主義思維的做法。另一方面,隨著互聯網技術的發展,很多大型網站或繫統要處理海量的用戶訪問,需要解決高並發、高可用和由此帶來等