聊聊秒殺系統的設計(一)
- 2022 年 9 月 16 日
- 筆記
一、秒殺是什麼?
秒殺系統的業務邏輯和複雜程度都被大眾熟知,其實主要解決的問題有兩個——高並發和一致性。其中高並發又分為讀和寫,要減少用戶從服務端讀取數據,控制數據的傳輸大小;寫則需要獨立處理資料庫。一致性是指保證庫存數據的準確,超賣和超買都是不能出現的。至於高可用會在最後介紹,通過高可用可以保證流量超出預期或其他外情況發生時,秒殺活動的順利完成。
綜上所述,秒殺系統是一個要滿足高並發、強一致、高可用的分散式系統。
二、秒殺架構的設計要素
針對秒殺系統的架構設計需要考慮以下幾個要素:
1.減少讀的次數
這裡提到的讀不止是數據,還有靜態資源的讀取。
為什麼要減少讀的次數呢,因為網路傳輸是需要時間的,無論是請求、處理、響應都需要伺服器處理。如果存在必須讀取的情況,要減小數據請求和響應的大小,數據在資料庫和各種服務之間調用的過程中存在序列化和反序列化的過程,這是很消耗資源的。
靜態資源的讀取比較常見的優化手段就是合併CSS和JS文件,要保證請求的靜態文件在統一域名中,並減少訪問次數。每次HTTP請求都存在網路傳輸,減少耗時是很有必要的。
2.減少服務調用節點
這裡提到的節點是指用戶請求後,直至響應完成所經歷的服務節點。不同節點間,尤其是不同機架,不同機房節點間的服務調用不僅僅耗時,還會降低秒殺的可靠性。
3.減少不必要的秒殺非核心業務
秒殺業務可以根據重要程度賦予權重,減少低權重服務的調用,以防止高權重系統被拖垮。秒殺活動進行時,有很多不是秒殺核心業務的數據可以通過降低優先順序進行優化,例如支付、通知等功能。
以上的原則並不是絕對的,只是在設計中努力優化的方向。
三、秒殺架構的搭建思路
對於並發量訪問較大的秒殺架構,為了提高架構性能和穩定性,需要注意幾點:秒殺要獨立於其他系統,無論在研發和部署環節都要獨立,這樣有助於整體平台的穩定性,也有利於秒殺系統的優化。秒殺的數據,尤其是核心數據單獨放到快取系統中,提高並發,對於非核心數據可以放到本地,減少請求服務的次數。秒殺的頁面要實現動靜分離,把頁面刷新頻率降低。
另外,從安全性角度考慮,秒殺的驗證必不可少,限流保護更是重中之重。
總結
以上提到的都是秒殺架構的概述,核心是要構建一個高並發、強一致、高可用的分散式系統,在不同的業務和基礎設施下進行權衡,設計最適合自己的秒殺系統。
後續文章中,會對上面提到的技術環節細化,也會對不同技術技術場景對比,幫你設計出適合的秒殺系統。