精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

思考 | 一文說透秒殺系統如何設計

開發 架構
秒殺大家都不陌生。自2011年首次出現以來,無論是雙十一購物還是 12306 搶票,秒殺場景已隨處可見。簡單來說,秒殺就是在同一時刻大量請求爭搶購買同一商品并完成交易的過程。從架構視角來看,秒殺系統本質是一個高性能、高一致、高可用的三高系統。

前言

秒殺大家都不陌生。自2011年首次出現以來,無論是雙十一購物還是 12306 搶票,秒殺場景已隨處可見。簡單來說,秒殺就是在同一時刻大量請求爭搶購買同一商品并完成交易的過程。從架構視角來看,秒殺系統本質是一個高性能、高一致、高可用的三高系統。而打造并維護一個超大流量的秒殺系統需要進行哪些關注,就是本文討論的話題。

整體思考

首先從高維度出發,整體思考問題。秒殺無外乎解決兩個核心問題,一是并發讀,一是并發寫,對應到架構設計,就是高可用、一致性和高性能的要求。關于秒殺系統的設計思考,本文即基于此 3 層依次推進,簡述如下:

  • 高性能。 秒殺涉及高讀和高寫的支持,如何支撐高并發,如何抵抗高IOPS?核心優化理念其實是類似的:高讀就盡量"少讀"或"讀少",高寫就數據拆分。本文將從動靜分離、熱點優化以及服務端性能優化 3 個方面展開。
  • 一致性。 秒殺的核心關注是商品庫存,有限的商品在同一時間被多個請求同時扣減,而且要保證準確性,顯而易見是一個難題。如何做到既不多又不少?本文將從業界通用的幾種減庫存方案切入,討論一致性設計的核心邏輯。
  • 高可用。 大型分布式系統在實際運行過程中面對的工況是非常復雜的,業務流量的突增、依賴服務的不穩定、應用自身的瓶頸、物理資源的損壞等方方面面都會對系統的運行帶來大大小小的的沖擊。如何保障應用在復雜工況環境下還能高效穩定運行,如何預防和面對突發問題,系統設計時應該從哪些方面著手?本文將從架構落地的全景視角進行關注思考。

高性能

1 動靜分離

大家可能會注意到,秒殺過程中你是不需要刷新整個頁面的,只有時間在不停跳動。這是因為一般都會對大流量的秒殺系統做系統的靜態化改造,即數據意義上的動靜分離。動靜分離三步走:

  1. 數據拆分;
  2. 靜態緩存;
  3. 數據整合。

1.1 數據拆分

動靜分離的首要目的是將動態頁面改造成適合緩存的靜態頁面。因此第一步就是分離出動態數據,主要從以下 2 個方面進行:

  • 用戶。用戶身份信息包括登錄狀態以及登錄畫像等,相關要素可以單獨拆分出來,通過動態請求進行獲取;與之相關的廣平推薦,如用戶偏好、地域偏好等,同樣可以通過異步方式進行加載
  • 時間。秒殺時間是由服務端統一管控的,可以通過動態請求進行獲取

這里你可以打開電商平臺的一個秒殺頁面,看看這個頁面里都有哪些動靜數據。

1.2 靜態緩存

分離出動靜態數據之后,第二步就是將靜態數據進行合理的緩存,由此衍生出兩個問題:

  • 怎么緩存;
  • 哪里緩存

1.2.1 怎么緩存

靜態化改造的一個特點是直接緩存整個 HTTP 連接而不是僅僅緩存靜態數據,如此一來,Web 代理服務器根據請求 URL,可以直接取出對應的響應體然后直接返回,響應過程無需重組 HTTP 協議,也無需解析 HTTP 請求頭。而作為緩存鍵,URL唯一化是必不可少的,只是對于商品系統,URL 天然是可以基于商品 ID 來進行唯一標識的,比如淘寶的 https://item.taobao.com/item....。

1.2.2 哪里緩存

靜態數據緩存到哪里呢?可以有三種方式:

  • 瀏覽器;
  • CDN ;
  • 服務端。

瀏覽器當然是第一選擇,但用戶的瀏覽器是不可控的,主要體現在如果用戶不主動刷新,系統很難主動地把消息推送給用戶(注意,當討論靜態數據時,潛臺詞是 “相對不變”,言外之意是 “可能會變”),如此可能會導致用戶端在很長一段時間內看到的信息都是錯誤的。對于秒殺系統,保證緩存可以在秒級時間內失效是不可或缺的。

服務端主要進行動態邏輯計算及加載,本身并不擅長處理大量連接,每個連接消耗內存較多,同時 Servlet 容器解析 HTTP 較慢,容易侵占邏輯計算資源;另外,靜態數據下沉至此也會拉長請求路徑。

因此通常將靜態數據緩存在 CDN,其本身更擅長處理大并發的靜態文件請求,既可以做到主動失效,又離用戶盡可能近,同時規避 Java 語言層面的弱點。需要注意的是,上 CDN 有以下幾個問題需要解決:

  • 失效問題。任何一個緩存都應該是有時效的,尤其對于一個秒殺場景。所以,系統需要保證全國各地的 CDN 在秒級時間內失效掉緩存信息,這實際對 CDN 的失效系統要求是很高的
  • 命中率問題。高命中是緩存系統最為核心的性能要求,不然緩存就失去了意義。如果將數據放到全國各地的 CDN ,勢必會導致請求命中同一個緩存的可能性降低,那么命中率就成為一個問題

