本書主要內容
本書涵蓋作者整套架構設計方法論和架構實踐,主要包括以下內容。
■ 「架構基礎」先介紹架構設計的本質、歷史背景和目的,然後從複雜度來源,以及架構設計的原則和流程來詳細介紹架構基礎。
■「高性能架構模式」從存儲高性能、計算高性能方面介紹幾種設計方案的典型特 徵和應用場景。
■「高可用架構模式」介紹 CAP 原理、FMEA 分析方法,分析常見的高可用存儲架構和高可用計算架構,給出一些設計方法和技巧。
■「可擴展架構模式」介紹可擴展模式及其基本思想,分析一些常見架構模式。
■「架構實戰」將理論和案例結合,落地前面提到的架構原則、架構流程和架構模式。
適合讀者群:軟體發展工程師、對架構設計有興趣的技術人員、有架構設計經驗,但要繼續提升的技術人員。
本書特色
自成一派的架構設計方法論,涵蓋:
►架構基礎
►高性能架構模式
►高可用架構模式
►可擴展架構模式
►架構實戰
作者簡介:
李運華
互聯網資深技術專家,十多年技術老兵,帶領多個研發團隊,負責架構設計、架構重構、技術團隊管理、技術培訓等。
專注於開源技術、系統分析、架構設計,對互聯網技術的特點和發展趨勢有深入的研究,對系統解耦、高性能、高可用架構有豐富的經驗。
各界推薦
名人推薦:
本書所包含的知識點正是架構師需要掌握的必備技能,讀者加以學習並靈活應用,一定能成為優秀的架構師。運華是我非常敬佩的架構專家,能把學習架構的脈絡梳理得如此清晰,可見功力深厚。
黃勇 特贊科技CTO
建築的命運最終只有2種:被拆(被反覆運算)或被保護起來。架構作為軟體系統支撐骨架,與建築類似,或被反覆運算,或作為經典持續被技術人員學習。如何設計系統架構,什麼才是優秀的系統架構,本書以豐富的案例,由淺入深、層層遞進,讓技術人員充分學習架構及領略架構之美。
熊普江 騰訊佈道師&騰訊雲高級總監
作者談架構定義、原則、模式和案例,深入淺出,為有志於做架構工作的朋友提供一條路徑。或許讀者在實踐之後偶爾重讀有新的感受,這大概是寫作的最大安慰吧。
於君澤(右軍) 資深技術專家
作者將軟體架構的複雜性和嚴謹的理論,提煉成日常軟體工程的務實實踐和清爽易讀的文字。為讀者提供從概念到實踐的方法,從程式碼視角轉向架構視角和設計視角,適合所有要構建一款好軟體的技術人,成為強大的程式師、架構師和技術領導者。
杜江(洛逸)21CTO社區創始人、今日頭條特賣原技術負責人
架構師雖然是一個技術職位,但綜合能力要求很高,是團隊中的技術領導者。本書提綱挈領,從概念到模式並結合實戰,為我們掀開神秘面紗,展示架構師的全景視圖,相信會成為很多工程師進階架構師的入門寶典。
史海峰 貝殼金服 2B2C CTO
名人推薦:本書所包含的知識點正是架構師需要掌握的必備技能,讀者加以學習並靈活應用,一定能成為優秀的架構師。運華是我非常敬佩的架構專家,能把學習架構的脈絡梳理得如此清晰,可見功力深厚。
黃勇 特贊科技CTO
建築的命運最終只有2種:被拆(被反覆運算)或被保護起來。架構作為軟體系統支撐骨架,與建築類似,或被反覆運算,或作為經典持續被技術人員學習。如何設計系統架構,什麼才是優秀的系統架構,本書以豐富的案例,由淺入深、層層遞進,讓技術人員充分學習架構及領略架構之美。
熊普江 騰訊佈道師&騰訊雲高級總監
作者談...
作者序
前言
為什麼寫這本書
每個程式師心中都有一個成為架構師的夢想,夢想是美好的,但道路是曲折的。
我在 2006 年開始參與架構設計,原以為學習架構設計就像學習一門程式設計語言一樣,先學習基本語法,再研究細節和原理,然後實踐一下就能夠快速掌握。但真正實踐後才發現,架構設計的難度和複雜度要高很多。從最早開始接觸架構設計,到自我感覺初步完整掌握架構設計,至少6 年時間。等到自我感覺徹底掌握架構設計的精髓,至少8年時間(當然,這過程中我不是一直在做架構設計)。
我曾經以為是自己天資愚笨才會這樣,後來我帶了團隊,看到幾乎每個程式師在嘗試架構設計的時候,都面臨著我遇到過的各種困惑和瓶頸。特別是我作為職業等級晉升評委的時候,發現很多同學技術能力很強,業務也不錯,但卻卡在了架構設計這 部分。我意識到這應該不是個人天資的問題,而是架構設計本身的一些特性導致的。
我總結了幾個架構設計相關的特性。
1. 架構設計的思維和程式設計的思維差異很大
架構設計的關鍵思維是判斷和取捨,程式設計的關鍵思維是邏輯和實現。很多程 式師在轉變為架構師後,很難一開始就意識到這個差異,還是按照寫代碼的方式去思考架構,這樣會導致很多困惑。
2. 架構設計沒有體系化的培訓和訓練機制
大學的課程幾乎沒有架構設計相關的課程,架構設計的書也只是關注某個架構設計點,沒有體系化的架構設計書籍,導致程式師在學習上沒有明確的指導,只能自己慢慢摸索,效率低,容易踩坑。
3. 程式師對架構設計的理解存在很多誤區
例如,要成為架構師必須要有很強的技術天分;架構師必須有很強的創造力;架構設計必須要高大上才能體現架構師能力;架構一定要具備高可用、高性能⋯⋯這些似是而非的誤區讓很多技術人員望而生畏,還沒嘗試就已經放棄了。
得益於移動互聯網技術的快速發展,我有很多機會直接參與架構設計,這些架構背後的業務形形色色,包括社交、電商、遊戲、中介軟體、內部運營系統;用到的技術棧差異也比較大,包括 PHP、Java、C++ 等。雖然每次架構設計對我來說都是一個新的挑戰,但正好也提供了非常好的機會,讓我親身體驗不同的架構設計。在這個過程中, 我不斷學習、思考、實踐、總結、改進、交流,逐步形成了自己的一套架構設計方法論。
有了這套方法論後,我在做架構設計的時候遊刃有餘,不管什麼樣的業務、技術,按照這套方法論都能夠設計出優秀的架構,在職業等級面評的時候,就算我之前從來沒有接觸過對方的業務,也能快速理解對方描述的架構和發現其中做得好或不好的地方;其次,在指導其他同事的時候思路很清晰,容易理解,效果明顯。原來對架構設計比較迷茫的同學,透過幾次結合案例進行方法論培訓,都能夠很快地掌握這套方法論並在實踐中應用。甚至有很多其他業務線的同學,遇到架構設計的困惑,也來找我交流和指導,按照這套架構設計方法論的指導,能夠較快地理清架構設計的思路。
本書的主要出發點就是將這套架構設計方法論,分享給更多熱愛技術、有架構師夢想的技術人員,降低架構學習的成本,減少架構學習過程中走的彎路,助力大家更快地實現自己的架構師夢想。
本書內容已經在「極客時間」App 上開設「從 0 開始學架構」的專欄,訂閱人數已經超過 25000 人,成為「極客時間」最受歡迎的專欄,能夠得到這麼多技術朋友的信任,相信書中的內容一定會讓你有所收穫。
本書的主要內容
本書涵蓋我整套架構設計方法論和架構實踐,主要包括以下內容。
• 架構基礎:先介紹架構設計的本質、歷史背景和目的,然後從複雜度來源,以 及架構設計的原則和流程來詳細介紹架構基礎。
• 高性能架構模式:從存儲高性能、計算高性能方面介紹幾種設計方案的典型特 徵和應用場景。
• 高可用架構模式:介紹 CAP 原理、FMEA 分析方法,分析常見的高可用存儲架 構和高可用計算架構,並給出一些設計方法和技巧。
• 可擴展架構模式:介紹可擴展模式及其基本思想,分析一些常見架構模式。
• 架構實戰:將理論和案例結合,落地前面提到的架構原則、架構流程和架構模 式。
本書適合的對象
• 有一定的程式設計基礎的軟體發展工程師。
• 對架構設計有興趣的技術人員。例如,測試、運維等崗位的人員。
• 有初步的架構設計經驗,但需要繼續提升的技術人員。
勘誤與支持
因個人水準有限,且架構設計整體涵蓋的技術範圍很廣,技術深度很深,書中難免有不足之處,還望讀者批評指正。如果讀者對本書有所建議或對書中內容有疑惑,可與我聯繫。
Email:yunhua_lee@163.com
致謝
首先感謝王行雲、胡晏秋、陳俊良、張怡炘等同事對本書的勘誤和審核,讓本書的很多細節和內容更完善。
其次感謝家人的支持,在寫書的過程中父母、妻子承擔了家庭的重任,讓我能夠安心寫作。
特別感謝陳曉猛編輯,本書在他不斷督促下才寫完初稿,後期他耐心地指導、審稿、修改,最終才有本書的誕生。
特別感謝極客時間架構專欄團隊郭蕾、何瀟、周君鳳等人,打造一個非常成功的架構專欄,他們的高要求也讓整體內容更完善、優質。
特別感謝高效運維創始人蕭田國、特贊科技 CTO 黃勇、騰訊雲高級總監熊普江、 貝殼金服 2B2C CTO史海峰、資深技術專家于君澤(右軍)、21CTO社區創始人杜江(洛逸)幾位專家對本書的推薦。
前言
為什麼寫這本書
每個程式師心中都有一個成為架構師的夢想,夢想是美好的,但道路是曲折的。
我在 2006 年開始參與架構設計,原以為學習架構設計就像學習一門程式設計語言一樣,先學習基本語法,再研究細節和原理,然後實踐一下就能夠快速掌握。但真正實踐後才發現,架構設計的難度和複雜度要高很多。從最早開始接觸架構設計,到自我感覺初步完整掌握架構設計,至少6 年時間。等到自我感覺徹底掌握架構設計的精髓,至少8年時間(當然,這過程中我不是一直在做架構設計)。
我曾經以為是自己天資愚笨才會這樣,後來我帶了團隊,看到...
目錄
前言
第一篇 概念和基礎
第1章 架構基礎
1.1 「架構」到底指什麼
1.2 架構設計的目的
1.3 複雜度來源
1.4 本章小結
第 2 章 架構設計原則
2.1 合適原則
2.2 簡單原則
2.3 演化原則
2.4 本章小結
第 3 章 架構設計流程
3.1 有的放矢—識別複雜度
3.2 按圖索驥—設計備選方案
3.3 深思熟慮—評估和選擇備選方案
3.4 精雕細琢—詳細方案設計
3.5 本章小結
第二篇 高性能架構模式
第 4 章 存儲高性能
4.1 關聯式資料庫
4.2 NoSQL
4.3 緩存
4.4 本章小結
第 5 章 計算高性能
5.1 單伺服器高性能
5.2 集群高性能
5.3 本章小結
第三篇 高可用架構模式
第 6 章 CAP
6.1 CAP 理論
6.2 CAP 應用
6.3 CAP 細節
6.4 ACID、BASE
6.5 本章小結
第 7 章 FMEA
7.1 FMEA 介紹
7.2 FMEA 方法
7.3 FMEA 實戰
7.4 本章小結
第 8 章 存儲高可用
8.1 主備複製
8.2 主從複製
8.3 主備倒換與主從倒換
8.4 主主複製
8.5 資料集群
8.6 數據分區
8.7 本章小結
第 9 章 計算高可用
9.1 主備
9.2 主從
9.3 對稱集群
9.4 非對稱集群
9.5 本章小結
第 10 章 業務高可用
10.1 異地多活異地多活設計技巧
10.2 介面級的故障應對方案
10.3 本章小結
第四篇 可擴展架構模式
第 11 章 可擴展模式
11.1 可擴展概述
11.2 可擴展的基本思想
11.3 可擴展方式
11.4 本章小結
第 12 章 分層架構
12.1 分層架構類型
12.2 分層架構詳解
12.3 本章小結
第 13 章 SOA 架構
13.1 SOA 歷史
13.2 SOA 詳解
13.3 本章小結
第 14 章 微服務
14.1 微服務歷史
14.2 微服務與 SOA 的關係
14.3 微服務的陷阱
14.4 微服務最佳實踐
14.5 本章小結
第 15 章 微內核架構
15.1 基本概念
15.2 設計關鍵點
15.3 OSGi 架構簡析
15.4 規則引擎架構簡析
15.5 本章小結
第五篇 架構實戰
第 16 章 訊息佇列設計實戰
16.1 需求
16.2 設計流程
16.3 本章小結
第 17 章 互聯網架構演進
17.1 技術演進
17.2 技術演進的模式
17.3 互聯網業務發展
17.4 本章小結
第 18 章 互聯網架構範本
18.1 總體結構
18.2 存儲層技術
18.3 開發層技術
18.4 服務層技術
18.5 網路層技術
18.6 用戶層技術
18.7 業務層技術
18.8 平台技術
18.9 本章小結
第 19 章 架構重構
19.1 有的放矢
19.2 合縱連橫
19.3 運籌帷幄
19.4 文武雙全—專案管理 + 技術能力
19.5 本章小結
第 20 章 開源系統
20.1 選:如何選擇一個開源項目
20.2 用:如何使用開源方案
20.3 改:如何基於開源專案做二次開發
20.4 本章小結
前言
第一篇 概念和基礎
第1章 架構基礎
1.1 「架構」到底指什麼
1.2 架構設計的目的
1.3 複雜度來源
1.4 本章小結
第 2 章 架構設計原則
2.1 合適原則
2.2 簡單原則
2.3 演化原則
2.4 本章小結
第 3 章 架構設計流程
3.1 有的放矢—識別複雜度
3.2 按圖索驥—設計備選方案
3.3 深思熟慮—評估和選擇備選方案
3.4 精雕細琢—詳細方案設計
3.5 本章小結
第二篇 高性能架構模式
第 4 章 存儲高性能
4.1 關聯式資料庫
4.2 NoSQL
4.3 緩存
4.4 本章小結
第 5 章 計算高性能
5.1 單伺服器高性能
5....