12306系統架構優化

2021-08-08 21:30:41 字數 1977 閱讀 8582

coolshell陳皓優化方案

原文:一、業務複雜度比對

二、瓶頸

庫存業務的操作模式基本是這樣的:

1)佔住庫存

2)付款

3)扣除庫存

這個過程中,是要對資料進行加鎖的,高併發下資料的一致性保證非常之難。

併發究竟有多大呢?

12306的業務特點是,突然放票,大家去搶。幾十分鐘內,馬上幾千萬的訪問量,非常恐怖(據說高峰訪問是10億pv,集中在早上8點到10點)。

結論:高併發下資料一致性是12306的痛點

三、前端優化

(1)負載均衡:dns+cdn;

(2)減少頁面鏈結數:減少瀏覽器http併發連線,合併js,合併css,合併圖示

(3)減少頁面大小:頻寬有限,壓縮,分離服務

(4)頁面靜態化:同一時間查詢相同車次的結果頁面都是一樣的,甚至可將靜態化的檔案放入/dev/shm下

(5)查詢優化:票務結果顯示「有/無」,而非具體數字,能大大簡化邏輯

(6)前端快取:直接快取動態頁面

四、後端優化

(1)資料冗餘:乙個資料可以冗餘存在多個表裡,代價是一致性

(2)資料映象:replication,仍然有一致性問題

(3)資料分割槽:分庫,分表,分欄位

(4)負載均衡:靜態分流,動態分流

(5)非同步化、throttle(節流,一般需要排隊)、批量處理

五、總結

無論如何,系統一定要能水平擴充套件,加機器能提高效能。

雲風的blog優化方案

原文:一、核心思想:排隊論,餐館裡拿到號的人才能進來吃飯

(1)生成一些簽名過的「號」給排隊者(「號」不可偽造)

(2)乙個32g大陣列,迴圈佇列,將「號」放入隊尾,並hash記錄「號」在佇列中的index

(3)利用一次hash查詢,由index和head可知排隊者前面有多少人

(4)如果排隊者前面沒有人了,好吧,給你個簽名過的session,進去吃飯吧(「session不可偽造」)

二、注意點

(1)刷「號」也是沒用的,不能讓你提前

(2)拿到「號」的人心切呀,急於知道他前面排了多少人,便反覆查詢,反覆查詢,可以設定閾值,查詢頻率過高,則「票」作廢,這樣以降低大家查詢的頻率

(3)session有有效期,拿到session不去吃飯,重新排隊

三、總結

(1)拿到session後才能走正常購票流程,此時效能已經不是瓶頸,大不了多開幾個視窗,不正確或者超時的session立馬可以斷掉

(2)排隊由「號」拿session可以精確控制真正進入系統的流量,而排號的系統又是記憶體的高效能簡流程操作

(3)排隊的人只要看到自己前面的人公平的在減小,也會安心等待

曹政的和諧blog優化方案

原文:( sk注:caoz同學很自信,2人2周,40臺伺服器搞定,大家一起看下他的方案)

一、業務抽象

(1)車次查詢+餘票顯示,日均10億pv,這是主要矛盾

(2)註冊登入,日均幾千萬pv

(3)下單,日均幾百萬pv

不涉及複雜的關係操作,不涉及推拉結構、不涉及革新展示。

二、優化方向

(1)儲存kv化,例如redis:基本所有查詢都是直線式的,可以用redis的集合或者列表搞定

(2)後端查詢結果快取化:

2.1)快取符合要求的車次

2.2)快取餘票

2.3)快取有票/無票狀態

(3)前端快取+防刷

(4)io優化,幾百萬的訂單而已

三、總結

快取(查詢結果靜態化)是整個優化方案的核心

這個手段極其適用於符合這兩個要求的場景:

(1)查詢頻率遠大於更新頻率

(2)所有使用者在同一時間查詢同一條件,返回結果都相同

四、引文

caoz在上文中引用了「楊建」**cache加速的文章,

楊建的blog-「**加速-cache為王」

鏈結如下:

原文:sk個人感覺,雲風的「排隊論」優化簡單可信。

12306購票系統後端優化

後端效能優化技術 前面討論了前端效能的優化技術,於是前端可能就不是瓶頸問題了。那麼效能問題就會到後端資料上來了。下面說幾個後端常見的效能優化技術。一 資料冗餘 關於資料冗餘,也就是說,把我們的資料庫的資料冗餘處理,也就是減少表連線這樣的開銷比較大的操作,但這樣會犧牲資料的一致性。風險比較大。很多人把...

12306的優化思考

一 場景分析 1 平時訪問量不高,但是春運幾天會出現瞬間高峰 2 訂單的事務性要求較高 3 全國開放,並且票數要精準 4 瞬間訪問量大 二 調優可行性方案 1 資料層次 請使用oracle,在資料穩定性以及千萬級別的資料量上還是比較有保障 2 cache層次 3 前端處理 4 業務層次 5 事務處理...

單點系統架構的優化

明明架構要求高可用,為何系統中還會存在單點?回答 單點master的設計,會大大簡化系統設計,何況有時候避免不了單點 在哪些場景中會存在單點?先來看一下乙個典型網際網路高可用架構。典型網際網路高可用架構 2 負載均衡層,nginx是整個服務端的入口,負責反向 與負載均衡工作 3 站點層,web se...