因此,將數據放到全國所有的 CDN 節點是不太現實的,失效問題、命中率問題都會面臨比較大的挑戰。更為可行的做法是選擇若干 CDN 節點進行靜態化改造,節點的選取通常需要滿足以下幾個條件:

  • 臨近訪問量集中的地區
  • 距離主站較遠的地區
  • 節點與主站間網絡質量良好的地區

基于以上因素,選擇 CDN 的二級緩存比較合適,因為二級緩存數量偏少,容量也更大,訪問量相對集中,這樣就可以較好解決緩存的失效問題以及命中率問題,是當前比較理想的一種 CDN 化方案。部署方式如下圖所示:

一個秒殺系統的設計思考

1.3 數據整合

分離出動靜態數據之后,前端如何組織數據頁就是一個新的問題,主要在于動態數據的加載處理,通常有兩種方案:ESI(Edge Side Includes)方案和 CSI(Client Side Include)方案。

  • ESI 方案:Web 代理服務器上請求動態數據,并將動態數據插入到靜態頁面中,用戶看到頁面時已經是一個完整的頁面。這種方式對服務端性能要求高,但用戶體驗較好
  • CSI 方案:Web 代理服務器上只返回靜態頁面,前端單獨發起一個異步 JS 請求動態數據。這種方式對服務端性能友好,但用戶體驗稍差

1.4 小結

動靜分離對于性能的提升,抽象起來只有兩點,一是數據要盡量少,以便減少沒必要的請求,二是路徑要盡量短,以便提高單次請求的效率。具體方法其實就是基于這個大方向進行的。

2 熱點優化

熱點分為熱點操作和熱點數據,以下分開進行討論。

2.1 熱點操作

零點刷新、零點下單、零點添加購物車等都屬于熱點操作。熱點操作是用戶的行為,不好改變,但可以做一些限制保護,比如用戶頻繁刷新頁面時進行提示阻斷。

2.2 熱點數據

熱點數據的處理三步走,一是熱點識別,二是熱點隔離,三是熱點優化。

2.2.1 熱點識別

熱點數據分為靜態熱點和動態熱點,具體如下:

  • 靜態熱點:能夠提前預測的熱點數據。大促前夕,可以根據大促的行業特點、活動商家等緯度信息分析出熱點商品,或者通過賣家報名的方式提前篩選;另外,還可以通過技術手段提前預測,例如對買家每天訪問的商品進行大數據計算,然后統計出 TOP N 的商品,即可視為熱點商品
  • 動態熱點:無法提前預測的熱點數據。冷熱數據往往是隨實際業務場景發生交替變化的,尤其是如今直播賣貨模式的興起——帶貨商臨時做一個廣告,就有可能導致一件商品在短時間內被大量購買。由于此類商品日常訪問較少,即使在緩存系統中一段時間后也會被逐出或過期掉,甚至在db中也是冷數據。瞬時流量的涌入,往往導致緩存被擊穿,請求直接到達DB,引發DB壓力過大

因此秒殺系統需要實現熱點數據的動態發現能力,一個常見的實現思路是:

  • 異步采集交易鏈路各個環節的熱點 Key 信息,如 Nginx采集訪問URL或 Agent 采集熱點日志(一些中間件本身已具備熱點發現能力),提前識別潛在的熱點數據
  • 聚合分析熱點數據,達到一定規則的熱點數據,通過訂閱分發推送到鏈路系統,各系統根據自身需求決定如何處理熱點數據,或限流或緩存,從而實現熱點保護

需要注意的是:

  • 熱點數據采集最好采用異步方式,一方面不會影響業務的核心交易鏈路,一方面可以保證采集方式的通用性
  • 熱點發現最好做到秒級實時,這樣動態發現才有意義,實際上也是對核心節點的數據采集和分析能力提出了較高的要求

2.2.2 熱點隔離

熱點數據識別出來之后,第一原則就是將熱點數據隔離出來,不要讓 1% 影響到另外的 99%,可以基于以下幾個層次實現熱點隔離:

  • 業務隔離。秒殺作為一種營銷活動,賣家需要單獨報名,從技術上來說,系統可以提前對已知熱點做緩存預熱
  • 系統隔離。系統隔離是運行時隔離,通過分組部署和另外 99% 進行分離,另外秒殺也可以申請單獨的域名,入口層就讓請求落到不同的集群中
  • 數據隔離。秒殺數據作為熱點數據,可以啟用單獨的緩存集群或者DB服務組,從而更好的實現橫向或縱向能力擴展

當然,實現隔離還有很多種辦法。比如,可以按照用戶來區分,為不同的用戶分配不同的 Cookie,入口層路由到不同的服務接口中;再比如,域名保持一致,但后端調用不同的服務接口;又或者在數據層給數據打標進行區分等等,這些措施的目的都是把已經識別的熱點請求和普通請求區分開來。

2.2.3 熱點優化

熱點數據隔離之后,也就方便對這 1% 的請求做針對性的優化,方式無外乎兩種:

  • 緩存:熱點緩存是最為有效的辦法。如果熱點數據做了動靜分離,那么可以長期緩存靜態數據
  • 限流:流量限制更多是一種保護機制。需要注意的是,各服務要時刻關注請求是否觸發限流并及時進行review

2.2.4 小結

