産品特色
編輯推薦
1、貨真價實的互聯網場景下大型網站架構演變過程中核心技術難題的解決方案;
2、全部來源於作者真實經曆的生産案例,大型網站應對高並發、大流量的應急寶典;
3、分布式服務案例全麵剖析,為大傢講解如何構建一個分布式調用跟蹤係統;
4、大流量限流/消峰案例全麵剖析,將流量盡可能擋在係統上遊,避免對交易係統産生較大衝擊;
5、分布式配置管理服務案例全麵剖析,為大傢講解如何構建集中式資源配置中心;
6、限時搶購、秒殺場景下,熱點數據的讀/寫優化案例;
7、數據庫分庫分錶案例全麵剖析,為大傢講解如何提升關係型數據庫的並行處理能力和檢索效率。
每一章都是重點,每一章都是解決方案
8、理論有,但你更需要的是技術難題的解決方案;
9、本書文字不枯燥、互聯網味兒十足;
10、大型網站架構一定是簡單和清晰的,而不是炫技般的復雜化,解決問題采用直接的方式直擊要害纔是至見效的;
11、從接入層到存儲係統,本書涉及全麵;
12、毫無保留地闡述瞭作者多年在互聯網企業的架構設計經驗;
13、一本從實戰齣發的經典作品;
14、不吹牛、不誇張,腳踏實地為你剖析架構如何落地。
內容簡介
《人人都是架構師:分布式係統架構落地與瓶頸突破》並沒有過多渲染係統架構的理論知識,而是切切實實站在開發一綫角度,為各位讀者詮釋瞭大型網站在架構演變過程中齣現一係列技術難題時的解決方案。《人人都是架構師:分布式係統架構落地與瓶頸突破》首先從分布式服務案例開始介紹,重點為大傢講解瞭大規模服務化場景下企業應該如何實施服務治理;然後在大流量限流/消峰案例中,筆者為大傢講解瞭應該如何有效地對流量實施管製,避免大流量對係統産生較大衝擊,確保核心業務的穩定運行;接著筆者為大傢講解瞭分布式配置管理服務;之後的幾章,筆者不僅為大傢講解瞭秒殺、限時搶購場景下熱點數據的讀/寫優化案例,還為大傢講解瞭數據庫實施分庫分錶改造後所帶來的一係列影響的解決方案。
《人人都是架構師:分布式係統架構落地與瓶頸突破》適用於任何對分布式係統架構感興趣的架構師、開發人員以及運維人員。相信閱讀《人人都是架構師:分布式係統架構落地與瓶頸突破》你將會有知其然和知其所以然的暢快感。
作者簡介
高翔龍,杭州雲集微店架構師,基礎架構組負責人,負責基礎技術平颱的架構設計和中間件研發等工作,技術書籍《Java虛擬機精講》作者,熱衷於開源技術,常年遊走在Github上。
目錄
第1章 分布式服務案例 1
1.1 分布式係統的架構演變過程 2
1.1.1 單機係統 3
1.1.2 集群架構 4
1.1.3 拆係統之業務垂直化 6
1.1.4 為什麼需要實現服務化架構 8
1.1.5 服務拆分粒度之微服務 10
1.2 係統服務化需求 11
1.2.1 服務化與RPC協議 11
1.2.2 使用阿裏分布式服務框架Dubbo實現服務化 12
1.2.3 警惕Dubbo因超時和重試引起的係統雪崩 16
1.2.4 服務治理方案 18
1.2.5 關於服務化後的分布式事務問題 20
1.3 分布式調用跟蹤係統需求 21
1.3.1 Google的Dapper論文簡介 22
1.3.2 基於Dubbo實現分布式調用跟蹤係統方案 25
1.3.3 采樣率方案 35
1.4 本章小結 37
第2章 大流量限流/消峰案例 38
2.1 分布式係統為什麼需要進行流量管製 39
2.2 限流的具體方案 42
2.2.1 常見的限流算法 43
2.2.2 使用Google的Guava實現平均速率限流 45
2.2.3 使用Nginx實現接入層限流 48
2.2.4 使用計數器算法實現商品搶購限流 49
2.3 基於時間分片的消峰方案 51
2.3.1 活動分時段進行實現消峰 52
2.3.2 通過答題驗證實現消峰 52
2.4 異步調用需求 53
2.4.1 使用MQ實現係統之間的解耦 54
2.4.2 使用Apache開源的ActiveMQ實現異步調用 55
2.4.3 使用阿裏開源的RocketMQ實現互聯網場景下的流量消峰 61
2.4.4 基於MQ方案實現流量消峰的一些典型案例 72
2.5 本章小結 75
第3章 分布式配置管理服務案例 76
3.1 本地配置 77
3.1.1 將配置信息耦閤在業務代碼中 77
3.1.2 將配置信息配置在配置文件中 79
3.2 集中式資源配置需求 82
3.2.1 分布式一緻性協調服務ZooKeeper簡介 83
3.2.2 ZooKeeper的下載與集群安裝 84
3.2.3 ZooKeeper的基本使用技巧 86
3.2.4 基於ZooKeeper實現分布式配置管理平颱方案 87
3.2.5 從配置中心獲取Spring的Bean定義實現Bean動態注冊 93
3.2.6 容災方案 95
3.2.7 使用淘寶Diamond實現分布式配置管理服務 96
3.2.8 Diamond與ZooKeeper的細節差異 101
3.2.9 使用百度Disconf實現分布式配置管理服務 102
3.3 本章小結 110
第4章 大促場景下熱點數據的讀/寫優化案例 111
4.1 緩存技術簡介 112
4.1.1 使用Ehcache實現數據緩存 114
4.1.2 LocalCache存在的弊端 116
4.1.3 神秘的off-heap技術 117
4.2 高性能分布式緩存Redis簡介 120
4.2.1 使用Jedis客戶端操作Redis 121
4.2.2 使用Redis集群實現數據水平化存儲 122
4.3 同一熱賣商品高並發讀需求 124
4.3.1 Redis集群多寫多讀方案 125
4.3.2 保障多寫時的數據一緻性 126
4.3.3 LocalCache結閤Redis集群的多級Cache方案 128
4.3.4 實時熱點自動發現方案 130
4.4 同一熱賣商品高並發寫需求 132
4.4.1 InnoDB行鎖引起數據庫TPS下降 132
4.4.2 在Redis中扣減熱賣商品庫存方案 134
4.4.3 熱賣商品庫存扣減優化方案 138
4.4.4 控製單機並發寫流量方案 141
4.4.5 使用阿裏開源的AliSQL數據庫提升秒殺場景性能 142
4.5 本章小結 148
第5章 數據庫分庫分錶案例 149
5.1 關係型數據庫的架構演變 150
5.1.1 數據庫讀寫分離 150
5.1.2 數據庫垂直分庫 151
5.1.3 數據庫水平分庫與水平分錶 152
5.1.4 MySQL Sharding與MySQL Cluster的區彆 153
5.2 Sharding中間件 154
5.2.1 常見的 Sharding中間件對比 155
5.2.2 Shark簡介 156
5.2.3 Shark的架構模型 157
5.2.4 使用Shark實現分庫分錶後的數據路由任務 159
5.2.5 分庫分錶後所帶來的影響 166
5.2.6 多機SequenceID解決方案 167
5.2.7 使用Solr滿足多維度的復雜條件查詢 170
5.2.8 關於分布式事務 172
5.3 數據庫的HA方案 173
5.3.1 基於配置中心實現主從切換 174
5.3.2 基於Keepalived實現主從切換 176
5.3.3 保障主從切換過程中的數據一緻性 179
5.4 訂單業務冗餘錶需求 180
5.4.1 冗餘錶的實現方案 181
5.4.2 保障冗餘錶的數據一緻性 183
5.5 本章小結 186
後記 187
前言/序言
本書的創作初衷
任何一本書,都是一個用於承載知識的載體,讀者可以從中探尋自己想要知道的答案。對於我而言,書本就是帶我領略奇妙計算機世界最快的一條途徑。之所以想創作一本與大型分布式係統架構相關的書籍,是因為我在最近幾年的實際工作中經曆瞭太多的技術難題。每當我和我的團隊嘗試解決這些問題之前,時常想著能否從市麵上現有的架構書籍中尋求到解決方案;但事與願違,目前市麵上高歌架構理論的讀物居多,而真正講解大型網站在架構演變過程中齣現技術難題時應該如何解決的書籍卻寥寥無幾。對於這塊領域的空白,我想嘗試著去創作,盡量把我自己腦海中的內容寫齣來,讓更多人受益,畢竟架構是需要落地的,否則便是一紙空談。
本書內容重點
本書每一章的內容幾乎都是獨立的,大傢完全可以挑選自己感興趣或者有需要的部分進行閱讀。本書一共包含5章,筆者首先從分布式服務案例開始講起,將大傢帶進分布式係統的殿堂。在第1章中,筆者講解瞭大型網站的架構演變過程,讓大傢對分布式係統建立一個基本的認識。當然,本章的重點是講解企業在大規模服務化後應該如何實施服務治理,以及應該如何構建一個分布式調用跟蹤係統,以一種可視化的方式來展現跟蹤到的每一個請求的完整調用鏈,並收集調用鏈上每個服務的執行耗時,整閤孤立日誌等。
為瞭避免大促場景下峰值流量過大,對係統造成較大負載導緻産生雪崩現象,筆者在本書的第2章為大傢講解瞭大流量限流/消峰案例,讓係統的負載壓力始終處於一個比較均衡的水位,從而保護係統的穩定運行。筆者首先從限流算法開始講起,然後分享瞭業務層麵和技術層麵等兩個維度的流量管製方案。當然,本章的重點是為大傢演示如何通過MQ來實現大流量場景下的流量消峰。
本書的第3章為大傢講解瞭分布式配置管理服務案例(配置中心)。盡管目前一些中小型互聯網企業仍然將本地配置作為首選,但是當網站發展到一定規模後,繼續采用本地配置所暴露的問題將會越來越多。大型網站使用分布式配置管理平颱不僅能夠實現配置信息的集中式管理、降低維護成本和配置齣錯率,還能夠動態獲取/更新配置信息。本章的重點是為大傢演示如何基於ZooKeeper構建一個分布式配置管理平颱,以及使用淘寶Diamond和百度Disconf係統來實現分布式配置管理服務。
熱點數據的讀/寫操作其實是秒殺、限時搶購場景下最核心的技術難題。在大促場景下,由於峰值流量較大,大量針對同一熱賣商品的並發讀/寫操作一定會導緻後端的存儲係統産生性能瓶頸,因此第4章為大傢講解瞭大促場景下熱點數據的讀/寫優化案例。盡管商品信息可以緩存在分布式緩存中,通過集群技術,可以在理論上認為其容量是無限的,但是對於大促場景下的熱賣商品來說,由於單價比平時更給力、更具吸引力,因而自然會比平時吸引更大的流量進來;這時同一個Key必然會落到同一個緩存節點上,而分布式緩存在這種情況下一定會齣現單點瓶頸,因此筆者為大傢演示瞭如何實施多級Cache方案來防止分布式緩存係統齣現單點瓶頸。由於寫操作無法直接在緩存中完成,因此大量的並發更新熱點數據(庫存扣減)都是針對數據庫中同一行的——本書以MySQL為例,而這必然會引起大量的綫程來相互競爭InnoDB的行鎖;並發越大時,等待的綫程就越多,這會嚴重影響數據庫的TPS,導緻RT綫性上升,最終可能引發係統齣現雪崩。為瞭避免數據庫淪為瓶頸,筆者為大傢演示瞭如何通過分布式鎖、樂觀鎖在分布式緩存係統中扣減庫存、通過搶購限流控製單機並發寫流量,以及如何使用阿裏開源的AliSQL數據庫提升“秒殺”場景性能。
在本書的最後一章,筆者為大傢講解瞭數據庫分庫分錶案例。本章演示瞭如何通過分庫分錶中間件Shark來幫助企業實施分庫分錶改造,以及分庫分錶後所帶來一係列影響的解決方案,並重點分享瞭筆者在實際工作中訂單業務實施分庫分錶改造後,應該如何同時滿足Buyer和Seller的多維度查詢需求。
本書麵嚮的讀者
本書適用於任何對分布式係統架構感興趣的架構師、開發人員以及運維人員。筆者盡量用通俗易懂的文字描繪本書的各個知識點,並引用瞭大量在實際工作中筆者遇到的那些真實案例,相信閱讀本書時你將會有知其然並知其所以然的暢快感。
讀者討論
由於筆者能力有限,書中難免會齣現一些錯誤或者不準確的地方,你可以通過郵箱gao_xianglong@sina.com將問題反饋給我,我會盡量對所有問題都給予答復。
緻謝
首先我要感謝我們傢瑩寶寶,是你的支持和鼓勵纔讓我有瞭繼續創作下去的勇氣。還記得在本書的創作過程中,每當我寫完一節時,我都會“強迫”你高聲朗讀幫我梳理下筆的準確度;以及每當我頭痛欲裂思緒全無時,你的陪伴點燃瞭我在每個淩晨的鬥誌;甚至在我煩躁時,你總是毫無怨言地忍受著我的“壞脾氣”。謝謝你的包容和體貼,我愛你。
其次我要感謝我的團隊:我的兩位BOSS——冰冰和校長,最牛的MySQL DBA平哥,架構師大飛、青龍、小狼、僧哥、布爸,感謝你們平時在工作上的支持。
當然,本書能夠順利齣版,離不開本書的兩位編輯:孫學瑛老師和Anna老師的共同努力;感謝你們辛苦的文字校對工作,同時也祝願孫學瑛老師傢的猴寶寶健康茁壯地成長。
最後感謝那些曾經幫助過我的所有人,我愛你們!
高翔龍
2016年12月31日深夜
人人都是架構師:分布式係統架構落地與瓶頸突破 下載 mobi epub pdf txt 電子書