電商營銷中少不了大促,根據長期的工做經驗,總結了大促系統核心須要關注如下幾個點:
1.隔離
絕大多數公司的大促類需求都是下單鏈路的旁路,就是說要作到大促失敗是不影響下單的,
這就要求大促系統作到隔離,隔離主要指的是中間件及機器的隔離,對於中間件,數據庫,q
緩存,都不該該跟其餘人混合部署,我的以前是吃過大虧的,還有機器,如今不少都是虛擬機,
可是隔離作的不好,若是跟下單鏈路公用宿主機,就有可能形成下單抖動
2.sharding
理論上來說系統的qps是沒有上限的,只要是分佈式的架構.在大促中系統中q和數據庫必定要sharding
q在在大促是必不可少的,用來削峯,異步和解耦,在異步場景中流量是首先到q的,若是作很差sharding
q的消息堆積能力就會大打折扣;還有一個是數據庫,最脆弱的就是數據庫,可是若是數據庫分庫分表作的好
數據庫就不會成爲瓶頸
3.限流
限流技術如今已經有通用的解決方案,好比阿里基於Sentinel的限流及一些基於網關層的限流
工程中主要是這樣用的,理論上主要分爲計數法和桶法
計數法包括固定計數法和滑動窗口計數法
桶發放主要是漏桶算法和令牌桶算法,
漏桶算法能夠簡單理解爲是生產者/消費者模式在流量上的應用,簡單高效
令牌桶算法生產者以恆定的速度生產令牌放到令牌桶中(決定了QPS閾值)
每一個請求去獲取令牌,獲取到就執行,獲取不到則觸發限流
4.錯峯
在削峯填谷的思路下任何形式的錯峯都是有必要的,前端random也是一種思路,打撒後把流量放到後端,
在業務層面能錯峯的思路更多,好比玩遊戲,每一個人有不一樣的遊戲時間等
5.奧卡姆剃刀原理
要對本身的大促場景有清晰的認知,遵循奧卡姆剃刀原理,就是簡單就是有效原理,
舉個例子,大促場景下是否是全部的扣減庫存都要在redis等中間件中扣除,不少是沒有必要的,
只要不是單點問題或者熱點數據,不存在短時頻繁更新數據庫的場景,在DB操做徹底夠了。好比電商店鋪維度的搶購
數據庫扣減庫存就夠了,天貓也是這麼處理的。可是若是是海量用戶搶購一個商品這種場景,必定要用redis等中間件,扣減以前還須要作預熱前端