數據的熱點優化與動靜分離是不一樣的,熱點優化是基于二八原則對數據進行了縱向拆分,以便進行針對性地處理。熱點識別和隔離不僅對“秒殺”這個場景有意義,對其他的高性能分布式系統也非常有參考價值。

3 系統優化

對于一個軟件系統,提高性能可以有很多種手段,如提升硬件水平、調優JVM 性能,這里主要關注代碼層面的性能優化——

  • 減少序列化:減少 Java 中的序列化操作可以很好的提升系統性能。序列化大部分是在 RPC 階段發生,因此應該盡量減少 RPC 調用,一種可行的方案是將多個關聯性較強的應用進行 “合并部署”,從而減少不同應用之間的 RPC 調用(微服務設計規范)
  • 直接輸出流數據:只要涉及字符串的I/O操作,無論是磁盤 I/O 還是網絡 I/O,都比較耗費 CPU 資源,因為字符需要轉換成字節,而這個轉換又必須查表編碼。所以對于常用數據,比如靜態字符串,推薦提前編碼成字節并緩存,具體到代碼層面就是通過 OutputStream() 類函數從而減少數據的編碼轉換;另外,熱點方法toString()不要直接調用ReflectionToString實現,推薦直接硬編碼,并且只打印DO的基礎要素和核心要素
  • 裁剪日志異常堆棧:無論是外部系統異常還是應用本身異常,都會有堆棧打出,超大流量下,頻繁的輸出完整堆棧,只會加劇系統當前負載。可以通過日志配置文件控制異常堆棧輸出的深度
  • 去組件框架:極致優化要求下,可以去掉一些組件框架,比如去掉傳統的 MVC 框架,直接使用 Servlet 處理請求。這樣可以繞過一大堆復雜且用處不大的處理邏輯,節省毫秒級的時間,當然,需要合理評估你對框架的依賴程度

4 總結一下

性能優化需要一個基準值,所以系統還需要做好應用基線,比如性能基線(何時性能突然下降)、成本基線(去年大促用了多少機器)、鏈路基線(核心流程發生了哪些變化),通過基線持續關注系統性能,促使系統在代碼層面持續提升編碼質量、業務層面及時下掉不合理調用、架構層面不斷優化改進。

一致性

秒殺系統中,庫存是個關鍵數據,賣不出去是個問題,超賣更是個問題。秒殺場景下的一致性問題,主要就是庫存扣減的準確性問題。

1 減庫存的方式

電商場景下的購買過程一般分為兩步:下單和付款。“提交訂單”即為下單,“支付訂單”即為付款。基于此設定,減庫存一般有以下幾個方式:

  • 下單減庫存。買家下單后,扣減商品庫存。下單減庫存是最簡單的減庫存方式,也是控制最為精確的一種
  • 付款減庫存。買家下單后,并不立即扣減庫存,而是等到付款后才真正扣減庫存。但因為付款時才減庫存,如果并發比較高,可能出現買家下單后付不了款的情況,因為商品已經被其他人買走了
  • 預扣庫存。這種方式相對復雜一些,買家下單后,庫存為其保留一定的時間(如 15 分鐘),超過這段時間,庫存自動釋放,釋放后其他買家可以購買

能夠看到,減庫存方式是基于購物過程的多階段進行劃分的,但無論是在下單階段還是付款階段,都會存在一些問題,下面進行具體分析。

2 減庫存的問題

2.1 下單減庫存

優勢:用戶體驗最好。下單減庫存是最簡單的減庫存方式,也是控制最精確的一種。下單時可以直接通過數據庫事務機制控制商品庫存,所以一定不會出現已下單卻付不了款的情況。

劣勢:可能賣不出去。正常情況下,買家下單后付款概率很高,所以不會有太大問題。但有一種場景例外,就是當賣家參加某個促銷活動時,競爭對手通過惡意下單的方式將該商品全部下單,導致庫存清零,那么這就不能正常售賣了——要知道,惡意下單的人是不會真正付款的,這正是 “下單減庫存” 的不足之處。

2.2 付款減庫存

  • 優勢:一定實際售賣。“下單減庫存” 可能導致惡意下單,從而影響賣家的商品銷售, “付款減庫存” 由于需要付出真金白銀,可以有效避免。
  • 劣勢:用戶體驗較差。用戶下單后,不一定會實際付款,假設有 100 件商品,就可能出現 200 人下單成功的情況,因為下單時不會減庫存,所以也就可能出現下單成功數遠遠超過真正庫存數的情況,這尤其會發生在大促的熱門商品上。如此一來就會導致很多買家下單成功后卻付不了款,購物體驗自然是比較差的。

2.3 預扣庫存

  • 優勢:緩解了以上兩種方式的問題。預扣庫存實際就是“下單減庫存”和 “付款減庫存”兩種方式的結合,將兩次操作進行了前后關聯,下單時預扣庫存,付款時釋放庫存。
  • 劣勢:并沒有徹底解決以上問題。比如針對惡意下單的場景,雖然可以把有效付款時間設置為 10 分鐘,但惡意買家完全可以在 10 分鐘之后再次下單。

2.4 小結

減庫存的問題主要體現在用戶體驗和商業訴求兩方面,其本質原因在于購物過程存在兩步甚至多步操作,在不同階段減庫存,容易存在被惡意利用的漏洞。

3 實際如何減庫存

業界最為常見的是預扣庫存。無論是外賣點餐還是電商購物,下單后一般都有個 “有效付款時間”,超過該時間訂單自動釋放,這就是典型的預扣庫存方案。但如上所述,預扣庫存還需要解決惡意下單的問題,保證商品賣的出去;另一方面,如何避免超賣,也是一個痛點。

  • 賣的出去:惡意下單的解決方案主要還是結合安全和反作弊措施來制止。比如,識別頻繁下單不付款的買家并進行打標,這樣可以在打標買家下單時不減庫存;再比如為大促商品設置單人最大購買件數,一人最多只能買 N 件商品;又或者對重復下單不付款的行為進行次數限制阻斷等
  • 避免超賣:庫存超賣的情況實際分為兩種。對于普通商品,秒殺只是一種大促手段,即使庫存超賣,商家也可以通過補貨來解決;而對于一些商品,秒殺作為一種營銷手段,完全不允許庫存為負,也就是在數據一致性上,需要保證大并發請求時數據庫中的庫存字段值不能為負,一般有多種方案:一是在通過事務來判斷,即保證減后庫存不能為負,否則就回滾;二是直接設置數據庫字段類型為無符號整數,這樣一旦庫存為負就會在執行 SQL 時報錯;三是使用 CASE WHEN 判斷語句——
  1. UPDATE item SET inventory = CASE WHEN inventory >= xxx THEN inventory-xxx ELSE inventory END 

業務手段保證商品賣的出去,技術手段保證商品不會超賣,庫存問題從來就不是簡單的技術難題,解決問題的視角是多種多樣的。

4 一致性性能的優化

庫存是個關鍵數據,更是個熱點數據。對系統來說,熱點的實際影響就是 “高讀” 和 “高寫”,也是秒殺場景下最為核心的一個技術難題。

4.1 高并發讀

秒殺場景解決高并發讀問題,關鍵詞是“分層校驗”。即在讀鏈路時,只進行不影響性能的檢查操作,如用戶是否具有秒殺資格、商品狀態是否正常、用戶答題是否正確、秒殺是否已經結束、是否非法請求等,而不做一致性校驗等容易引發瓶頸的檢查操作;直到寫鏈路時,才對庫存做一致性檢查,在數據層保證最終準確性。

因此,在分層校驗設定下,系統可以采用分布式緩存甚至LocalCache來抵抗高并發讀。即允許讀場景下一定的臟數據,這樣只會導致少量原本無庫存的下單請求被誤認為是有庫存的,等到真正寫數據時再保證最終一致性,由此做到高可用和一致性之間的平衡。

實際上,分層校驗的核心思想是:不同層次盡可能過濾掉無效請求,只在“漏斗” 最末端進行有效處理,從而縮短系統瓶頸的影響路徑。

4.2 高并發寫

高并發寫的優化方式,一種是更換DB選型,一種是優化DB性能,以下分別進行討論。

4.2.1 更換DB選型

秒殺商品和普通商品的減庫存是有差異的,核心區別在數據量級小、交易時間短,因此能否把秒殺減庫存直接放到緩存系統中實現呢,也就是直接在一個帶有持久化功能的緩存中進行減庫存操作,比如 Redis?

如果減庫存邏輯非常單一的話,比如沒有復雜的 SKU 庫存和總庫存這種聯動關系的話,個人認為是完全可以的。但如果有比較復雜的減庫存邏輯,或者需要使用到事務,那就必須在數據庫中完成減庫存操作。

4.2.2 優化DB性能

庫存數據落地到數據庫實現其實是一行存儲(MySQL),因此會有大量線程來競爭 InnoDB 行鎖。但并發越高,等待線程就會越多,TPS 下降,RT 上升,吞吐量會受到嚴重影響——注意,這里假設數據庫已基于上文【性能優化】完成數據隔離,以便于討論聚焦 。

解決并發鎖的問題,有兩種辦法:

  • 應用層排隊。通過緩存加入集群分布式鎖,從而控制集群對數據庫同一行記錄進行操作的并發度,同時也能控制單個商品占用數據庫連接的數量,防止熱點商品占用過多的數據庫連接
  • 數據層排隊。應用層排隊是有損性能的,數據層排隊是最為理想的。業界中,阿里的數據庫團隊開發了針對InnoDB 層上的補丁程序(patch),可以基于DB層對單行記錄做并發排隊,從而實現秒殺場景下的定制優化——注意,排隊和鎖競爭是有區別的,如果熟悉 MySQL 的話,就會知道 InnoDB 內部的死鎖檢測,以及 MySQL Server 和 InnoDB 的切換都是比較消耗性能的。另外阿里的數據庫團隊還做了很多其他方面的優化,如 COMMIT_ON_SUCCESS 和 ROLLBACK_ON_FAIL 的補丁程序,通過在 SQL 里加入提示(hint),實現事務不需要等待實時提交,而是在數據執行完最后一條 SQL 后,直接根據 TARGET_AFFECT_ROW 的結果進行提交或回滾,減少網絡等待的時間(毫秒級)。目前阿里已將包含這些補丁程序的 MySQL 開源:AliSQL

4.3 小結

高讀和高寫的兩種處理方式大相徑庭。讀請求的優化空間要大一些,而寫請求的瓶頸一般都在存儲層,優化思路的本質還是基于 CAP 理論做平衡。

5 總結一下

當然,減庫存還有很多細節問題,例如預扣的庫存超時后如何進行回補,再比如第三方支付如何保證減庫存和付款時的狀態一致性,這些也是很大的挑戰。

高可用

盯過秒殺流量監控的話,會發現它不是一條蜿蜒而起的曲線,而是一條挺拔的直線,這是因為秒殺請求高度集中于某一特定的時間點。這樣一來就會造成一個特別高的零點峰值,而對資源的消耗也幾乎是瞬時的。所以秒殺系統的可用性保護是不可或缺的。

1 流量削峰

對于秒殺的目標場景,最終能夠搶到商品的人數是固定的,無論 100 人和 10000 人參加結果都是一樣的,即有效請求額度是有限的。并發度越高,無效請求也就越多。但秒殺作為一種商業營銷手段,活動開始之前是希望有更多的人來刷頁面,只是真正開始后,秒殺請求不是越多越好。因此系統可以設計一些規則,人為的延緩秒殺請求,甚至可以過濾掉一些無效請求。

1.1 答題

早期秒殺只是簡單的點擊秒殺按鈕,后來才增加了答題。為什么要增加答題呢?主要是通過提升購買的復雜度,達到兩個目的:

  • 防止作弊。早期秒殺器比較猖獗,存在惡意買家或競爭對手使用秒殺器掃貨的情況,商家沒有達到營銷的目的,所以增加答題來進行限制。
  • 延緩請求。零點流量的起效時間是毫秒級的,答題可以人為拉長峰值下單的時長,由之前的 <1s 延長到 <10s。這個時間對于服務端非常重要,會大大減輕高峰期并發壓力;另外,由于請求具有先后順序,答題后置的請求到來時可能已經沒有庫存了,因此根本無法下單,此階段落到數據層真正的寫也就非常有限了。

需要注意的是,答題除了做正確性驗證,還需要對提交時間做驗證,比如<1s 人為操作的可能性就很小,可以進一步防止機器答題的情況。

答題目前已經使用的非常普遍了,本質是通過在入口層削減流量,從而讓系統更好地支撐瞬時峰值。

1.2 排隊

最為常見的削峰方案是使用消息隊列,通過把同步的直接調用轉換成異步的間接推送緩沖瞬時流量。除了消息隊列,類似的排隊方案還有很多,例如:

  • 線程池加鎖等待
  • 本地內存蓄洪等待
  • 本地文件序列化寫,再順序讀

排隊方式的弊端也是顯而易見的,主要有兩點:

  • 請求積壓。流量高峰如果長時間持續,達到了隊列的水位上限,隊列同樣會被壓垮,這樣雖然保護了下游系統,但是和請求直接丟棄也沒多大區別。
  • 用戶體驗。異步推送的實時性和有序性自然是比不上同步調用的,由此可能出現請求先發后至的情況,影響部分敏感用戶的購物體驗。

排隊本質是在業務層將一步操作轉變成兩步操作,從而起到緩沖的作用,但鑒于此種方式的弊端,最終還是要基于業務量級和秒殺場景做出妥協和平衡。

1.3 過濾

過濾的核心結構在于分層,通過在不同層次過濾掉無效請求,達到數據讀寫的精準觸發。常見的過濾主要有以下幾層:

  1. 讀限流:對讀請求做限流保護,將超出系統承載能力的請求過濾掉。
  2. 讀緩存:對讀請求做數據緩存,將重復的請求過濾掉。
  3. 寫限流:對寫請求做限流保護,將超出系統承載能力的請求過濾掉。
  4. 寫校驗:對寫請求做一致性校驗,只保留最終的有效數據。

過濾的核心目的是通過減少無效請求的數據IO保障有效請求的IO性能。

1.4 小結

系統可以通過入口層的答題、業務層的排隊、數據層的過濾達到流量削峰的目的,本質是在尋求商業訴求與架構性能之間的平衡。另外,新的削峰手段也層出不窮,以業務切入居多,比如零點大促時同步發放優惠券或發起抽獎活動,將一部分流量分散到其他系統,這樣也能起到削峰的作用。

2 Plan B

當一個系統面臨持續的高峰流量時,其實是很難單靠自身調整來恢復狀態的,日常運維沒有人能夠預估所有情況,意外總是無法避免。尤其在秒殺這一場景下,為了保證系統的高可用,必須設計一個 Plan B 方案來進行兜底。

高可用建設,其實是一個系統工程,貫穿在系統建設的整個生命周期。

一個秒殺系統的設計思考

具體來說,系統的高可用建設涉及架構階段、編碼階段、測試階段、發布階段、運行階段,以及故障發生時,逐一進行分析:

  • 架構階段:考慮系統的可擴展性和容錯性,避免出現單點問題。例如多地單元化部署,即使某個IDC甚至地市出現故障,仍不會影響系統運轉。
  • 編碼階段:保證代碼的健壯性,例如RPC調用時,設置合理的超時退出機制,防止被其他系統拖垮,同時也要對無法預料的返回錯誤進行默認的處理。
  • 測試階段:保證CI的覆蓋度以及Sonar的容錯率,對基礎質量進行二次校驗,并定期產出整體質量的趨勢報告。
  • 發布階段:系統部署最容易暴露錯誤,因此要有前置的checklist模版、中置的上下游周知機制以及后置的回滾機制。
  • 運行階段:系統多數時間處于運行態,最重要的是運行時的實時監控,及時發現問題、準確報警并能提供詳細數據,以便排查問題。
  • 故障發生:首要目標是及時止損,防止影響面擴大,然后定位原因、解決問題,最后恢復服務。

