你們好,我是崔皓。 很高興有這樣一個機會和你們認識。我在IT行業從事軟件開發工做十餘年了,足跡涵蓋企業服務,互聯網,企業數字化轉型等。工做之餘熱愛閱讀和學習,但願能經過這個專欄和你們成爲朋友。
本次專欄要給你們分享的是「如何設計秒殺系統」,專欄共包括15章,本章是第一章。
今天會給你們介紹如下內容:前端
秒殺一般是電商網站按期舉辦的活動,這個活動有明確的開始和結束時間,並且參與互動的商品是事先定義好的,商品的個數也是有限制的。同時會提供一個秒殺的入口,讓用戶經過這個入口進行搶購。算法
總結一下秒殺場景的特色:數據庫
秒殺場景的特徵就決定了,秒殺系統與平常系統的不同。秒殺系統是大流量請求在短期內集中處理,而平常系統的請求處理更加平滑和平均。秒殺場景不會常常發生,它有實效性,有具體的開始和結束時間。再者秒殺系統是針對具體的商品或者商品分類進行的,資源的範圍相對於平常系統來講也比較小。鑑於這些不一樣點,秒殺系統須要和平常系統須要分開考慮,這就是下面要提到的隔離的設計思路。緩存
因爲秒殺活動是有計劃的,而且在短期內會爆發大量的請求。爲了避免影響平常業務系統的正常運行,咱們須要把它和現有的系統作隔離。這樣即使秒殺系統出現了問題,也不會影響平常系統的正常工做。要不就「偷雞不成反失一把米了」,所以在設計秒殺系統的時候能夠從如下幾個方面來思考隔離的問題。服務器
業務隔離
既然秒殺是一場活動,那它必定和常規的業務不一樣,咱們能夠把它當成一個單獨的項目來看。在活動開始以前,最好設計一個「熱場」。「熱場」的形式多種多樣,例如:分享活動領優惠卷,領秒殺名額等等。「熱場」的形式不重要,重要的是經過它獲取一些準備信息。例如:有可能參與的用戶數,他們的地域分佈,他們感興趣的商品。爲後面的技術架構提供數據支持。別小看這些數據,經過這些數據能夠預估出秒殺當天的流量,併發數等信息。並且能夠做爲壓力測試數據來源的一部分,協助測試系統的可用性。網絡
應用隔離
如今應用的部署多采用分佈式或者微服務的架構,經過容器和服務編排的方式部署方式比較常見。建議分配給秒殺系統專門的系統資源,來應對高併發。咱們能夠將原來平常系統中的服務在秒殺系統中複用,也能夠爲秒殺系統設計專門的服務。衆所周知一個系統中包含服務數量,少則幾十個,多則上百個。若是爲了秒殺系統複製一套,恐怕成本過高。這裏須要區分,核心功能、支撐功能和通用功能。對於須要併發讀寫的功能就是秒殺系統的核心功能,例如:商品詳情,下單等。這些功能的服務能夠專門提供一套,作水平擴展。針對一些支撐功能和通用功能的服務,例如配置信息,用戶評論。建議不作擴展,只須要作好熔斷和降級的準備,使之不影響核心功能就好。多線程
流量隔離
前面的特徵分析中提到了,秒殺系統會在短期內迎來巨大流量。若是秒殺系統和平常系統共用一個接入層,那麼對應的負載均衡器也會接受海量的請求。不管是硬件負載均衡仍是軟件負載均衡,其可以承受的流量都是有限制的。超過了這個流量,系統會進行限流操做,將多餘的流量置之門外。若是此時由於秒殺系統的流量增長,致使平常系統的流量瓶頸是得不償失的。因此這裏須要對流量進行隔離,若是共用負載均衡須要設置秒殺系統使用的流量上限。根據秒殺系統特有的請求頭判斷流入的請求是來自秒殺請求仍是平常系統請求。同時也能夠根據用戶ID,請求IP、請求的地域來作隔離。架構
說了完了隔離的思路,再來聊聊如何設計秒殺系統。因爲秒殺的場景不一樣,面向的用戶數量不一樣,參與秒殺的資源數量不一樣,每一個公司的現有系統架構千差萬別,而且硬件配置和網絡環境也各有不一樣。沒法提出一個統一的架構,只能針對秒殺系統中出現的問題進行解決。回到秒殺場景的特徵,實際上咱們要解決的就是短期對稀缺資源,高併發讀寫和結果可靠性的問題。解決這些問題的方法,在平時的系統架構中也會用到,只是在秒殺系統中會更有表明性、更極端。總結下來主要是緩存、限流、熔斷、分佈式服務、分佈式存儲、數據一致性、分佈式可靠性、系統的監控。可是這些問題涉及到系統架構的方方面面,單獨來說你們都能理解,如何經過系統的方式給你們介紹,可以從架構的角度去看秒殺系統須要考慮哪些問題。這裏咱們經過架構分層的方式,逐層講解如何解決秒殺系統的問題。專題總共分來7個部分共15個章節來說述。最後總結爲四橫三縱。併發
專欄每章都會按照提出問題,講解原理,實踐落地的方式進行推動。說白了就是是什麼->爲何->怎麼辦。儘可能用大白話講解複雜的問題。每段理論分析的部分會配上圖解的方式幫助你們理解和記憶。由於上面提到的這些知識點,可能在目前還用不上,不過能夠先了解,做爲知識儲備。等須要的時候在回看文章,那麼圖就是記憶的最好媒介,俗話說一圖勝千言。下面我就把每一個章節的主題列出來供你們查閱。負載均衡