真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

在2020年的淘寶、天貓雙11的活動中最終的成交額達到了4982億元!這是一個巨大的成交量,那麼面對如此高的並發量,淘寶的系統架構是怎麼樣設計的呢?

本篇將會通過基礎入門、資料庫、消息隊列、分佈式服務、維護、實戰幾篇來深入探討萬億級並發系統設計!

基礎入門篇

主要內容:

它的通用設計方法是什麼?

我們為什麼一定要這麼做?

如何提升系統性能?

系統怎樣做到高可用?

如何讓系統易於擴展?

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

工作中經常能用到 TCP/IP 協議,它把網絡簡化成了四層,即鏈路層、網絡層、傳輸層和應用層。每一層各司其職又互相幫助,網絡層負責端到端的尋址和建立連接,傳輸層負責端到端的數據傳輸等,同時相鄰兩層還會有數據的交互。這樣可以隔離關注點,讓不同的層次專注做不同的事情。

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

資料庫篇

主要內容:

如何減少頻繁創建資料庫連接的性能損耗?

查詢請求增加時,如何做主從分離?

寫入數據量增加時,如何實現分庫分表?

如何保證分庫分表後ID的全局唯一性?

在高並發場景下,資料庫和NoSQL如何做到互補?

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

對資料庫進行垂直拆分是一種偏常規的方式,這種方式其實你會比較常用,不過拆分之後,雖然可以暫時緩解存儲容量的瓶頸,但並不是萬事大吉,因為資料庫垂直拆分後依然不能解決某一個業務模塊的數據大量膨脹的問題,一旦你的系統遭遇某一個業務庫的數據量暴增,在這個情況下,你還需要繼續尋找可以彌補的方式。

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

緩存

主要內容:

資料庫成為瓶頸後,對動態數據的查詢要如何加速?

如何選擇緩存的讀寫策略?

緩存如何做到高可用?

緩存穿透了怎麼辦?

靜態資源如何加速?

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

3. 多副本

其實,主從方式已經能夠解決大部分場景的問題,但是對於極端流量的場景下,一組 Slave通常來說並不能完全承擔所有流量,Slave 網卡帶寬可能成為瓶頸。

為瞭解決這個問題,我們考慮在 Master/Slave 之前增加一層副本層,整體架構是這樣的:

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

消息隊列篇

主要內容:

秒殺時如何處理每秒上萬次的下單請求?

如何保證消息僅僅被消費一次?

如何降低消息隊列系統中消息的延遲?

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

分佈式服務篇

主要內容:

每秒1萬次請求的系統要做服務化拆分嗎?

微服務化後,系統架構要如何改造?

10萬QPS 下如何實現毫秒級的服務調用?

分佈式系統如何尋址?

橫跨幾十個分佈式組件的慢請求要如何排查?

怎樣提升系統的橫向擴展能力?

系統的門面要如何做呢?

跨地域的分佈式系統如何做?

如何屏蔽服務化系統的服務治理細節?

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

Service Mesh 是如何工作的

1. 什麼是 Service Mesh

Service Mesh
主要是處理服務之間的通信,它的主要實現形式就是在應用程式同主機上部署一個代理程序,一般來講,我們將這個代理程序稱為「Sidecar(邊車)」,服務之間的通信也從之前的,客戶端和服務端直連,變成了下面這種形式:

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

在這種形式下,RPC 客戶端將數據包先發送給與自身同主機部署的 Sidecar,在 Sidecar中經過服務發現、負載均衡、服務路由、流量控制之後,再將數據發往指定服務節點的Sidecar,在服務節點的 Sidecar
中,經過記錄訪問日誌、記錄分佈式追蹤日誌、限流之後,再將數據發送給RPC服務端。

這種方式,可以把業務代碼和服務治理的策略隔離開,將服務治理策略下沉,讓它成為獨立的基礎模塊。這樣一來,不僅可以實現跨語言,服務治理策略的復用,還能對這些Sidecar做統一的管理。

目前,業界提及最多的的Service Mesh 方案當屬istio, 它的玩法是這樣的:

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

維護篇

主要內容:

服務端監控要怎麼做?

用戶的使用體驗應該如何監控?

怎樣設計全鏈路壓力測試平台?

成千上萬的配置項要如何管理?

如何屏蔽非核心繫統故障的影響?

高並發系統中我們如何操縱流?

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

如何搭建全鏈路壓測平台

搭建全鏈路壓測平台,主要有兩個關鍵點。

一點是流量的隔離。由於壓力測試是在正式環境進行,所以需要區分壓力測試流量和正式流量,這樣可以針對壓力測試的流量做單獨的處理。

另一點是對風險的控制。也就是,儘量避免壓力測試對於正常訪問用戶的影響,因此,一般來說全鏈路壓測平台需要包含以下幾個模塊:

流量構造和產生模塊;

壓測數據隔離模塊

系統健康度檢查和壓測流量干預模塊。

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

實戰篇

主要內容:

面對海量數據的計數器要如何做?

50萬QPS下如何設計未讀數系統?

通用信息流系統的推模式要如何做?

通用信息流系統的拉模式要如何做?

真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南

總結

文章篇幅有限,樓主就不進行過多的展示了,完整版已經整合完畢,需要閱讀學習完整版PDF,麻煩轉發一下文章,然後私信我【999】三個數字~

來源:kknews真就硬抗雙11高並發了唄!淘寶Java萬億級並發系統設計指南