對于日常運維而言,高可用更多是針對運行階段而言的,此階段需要額外進行加強建設,主要有以下幾種手段:

  • 預防:建立常態壓測體系,定期對服務進行單點壓測以及全鏈路壓測,摸排水位。
  • 管控:做好線上運行的降級、限流和熔斷保護。需要注意的是,無論是限流、降級還是熔斷,對業務都是有損的,所以在進行操作前,一定要和上下游業務確認好再進行。就拿限流來說,哪些業務可以限、什么情況下限、限流時間多長、什么情況下進行恢復,都要和業務方反復確認。
  • 監控:建立性能基線,記錄性能的變化趨勢;建立報警體系,發現問題及時預警。
  • 恢復:遇到故障能夠及時止損,并提供快速的數據訂正工具,不一定要好,但一定要有。

在系統建設的整個生命周期中,每個環節中都可能犯錯,甚至有些環節犯的錯,后面是無法彌補的或者成本極高的。所以高可用是一個系統工程,必須放到整個生命周期中進行全面考慮。同時,考慮到服務的增長性,高可用更需要長期規劃并進行體系化建設。

3 總結一下

高可用其實是在說 “穩定性”,穩定性是一個平時不重要,但出了問題就要命的事情,然而它的落地又是一個問題——平時業務發展良好,穩定性建設就會降級給業務讓路。解決這個問題必須在組織上有所保障,比如讓業務負責人背上穩定性績效指標,同時在部門中建立穩定性建設小組,小組成員由每條線的核心力量兼任,績效由穩定性負責人來打分,這樣就可以把體系化的建設任務落實到具體的業務系統中了。

個人總結

一個秒殺系統的設計,可以根據不同級別的流量,由簡單到復雜打造出不同的架構,本質是各方面的取舍和權衡。當然,你可能注意到,本文并沒有涉及具體的選型方案,因為這些對于架構來說并不重要,作為架構師,應該時刻提醒自己主線是什么。

同時也在這里抽象、提煉一下,主要是個人對于秒殺設計的提綱式整理,方便各位同學進行參考。

 

責任編輯:未麗燕 來源: SegmentFault.com
相關推薦

2022-04-28 10:41:08

SaaS業務方式

2021-09-15 06:55:34

異步LinqC#

2021-01-27 08:12:04

Dotnet函數數據

2025-04-22 08:57:27

2021-04-14 07:47:59

AttributeC#屬性

2021-07-31 23:14:26

OpenCL框架語言

2023-05-11 08:16:13

可視化監控工具Kafka

2021-12-15 09:32:41

Linux系統負載

2025-08-28 02:15:00

CAPMySQL架構

2020-03-26 09:18:54

高薪本質因素

2023-05-04 08:24:52

ChatGPT產品經理工業革命

2022-02-16 07:32:10

性能代碼編程

2025-01-13 12:00:00

反射Java開發

2024-08-13 17:09:00

架構分庫分表開發

2020-08-04 10:56:09

進程線程協程

2020-07-16 09:02:45

aPaaS云計算aPaaS平臺

2018-05-22 10:09:09

數據庫MySQL優化原理

2021-01-18 13:05:52

Serverless Serverfull FaaS

2022-05-15 09:16:28

IPv6IPIP地址

2020-12-01 11:34:14

Elasticsear
點贊
收藏

51CTO技術棧公眾號

