描述
內容簡介
用簡單的方式建構高性能服務架構不再是夢想,高吞吐量、快取設計、分層設計,讓你的網站及應用服務的價值及穩定度再度昇華
本書是理論結合實際的軟體架構設計指導手冊,旨在幫助讀者完成高性能軟體系統的架構設計工作。
書中涉及分散式、併發程式設計、資料庫最佳化、快取、IO、前端性能最佳化等方面的理論知識,並在理論知識的基礎上推導其實踐技巧。本書最後還運用書中知識,完成了一個實際軟體專案的架構設計工作,極適合軟體架構師、工程師、學生閱讀,以幫助其完善軟體發展知識體系和提升其軟體架構設計能力。
全書共12章,內容如下
■ 第 1 章 高性能和架構
包括高性能代表的具體指標,架構的具體含義與主要內容。
■ 第 2 章 分流設計
即如何使用內容分發網路、多位址直連、反向代理等手段將使用者的請求分散到不同的系統上,從而降低每個系統的併發數。
■ 第 3 章 服務平行相關的設計
首先,介紹了平行與併發的概念。其次,在此基礎上介紹了叢集系統、分散式系統、微服務系統。包括各類別系統的特點、實現困難等。服務平行設計能夠進一步將系統內的請求進行分流,從而提升系統性能。
■ 第 4 章 多進行、多執行緒、多程式碼協同等運算併發手段
尤其是對常見的多執行緒進行了深入介紹,包括執行緒的狀態轉換、應用場景、使用方法、協作方法等。透過運算併發設計,能夠顯著提升系統的併發能力。
■ 第 5 章 輸入輸出設計
首先介紹了IO的分類別維度、層級。然後詳細介紹了常見的五種IO模型,包括這些模型之間的演化邏輯,並列出了這些模型的實際使用範例。
■ 第 6 章 資料庫設計與最佳化手段
從最基本的關聯式資料庫設計開始,介紹了關聯式資料庫設計的設計範式、反範式。在此基礎上,還介紹了各類別索引的原理、使用條件,各類別鎖的特點,鎖死的產生與解除,交易及其隔離等級等。在章節的最後還介紹了針對巨量儲存資料時資料庫該如何最佳化,以及一些非傳統的資料庫和資料庫中介軟體。
■ 第 7 章 快取設計的方法和技巧。
這一章從快取的收益說起,推導提升快取收益的方法。然後在此基礎上,列出了提升快取收益的具體實施手段,包括快取要素的設計、更新機制的設計、清理機制的設計、風險點的處理、位置的設計等。最後還介紹了寫快取的收益計算和實踐方案。
■ 第 8 章 系統可靠性設計的相關知識
首先,介紹了可靠性的概念與具體的衡量指標。其次,在此基礎上介紹了提升系統可靠性的手段。這一章將幫助我們建構高可靠性的系統。
■ 第 9 章 應用保護的基礎知識和實踐手段
這些知識和手段能提升應用在突發狀況下的工作狀況。
■ 第 10 章 前端高性能的相關知識
這是一個相對獨立的一章。首先,分析了前端工作過程中的性能關鍵點。其次,針對這些關鍵點列出了前端性能最佳化的手段。具有較強的綜合性和指導性。
■ 第 11 章架 構設計中架構設計風格和軟體生命週期的基礎知識
這些知識將指導我們系統化地進行軟體架構工作。
■ 第 12 章 項目實踐
本章以前面各章介紹的高性能架構知識為依據,完整地開展了一個高性能軟體系統的架構工作,包括理論推導、模型設計、概要設計、詳細設計等各個環節,介紹了一個完整的高性能架構過程。本章的內容能幫助讀者學會如何在實踐中靈活運用前面各章的知識。
作者簡介
易哥
畢業於浙江大學、山東大學,高階軟體系統架構師、網路工程師、資料庫工程師、軟體測試工程師、註冊電氣工程師。主要研究方向為機器學習、分散式演算法、容錯算法在無線傳感網路中的應用,相關論文獲得IEEE通信協會最佳論文獎。曾擔任網站技術部門負責人,具有豐富的互聯網開發經驗。先後設計和實現了眾多系統和平台,也是活躍的開源開發者。
目錄
第1章 高性能架構
1.1 軟體架構
1.2 軟體的品質
1.3 高性能概述
1.4 軟體性能指標
1.5 性能指標之間的關係
1.6 高性能架構複習
第2章 分流設計
2.1 內容分發網路
2.2 多位址直連
2.3 反向代理
第3章 服務平行設計
3.1 平行與併發
3.2 叢集系統
3.3 分散式系統
3.4 微服務系統
第4章 運算併發
4.1 多處理程序
4.2 多執行緒
4.3 多程式碼協同
4.4 運算併發複習
第5章 輸入輸出設計
5.1 概念梳理
5.2 IO模型
5.3 IO模型的層級關係
5.4 阻塞式IO模型
5.5 非阻塞式IO模型
5.6 訊號驅動式IO模型
5.7 重複使用式IO模型
5.8 非同步式IO模型
5.9 輸入輸出模型複習
第6章 資料庫設計與最佳化
6.1 資料庫設計概述
6.2 關聯式資料庫設計
6.3 索引原理與最佳化
6.4 資料庫引擎
6.5 資料庫鎖
6.6 鎖死
6.7 交易
6.8 巨量資料的最佳化
6.9 非傳統資料庫
6.10 資料庫中介軟體
第7章 快取設計
7.1 快取的收益
7.2 快取的鍵與值
7.3 快取的更新機制
7.4 快取的清理機制
7.5 快取的風險點
7.6 快取的位置
7.7 寫快取
第8章 可靠性設計
8.1 軟體可靠性概述
8.2 軟體可靠性指標
8.3 模組連接方式與可靠性
8.4 軟體故障模型
8.5 可靠性設計
第9章 應用保護
9.1 應用保護概述
9.2 隔離
9.3 限流
9.4 降級
9.5 熔斷
9.6 恢復
第10章 前端高性能
10.1 前端工作分析
10.2 資源下載最佳化
10.3 頁面解析最佳化
10.4 惰性載入
10.5 預操作
第11章 架構設計理論
11.1 軟體架構風格
11.2 軟體生命週期
第12章 高性能架構實踐
12.1 需求概述
12.2 許可權系統的相關理論
12.3 模型設計
12.4 概要設計
12.5 資料層詳細設計
12.6 快取詳細設計
12.7 服務端詳細設計
12.8 客戶端詳細設計
12.9 MatrixAuth專案實踐複習
序
【 前言 】
2019年我出版了《通用原始程式閱讀指導書——MyBatis原始程式詳解》一書,向大家分享原始程式閱讀相關的知識和技巧。書籍面市後,收到了不錯的反響,有的讀者表示學到了許多的程式設計知識,有的讀者表示透徹瞭解了MyBatis的原始程式,有的讀者表示終於邁入了原始程式閱讀的大門。這讓我感覺每個坐在電腦前十指連彈的夜都是值得的。
然而,我也發現很多開發者在進行軟體架構設計時缺乏系統化的思維,只能在試錯、複習中不斷摸索提升,痛苦而緩慢。而且,這種提升方式容易留下知識盲區。可是這些問題都很難透過原始程式閱讀來補足。
因此,我決定寫一本系統化的架構書籍分享給大家。書籍中不僅要包含理論知識、實踐技巧、工程方案,更要將這些知識系統化地連接起來,以幫助大家建立一個完備的知識系統。這就是我寫作本書的原因。
在本書中,我們將從“高性能架構”這一點出發,系統地介紹高性能架構相關的各方面。
書中涉及很多理論知識,我儘量透過範例使得它們簡單易懂;書中有很多架構技巧,我儘量透過複習使得它們清晰明了。在本書的最後,還會以書中的架構系統為依據,開發一套高性能的分散式許可權系統。
從理論知識到架構技巧,再到項目實踐,本書力求列出一套完整的知識系統,指引大家完成高性能系統的架構設計。
第1章介紹了高性能和架構這兩個概念。包括高性能代表的具體指標,架構的具體含義與主要內容。
第2章介紹了分流設計。即如何使用內容分發網路、多位址直連、反向代理等手段將使用者的請求分散到不同的系統上,從而降低每個系統的併發數。
第3章介紹了與服務平行相關的設計。首先,介紹了平行與併發的概念。其次,在此基礎上介紹了叢集系統、分散式系統、微服務系統。包括各類別系統的特點、實現困難等。服務平行設計能夠進一步將系統內的請求進行分流,從而提升系統性能。
第4章介紹了多進行、多執行緒、多程式碼協同等運算併發手段,並列出了對應的實例。尤其是對常見的多執行緒進行了深入介紹,包括執行緒的狀態轉換、應用場景、使用方法、協作方法等。透過運算併發設計,能夠顯著提升系統的併發能力。
第5章介紹了輸入輸出設計。首先介紹了IO的分類別維度、層級。然後詳細介紹了常見的五種IO模型,包括這些模型之間的演化邏輯,並列出了這些模型的實際使用範例。
第6章介紹了資料庫設計與最佳化手段。從最基本的關聯式資料庫設計開始,介紹了關聯式資料庫設計的設計範式、反範式。在此基礎上,還介紹了各類別索引的原理、使用條件,各類別鎖的特點,鎖死的產生與解除,交易及其隔離等級等。在章節的最後還介紹了針對巨量儲存資料時資料庫該如何最佳化,以及一些非傳統的資料庫和資料庫中介軟體。
第7章介紹了快取設計的方法和技巧。這一章從快取的收益說起,推導提升快取收益的方法。然後在此基礎上,列出了提升快取收益的具體實施手段,包括快取要素的設計、更新機制的設計、清理機制的設計、風險點的處理、位置的設計等。最後還介紹了寫快取的收益計算和實踐方案。
第8章介紹了系統可靠性設計的相關知識。首先,介紹了可靠性的概念與具體的衡量指標。其次,在此基礎上介紹了提升系統可靠性的手段。這一章將幫助我們建構高可靠性的系統。
第9章介紹了應用保護的基礎知識和實踐手段。這些知識和手段能提升應用在突發狀況下的工作狀況。
第10章介紹了前端高性能的相關知識。這是一個相對獨立的一章。首先,分析了前端工作過程中的性能關鍵點。其次,針對這些關鍵點列出了前端性能最佳化的手段。具有較強的綜合性和指導性。
第11章介紹了架構設計中架構設計風格和軟體生命週期這兩個方面的基礎知識。這些知識將指導我們系統化地進行軟體架構工作。
第12章是一個項目實踐。本章以前面各章介紹的高性能架構知識為依據,完整地開展了一個高性能軟體系統的架構工作,包括理論推導、模型設計、概要設計、詳細設計等各個環節,介紹了一個完整的高性能架構過程。本章的內容能幫助讀者學會如何在實踐中靈活運用前面各章的知識。
本書力求理論聯繫實踐,既列出了高性能架構的相關理論與推導,又列出了具體的實施策略與技巧,還透過項目實踐完成了一個高性能軟體的架構設計。希望大家在閱讀本書後,能夠建立高性能架構領域的完整知識系統。
致謝
書籍的寫作出版要經歷很長的過程,從規劃到研究,從初稿到終稿,從編輯到面市。在這個過程中,我要感謝許多人。其間,我獲得了領導的大力支持和鼓勵,獲得了業內專家的審稿和指導,也獲得了國內外學術及工程領域多位朋友的幫助。性能領域的資深專家童庭堅在百忙中審稿了書籍初稿,並為本書作序。電子工業出版社的許多編輯也為本書傾力付出。
資訊技術浪潮帶來了巨大的機會,作為軟體開發者的你我有幸站到了這一機會面前,我們每個人都應該做出自己的一份貢獻,或偉大,或渺小,為自己,為社會。
真心希望本書能夠給你帶來架構能力和軟體開發能力的提升。
加油,願你我早日成為自己的燦爛星辰!
易哥