close

1號店11.11:秒台中家電批發商殺排隊系統設計理念

基於近年在微服務基礎架構方面的實戰經驗和平時的學習積累,我想總結並提出一些構建微服務 2.0 技術棧的選型思路,供各位在一線實戰的架構師、工程師參考借鑒。




基於近年在微服務基礎架構方面的實戰經驗和平時的學習積累,我想總結並提出一些構建微服務 2.0 技術棧的選型思路,供各位在一線實戰的架構師、工程師參考借鑒。




增強學習和人類學習的機制非常相近,DeepMind已經將增強學習應用於AlphaGo以及Atari遊戲等場景當中。作為智能教育領域的引領者,阿凡題研究院首次提出瞭一種基於DQN(Deep Q-Network)的算術應用題自動求解器,能夠將應用題的解題過程轉化成馬爾科夫決策過程,並利用BP神經網絡良好的泛化能力,存儲和逼近增強學習中狀態-動作對的Q值。實驗表明該算法在標準測試集的表現優異,將平均準確...




在數字化轉型的過程中,越來越多的企業開始意識到平臺思維是通過技術解鎖核心業務能力的關鍵。傳統企業在數字化轉型過程中,雖然背負著包括遺留系統在內的歷史包袱,但歷史的資產包括數據、品牌和客戶關系也都是轉型中的競爭優勢。通過數字化平臺戰略,圍繞歷史優勢資產構建一個生態系統,釋放內部創新活力,促進外部生態合作,是企業數字化轉型的不二選擇。企業的 IT 組織如何在數字化平臺戰略下構建新的組織結構...




Andrew Burt在這篇文章中介紹瞭在GDPR實施之後,歐盟企業在收集、存儲和使用用戶數據時需要註意的事情,企業要通過GDPR基本測試需要做些什麼,以及如何把握時機改進企業的數據監管能力。




電商中為瞭吸引顧客、聚集人氣,經常會策劃一些秒殺活動。活動中售賣的商品,要麼價格遠低於市場價格,要麼比較稀缺(如一些新發佈的商品)。這些商品電商一般都會限量、限時銷售。無疑這些商品對消費者的誘惑力是巨大的,消費者蜂擁而來,往往幾秒鐘就可以將商品搶購一空。而對於電商系統來說可能更多的是考驗。

2、傳統秒殺系統的痛點

首先,秒殺的場景決定瞭秒殺是一場速度的比拼,也就是俗話說的 手快有、手慢無 。大傢都爭著在活動開始後,第一時間將商品搶到,完成下單。因此秒殺活動開始的一瞬間會有大量的流量湧入,幾倍、甚至於十幾倍的流量對系統的沖擊不可謂不大。如果系統沒有足夠的capacity或應對措施,很可能就被瞬時高流量給壓垮瞭。

其次,突如其來的高流量,給系統各個模塊都來瞭一連串的壓力,系統可能會因此變慢,而且可能會彼此影響,影響可用性。比如:數據庫更新同一個商品庫存,需對同一行記錄加鎖,隨著並發的壓力逐漸增大,數據庫更新的性能是逐漸下降的。從而引起提供庫存service的應用服務性能下降,連鎖的影響到下單service的性能,最終反饋到消費者的可能就是整個網站購物流程性能差、響應慢。而面對響應慢的系統,很多消費者可能采取反復刷新,多次嘗試,這無疑又增大瞭對系統的壓力。


還有,上述種種給消費者帶來的往往是體驗上的痛苦。如:網站響應慢,點擊搶購按鈕沒反應。好不容易可以操作瞭,卻發現秒殺活動已經結束,消費者的參與感比較差。久而久之,可能就對此類活動失去瞭興趣。

3、1號店秒殺系統的設計理念

基於以上秒殺場景下的痛點,1號店的秒殺排隊系統在設計時主要考慮以下幾點:


限流:當秒殺活動開始後,隻有少部分消費者能搶購到秒殺商品,意味著其實大部分用戶的流量傳達到後臺服務後都是無效。如果能引導這大部分的流量,不讓這大部分的流量傳達到後臺服務,其實對我們系統的壓力就很小瞭。因此設計思路之一就是,僅讓能成功搶購到商品的流量(可以有一定餘量)進入我們的系統。

削峰:進入系統的有效流量雖然總量不一定是很大的,但卻是在很短的時間內湧入的,因此會存在很高的瞬時流量峰值。總量相同的流量在1秒鐘進入系統,和在10分鐘均勻地進入系統,對系統的沖擊是相差很大的。高峰值的流量往往能將系統壓垮。因此另一個設計思路是,如何將進入系統的瞬時高流量台中富士通冷氣拉平,使得系統可以在自己處理能力范圍內,將所有搶購的請求處理完畢。

異步處理:傳統的系統對於請求是同步處理的,即收到請求後立即處理並把結果返回給用戶。我們的系統有瞭削峰的設計後,請求不是被立刻處理的,因此就要求我們能將同步的服務改造成異步的。

可用性:我們設計時始終把系統的可用性放在重要的位置,針對系統可能出現的各種狀況,都盡最大程度地保證高可用。

用戶體驗:系統設計一定要充分考慮用戶體驗。消費者點擊搶購按鈕後,無論是否能搶到商品,期望是能得到及時的反饋。系統上發生任何故障也要盡可能的保證用戶體驗的損害減到最小。


排隊模塊:負責接收用戶的搶購請求,將請求以先入先出的方式保存下來。每一個參加秒殺活動的商品保存一個隊列,隊列的大小可以根據參與秒殺的商品數量(或加點餘量)自行定義。排隊模塊還負責提供一系列接口,如:給已進入隊列的用戶查詢下單狀態的接口,給調度模塊拉取請求的接口,服務模塊回寫業務處理狀態的接口等。

調度模塊:負責排隊模塊到服務模塊的動態調度,不斷檢查服務模塊,一旦處理能力有空閑,就從排隊隊列頭上把用戶訪問請求調入服務模塊。並負責向服務模塊分發請求。這裡調度模台中家電批發塊扮演一個中介的角色,但不隻是傳遞請求而已。它還擔負著調節系統處理能力的重任。我們可以根據服務模塊的實際處理能力,動態調節向排隊系統拉取請求的速度。作用有點類似水壩的閘門,當下遊幹旱時就打開閘門多放些水,當下遊洪澇時,就放下閘門少放些水。

服務模塊:是負責調用真正業務處理服務,並返回處理結果,並調用排隊模塊的接口回寫業務處理結果。我們設計這個模塊,是為瞭和後面真正的業務處理服務解耦。目前我們的系統不隻支持秒殺搶購這種業務場景,後續有其他適用於排隊系統的業務都可以接入,如:領取抵用券等等。同時我們也可以針對後面業務系統的處理能力,動態調節服務模塊調用後面業務處理服務的速度。


任何系統都不可能一帆風順,但我們要能在出現錯誤時仍舊保證系統的高用性和良好的客戶體驗。舉幾個簡單的例子,比如服務模塊調用後面服務時,出現調用服務超時怎麼辦?對此我們設計瞭對於超時的請求,可以重試的機制。再比如,如果後面真正的業務處理系統宕機怎麼辦?如果是傳統系統的話,可能就面臨系統無法使用的尷尬。而我們的系統已經是異步的瞭,因此加入排隊隊列的用戶請求,在業務處理系統恢復後都可以得到處理。隻要我們在前端給用戶以友好的交互、提示,系統還是能提供一定質量服務的。

6、用戶交互

因為我們的系統設計成異步的,因此消費者不再是像以前一樣同步地去等待反饋。消費者需要一個途徑來獲取搶購的狀態和進度。我們的主體流程大體上分為幾個階段:


當等待人數大於500人,頁面提示:排在您前面的人超過500位;

當等待人數小於等於500人,頁面提示:您已擠進第***位;

當等待時間大於等於1分鐘,頁面提示:剩餘時間約*分鐘。每次以分鐘倒計時。

當等待時間小於1分鐘,頁面提示:預計剩餘*秒。

搶購成功,後續跳轉到訂單支付頁面


聯毅家電生活館|台中南屯家電行|台中南屯家電行推薦

當然我們還提供瞭一些分支流程的提示與處理,如果大傢感興趣,更詳細的情況可以到1號店親自參與秒殺活動來體驗。

目前我們的秒殺排隊系統已經應用於1號店的歷次大促,並取得瞭良好的效果,受到業務運營和消費者一致的好評。優秀的系統一定是建立在對業務透徹理解的基礎上,針對業務的場景與痛點,結合現有的技術有針對性的提供解決方案。同時技術上成功的系統,往往也推動著業務的發展,給業務更好的支撐和推動。


您需要 註冊一個InfoQ賬號 或者

登錄 才能進行評論。在您完成註冊後還需要進行一些設置。

獲得來自InfoQ的更多體驗。


有兩個問題有點疑惑:1)限流是在什麼環節做的,nginx、web服務器還是更上一層呢?2)排隊模塊針對一個分佈式系統而言,隊列是通過緩存實現的,還是類似於商品台中南屯家電行id取模呢?


排隊模塊:將所有客戶端請求數據插入redis或其他緩存數據庫,其中用戶的提示也來源於緩存數據庫中查詢。
調度模塊:啟動定時任務取緩存數據庫中數據從先到後去逐條調用業務接口進行庫存鎖定。


其實大傢最想瞭解的是,怎樣限流,怎樣削峰的。後臺服務排隊啊,調度什麼的大傢都知道,最想瞭解的就是一下子湧入這麼多請求到web服務器,web服務器是否能夠承受這麼大的流量。更關註前面的部分,而不是很後端的部分。






我們發現您在使用ad blocker。

我們理解您使用ad blocker的初衷,但為瞭保證InfoQ能夠繼續以免費方式為您服務,我們需要您的支持。InfoQ絕不會在未經您許可的情況下將您的數據提供給第三方。我們僅將其用於向讀者發送相關廣告內容。請您將InfoQ添加至白名單,感謝您的理解與支持。
83370DF35BA9F6B1
arrow
arrow
    創作者介紹
    創作者 quprp05846 的頭像
    quprp05846

    大衛的採購清單

    quprp05846 發表在 痞客邦 留言(0) 人氣()