03.05 秒殺系統-核心關注

秒殺概念-網上競拍

網絡商家為促銷等目的組織的網上

限時搶購活動。由於商品價格低廉,往往一上架就被搶購一空,有時只用一秒鐘。

秒殺關鍵問題

一是併發讀,一是併發寫,對應到架構設計,就是高可用、一致性和高性能的要求。

⑴讀

  • 先在數組中定位Segment並利用UNSAFE.getObjectVolatile原子讀語義獲取Segment
  • 接著在數組中定位HashEntry並利用UNSAFE.getObjectVolatile原子讀語義獲取HashEntry
  • 然後依賴final不變的next指針遍歷鏈表
  • 找到對應的volatile值

⑵寫

  • 先在數組中定位Segment並利用UNSAFE.getObjectVolatile原子讀語義獲取Segment
  • 然後嘗試加鎖ReentrantLock
  • 接著在數組中定位HashEntry並利用UNSAFE.getObjectVolatile原子讀語義獲取HashEntry鏈表頭節點
  • 遍歷鏈表,若找到已存在的key,則利用UNSAFE.putOrderedObject原子寫新值,若找不到,則創建一個新的節點,插入到鏈表頭,同時利用UNSAFE.putOrderedObject原子更新鏈表頭
  • 完成操作後釋放鎖

三步走原則

  • 動靜分離

1、數據拆分

2、靜態緩存

3、數據整合

  • 熱點數據處置

1、熱點識別

2、熱點隔離

3、熱點優化

我們看到的熱點優化與動靜分離是不一樣的,熱點優化是基於二八原則對數據進行了縱向拆分,以便進行針對性地處理。

秒殺系統性能優化

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

  • 一致性優化

庫存就是熱點數據。對系統來說,熱點的實際影響就是 “高讀” 和 “高寫”,系統架構之核心。

  • 高可用

秒殺系統流量數據的圖形是,一條挺拔的直線,源於秒殺請求高度集中於某一特定的時間點,就會造成一個特別高的零點峰值,對資源的消耗也幾乎是瞬時的。

所以秒殺系統的可用性保護是不可或缺的。

秒殺系統-限流

一般有三種方法,令桶法,漏桶算法,分佈式鎖

  • 令牌桶-算法描述

⑴ 假如用戶請求的平均發送速率為r,則每隔1/r秒一個令牌被加入到桶中。

⑵ 假設桶中最多可以存放b個令牌。如果令牌到達時令牌桶已經滿了,那麼這個令牌會被丟棄

⑶ 當流量以速率v進入,從桶中以速率v取令牌,拿到令牌的流量通過,拿不到令牌流量不通過,執行熔斷邏輯。

  • 漏桶算法-思想

水(請求)先進入到漏桶裡,漏桶以一定的速度出水,當水流入速度過大會直接溢出,可以看出漏桶算法能強行限制數據的傳輸速率。

  • 分佈式鎖

⑴ 基於數據庫實現分佈式鎖

⑵ 基於緩存實現分佈式鎖,如redis

⑶ 基於Zookeeper實現分佈式鎖

秒殺系統-核心關注



分享到:


相關文章: