雙十一雙十二-秒殺活動設計

關鍵詞:CDN、公有云、交易限流

熔斷控制、分佈式緩存、悲觀鎖

如何設計秒殺

對於大促時候的秒殺活動,一般運營會配置靜態的活動頁面。

兩個目的:

  • 1、為了便於在各種社交媒體分發。
  • 2、是因為秒殺活動頁的流量是大促期間最大的,通過配置成靜態頁面可以將頁面發佈在公有云上動態的橫向擴展

高併發設計思路

⑴將秒殺活動的靜態頁面,提前刷新到CDN節點,通過CDN節點的頁面緩存來緩解訪問壓力和公司網絡帶寬,CDN上緩存js、css和圖片;

⑵將活動H5頁面部署在公有云的web server上,使用公有云的好處就是能夠根據活動的火爆程度動態擴容而且成本較低,同時將訪問壓力隔離在公司系統外部。

⑶在提供真正商品秒殺業務功能的app server上,需要進行交易限流熔斷控制,防止因為秒殺交易影響到其他正常服務的提供。

在限流和熔斷方面使用了hystrix,在核心交易的controller層通過hystrix進行交易併發限流控制,當交易流量超出我們設定的限流最大值時,會對新交易進行熔斷處理固定返回靜態失敗報文。

⑷服務降級處理,除了限流和熔斷控制,我們還設定了降級開關,對於首頁、購物車、訂單查詢、大數據等功能都會進行一定程度的服務降級。

對首頁原先動態生成的大數據頁面佈局降級為所有人看到的是一樣的頁面、購物車也會降級為不在一級頁面的tabbar上的購物車圖標上顯示商品數量、歷史訂單的查詢也會提供時間週期較短的查詢、大數據商品推薦也會提供一樣的商品推薦,通過這樣的降級處理能夠很好的保證各個系統在大促期間能夠正常的提供最基本的服務,保證用戶能夠正常下單完成付款。

如何防止超賣現象的發生

我們日常的下單過程中防止超賣一般是通過在數據庫上實施樂觀鎖來完成,使用樂觀鎖雖然比for update這種悲觀鎖方式性能要好很多,但是還是無法滿足秒殺的上萬併發需求,我們的方案其實也很簡單實時庫存的扣減在緩存中進行,異步扣減數據庫中的庫存,保證緩存中和數據庫中庫存的最終一致性。

在這個方案中我們使用的分佈式緩存是redis,使用了redis集群方案穩定性和高可用方面還是比較有保證的,因為redis是單線程寫,所以也不用擔心線程安全的問題,redis自身就能夠保證數據的強一致性,在下單的事務中包含了實時扣減緩存中的庫存和異步發送隊列,由隊列處理器再異步從隊列中取出訂單根據訂單信息扣減庫存系統數據庫中的商品數量。

雙十一雙十二-秒殺活動設計



分享到:


相關文章: