首頁>Club>
6
回覆列表
  • 1 # 非常程式碼

    1、什麼是秒殺

    所謂秒殺,就是網路賣家釋出一些超低價的商品,所有買家在同一時間網上搶購的一種銷售方式。

    秒殺商品通常有兩種限制:時間限制,庫存限制。

    2、秒殺系統場景特點

    秒殺時大量使用者會在同一時間進行搶購,網站瞬時訪問量激增;

    秒殺一般是訪問請求數量大於庫存數量,只有少部分使用者能夠秒殺成功;

    秒殺業務流程比較簡單,一般就是下訂單減庫存。

    3、秒殺架構設計思想

    限流:鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,只允許少部分流量進入服務後端。

    削峰:對於秒殺系統瞬時會有大量使用者湧入,所以在搶購一開始會有很高的瞬時峰值,高峰值流量是壓垮系統很重要的原因。實現削峰的常用方法是利用快取和訊息中介軟體等技術。

    非同步處理:秒殺系統是一個高併發系統,採用非同步處理模式可以極大地提高系統併發量,也是削峰的一種實現方式。

    記憶體快取:秒殺系統最大的瓶頸一般是資料庫讀寫,由於資料庫讀寫屬於磁碟IO,效能很低,如果能夠把部分資料或者業務邏輯轉移到記憶體快取,效率會有極大提升。

    可拓展:如果想支援更多使用者,更大併發,最好將系統設計成彈性可拓展的,如果流量來了,拓展機器就好了,像淘寶、京東等雙十一活動時會增加機器應對峰值。

    4、秒殺系統簡單實現

    Redis是一個分散式快取系統,支援多種資料結構,我們可以利用Redis輕鬆實現一個強大的秒殺系統。對於每個使用者的秒殺,可以使用key-value的方式插入秒殺請求資料,當插入的秒殺請求數達到上限時,停止所有後續插入。

    然後在後臺啟動多個工作執行緒,讀取秒殺成功者的ID,再操作資料庫做最終下訂單減庫存操作。

    也可以把Redis替換成ActiveMQ、RabbitMQ等訊息中介軟體,也可以將快取和訊息中介軟體組合使用,快取系統負責接收記錄使用者請求,訊息中介軟體負責將快取中的請求同步到資料庫。

  • 2 # 不會修電腦的技術宅

    1.首先,我們會考慮利用資料庫的樂觀鎖和悲觀鎖來操作

    但是悲觀鎖,每次拿資料都會上鎖,誰拿到鎖誰才會有操作的許可權。每一個操作都會對資源進行鎖定,會造成效率低下。

    樂觀鎖,適合衝突比較少的情況,要不然一直retry,然而降低了系統的效能。而且寫的頻率過高。很容易造成系統崩潰。

    我們採用變同步寫為非同步寫的redis方式。

    我們採用redis來做秒殺,在秒殺之前,我們首先會將庫存讀到redis中,我們利用單程序單執行緒的redis進行併發的控制,並且redis為我們提供了兩種方式。

    第一種是redis的事務的方式watch語句,會監視庫存的變化,如果我們在這次更新庫存中,庫存發生了變化,事務失敗,那麼我們會更新失敗。

    還有一種是redis的list結構,類似於佇列的機制,序列執行。

    每修改一次庫存,我們透過mq來更改資料庫

    這是一種變同步為非同步的方式。

  • 中秋節和大豐收的關聯?
  • 英文如何朗讀?如何連讀?