欧美日韩国产高清一区二区| 久久久久综合网| 欧美精品在线极品| 中文字幕精品久久久| 色多多在线观看| 国产精品视频一二| 99国产盗摄| 国产成人无码一区二区在线播放| 国产一区二区三区电影在线观看| 欧美精品久久久久久久多人混战| av 日韩 人妻 黑人 综合 无码| 亚洲精品久久久久avwww潮水| 亚洲深夜影院| 精品国内自产拍在线观看| 亚洲国产精品第一页| 肉色欧美久久久久久久免费看| 国产精品国产成人国产三级| 国产一区二区高清不卡 | 欧美日韩伦理在线免费| 91精品国产免费久久综合| 日本中文字幕网址| 免费黄色网页在线观看| 成人少妇影院yyyy| 国产日韩欧美日韩大片| 国产成人无码精品亚洲| 亚洲精品中文字幕乱码| 精品亚洲夜色av98在线观看| 欧美xxxxxbbbbb| 大胆人体一区| 亚洲国产一二三| 正在播放国产精品| 日本亚洲欧美| 成人晚上爱看视频| 成人春色激情网| 一级一片免费看| 亚洲青色在线| 欧美精品免费在线观看| 摸摸摸bbb毛毛毛片| 欧美激情网址| 日韩欧美国产一二三区| 亚洲天堂2018av| 丁香六月综合| 天天色天天操综合| 六月婷婷激情综合| 超碰在线免费公开| 中文字幕成人网| 日韩wuma| 成人av免费在线播放| 日韩午夜在线影院| 日日躁夜夜躁aaaabbbb| 天天综合av| 亚洲第一精品在线| 免费观看亚洲视频| 老司机在线永久免费观看| 国产亚洲人成网站| 久久综合九色欧美狠狠| 特黄视频在线观看| www.亚洲激情.com| 国产精品日韩一区二区| 午夜精品久久久久久久爽| 国产制服丝袜一区| 成人精品久久久| 国产精品视频一二区| 久久成人免费日本黄色| 99re成人精品视频| 92裸体在线视频网站| 一级黄色小视频| 日本不卡中文字幕| 国产精品久久久亚洲| 亚洲乱码国产乱码精品| 丝袜亚洲另类欧美综合| 国产精品久久久久久久久久久久| 成人av网站在线播放| 久久亚洲不卡| 国产精品三级美女白浆呻吟| 伊人免费在线观看高清版| 麻豆精品新av中文字幕| 成人午夜一级二级三级| 国产高清第一页| 成人av在线看| 青娱乐一区二区| 尤物视频在线免费观看| 亚洲人123区| 国产欧美久久久久| 美女的胸无遮挡在线观看| 欧美日韩在线看| 天堂社区在线视频| 外国成人毛片| 欧美精品一区二区三区蜜桃视频| 你懂得在线视频| 国产欧美日韩在线一区二区| 久久精品久久久久久| 免费一级片视频| 亚洲一区日韩在线| 国产啪精品视频网站| 亚洲精品视频91| 97aⅴ精品视频一二三区| 日产中文字幕在线精品一区| 黄色网址视频在线观看| 五月激情六月综合| 污污网站免费看| 国产精品色呦| 综合av色偷偷网| 久久久久久久久久网站| 老司机精品福利视频| 成人在线播放av| 偷拍自拍在线| 亚洲最新色图| 久久久久一本一区二区青青蜜月| 亚洲第一网站在线观看| 国内精品免费**视频| 精品一区二区三区日本| 日本a在线播放| 韩曰欧美视频免费观看| 爱豆国产剧免费观看大全剧苏畅| 国产一区福利| 久久精品视频网站| 中文在线第一页| 国产成人无遮挡在线视频| 日韩久久久久久久久久久久久| 最新av在线播放| 在线亚洲免费视频| 欧美熟妇精品一区二区蜜桃视频| 欧美日韩一区二区综合| 午夜精品久久久久久久久久久久| 影音先锋国产资源| 91视视频在线观看入口直接观看www | 国产69精品久久久久按摩| 日韩视频一区二区三区 | 亚洲欧洲av在线| 国产美女三级视频| 国内自拍欧美| 九色成人免费视频| 91黄色在线视频| 国产欧美日韩精品a在线观看| 国产精品久久久久7777| 国产专区精品| 俺去亚洲欧洲欧美日韩| 特级西西444www大胆免费看| 久久免费视频一区| 国产精品久久久久久久乖乖| 免费一级欧美片在线观看网站| 一区二区三区黄色| 亚洲天堂男人av| 97精品国产露脸对白| 日韩伦理在线免费观看| 视频国产精品| 久久国产精品久久久久久久久久| 在线视频播放大全| 日本一区二区在线不卡| www日韩视频| 夜夜春成人影院| 热门国产精品亚洲第一区在线| 性xxxx视频| 五月激情综合网| 国产麻豆天美果冻无码视频| 亚洲国产综合在线看不卡| 国产手机精品在线| 爱情岛论坛亚洲品质自拍视频网站| 日韩美女视频一区二区在线观看| 国产av 一区二区三区| 国产乱码精品一区二区三区忘忧草| 中文字幕第一页亚洲| 成人自拍视频| 欧美日韩成人精品| 蜜桃久久一区二区三区| 亚洲成av人影院| 岛国精品资源网站| 亚洲欧美日本国产专区一区| 欧美一区二区三区四区夜夜大片 | 国产精品嫩草影院久久久| a黄色在线观看| 欧美高清激情brazzers| 欧美a级片免费看| 国产在线观看免费一区| 成人av在线播放观看| 91综合精品国产丝袜长腿久久| 久久免费在线观看| 免费看男男www网站入口在线| 在线中文字幕一区二区| 成人欧美一区二区三区黑人一| 国产综合成人久久大片91| 屁屁影院ccyy国产第一页| 国产在线播放精品| 国产精品久久电影观看| 麻豆影视国产在线观看| 精品免费一区二区三区| 亚洲图片在线视频| 日韩一区中文字幕| 中文字幕a在线观看| 久久国产日本精品| 黄频视频在线观看| 加勒比色综合久久久久久久久 | 中文字幕亚洲精品一区| 国产色91在线| 在线成人免费av| 午夜在线播放视频欧美| 中文字幕欧美日韩一区二区| 99re6热只有精品免费观看| 欧洲精品毛片网站| 国产剧情在线| 亚洲精品少妇网址| 国产偷拍一区二区| 色哟哟国产精品免费观看| 成人涩涩小片视频日本| 97久久精品人人做人人爽50路| 中文字幕第17页| 中日韩视频在线观看| 中文字幕在线观看一区二区三区| 免费看成人人体视频| 国产欧美一区二区三区久久人妖| 久草在线资源站手机版| zzjj国产精品一区二区| 天堂av网在线| 日韩一区和二区| 亚洲视屏在线观看| 午夜精品一区在线观看| 国产传媒免费在线观看| 久久午夜老司机| 中文字幕一区二区三区人妻在线视频 | xxxx日韩| 91最新在线免费观看| 电影一区二区三区| 欧美精品成人在线| 日本中文字幕伦在线观看| 亚洲精品国产精品国自产在线| 97在线视频人妻无码| 欧洲一区在线观看| 久久久久久久黄色片| 悠悠色在线精品| 国产高潮国产高潮久久久91| 日本一区免费视频| 亚洲黄色小说视频| 久久久高清一区二区三区| 永久免费未满蜜桃| 国产一区二区不卡在线 | 国产精品一二三四| 色综合手机在线| 久久精品欧洲| 亚洲色成人一区二区三区小说| 国产真实久久| 青青草视频在线视频| 91精品一区二区三区综合在线爱| 五月天亚洲综合| 你懂的一区二区三区| 久久本道综合色狠狠五月| 成人台湾亚洲精品一区二区| 99伊人久久| 日韩激情欧美| 99视频在线播放| 中文字幕一区二区三区四区久久 | 国产精品爽爽久久| 欧美亚洲一区二区在线| 国产在线一级片| 在线国产电影不卡| 天天爱天天做天天爽| 在线影视一区二区三区| 波多野结衣理论片| 91精品办公室少妇高潮对白| 国产美女www| 欧美影视一区二区三区| 中文天堂在线播放| 欧美日韩免费视频| 国产精品主播一区二区| 欧美电影一区二区三区| 国产成人av免费看| 亚洲精品在线观| 污视频网站免费观看| 日韩精品免费在线观看| 牛牛热在线视频| 正在播放欧美视频| 国产黄色在线免费观看| 欧美成人自拍视频| 538在线观看| 日本精品久久久久影院| 国产超碰精品| 成人精品福利视频| 国语一区二区三区| 日韩av不卡播放| 婷婷综合伊人| 色综合久久久久无码专区| 久久久久久久欧美精品| 日韩视频在线观看一区二区三区| 国产91精品入口| 一区二区黄色片| 亚洲人午夜精品天堂一二香蕉| 九九热国产视频| 欧美亚洲日本国产| 亚洲国产欧美另类| 亚洲色图美腿丝袜| h片在线免费观看| 欧美专区日韩视频| 在线视频成人| 精品日韩美女| 久久精品国内一区二区三区水蜜桃| 9色porny| 麻豆免费精品视频| 日韩精品一区二区三区高清免费| 日本一区二区视频在线观看| 久久久久久久久久久久久久免费看| 欧美性xxxx18| 亚洲欧美另类日韩| 最近更新的2019中文字幕| 欧美寡妇性猛交xxx免费| 国产精品黄视频| 激情视频极品美女日韩| 中文字幕中文字幕一区三区| 国产精品毛片在线看| 国产亚洲色婷婷久久| 国产午夜精品理论片a级大结局| 免费在线观看黄视频| 欧美影院午夜播放| 婷婷五月综合激情| 欧美高清第一页| 99久久99九九99九九九| 免费观看成人高| 欧美一区高清| 激情综合网俺也去| 麻豆国产精品一区二区三区 | 99精品黄色片免费大全| 亚洲色偷偷综合亚洲av伊人| 精品久久久精品| 国产视频手机在线观看| 国产一区av在线| 草草在线视频| 国产精品一区久久久| 91精品国产自产在线丝袜啪| 亚洲成人网上| 欧美中文字幕| 色悠悠在线视频| 国产精品美女视频| 精品国产青草久久久久96| 亚洲电影在线看| 成人av影院在线观看| 国产欧美一区二区三区在线| 成人福利免费在线观看| 国产91porn| 久久精品国产久精国产| www.日本高清视频| 色欧美片视频在线观看| 国产精品系列视频| 久久精品国产精品| 日韩三区在线| 日韩精品久久一区二区三区| 在线亚洲精品| 欧美丰满熟妇bbb久久久| 夜夜嗨av一区二区三区四季av| 一级片在线观看视频| 俺去亚洲欧洲欧美日韩| 欧美亚洲人成在线| 先锋影音一区二区三区| 久久一二三区| 亚洲一级中文字幕| 欧美亚洲一区二区在线观看| 黄色在线小视频| 国产精品欧美日韩一区二区| 宅男在线一区| 国产xxxxx视频| 国产精品成人一区二区艾草| 中文字幕欧美色图| 日韩一区二区av| 成人黄色图片网站| 好吊色欧美一区二区三区四区 | 欧美大片第1页| 亚洲国产中文在线| 免费一级特黄特色毛片久久看| av在线不卡免费看| 成人免费毛片视频| 在线视频日本亚洲性| 成人黄色免费观看| 精品一区二区三区毛片| 国产综合色视频| 日本三级中文字幕| 日韩电影中文字幕在线| 日本一道高清亚洲日美韩| 日韩精品欧美在线| 久久aⅴ国产欧美74aaa| 精品一区二区三区人妻| 亚洲国产日韩欧美在线图片| 户外露出一区二区三区| 亚洲高清123| 丰满白嫩尤物一区二区| 日韩久久精品视频| 亚洲高清福利视频| 夜鲁夜鲁夜鲁视频在线播放| 日韩精品欧美专区| 黄网站免费久久| 久久机热这里只有精品| 亚洲精品久久7777777| 高清av不卡| 中文字幕一区二区三区乱码| 懂色av一区二区三区免费看| 日本高清www免费视频| 亚洲视频在线观看视频| 欧州一区二区三区| 91av资源网| 亚洲精品日韩专区silk| 无码国产伦一区二区三区视频| 国产精品视频久久久| 欧美日一区二区三区在线观看国产免|