怎麼產生的高併發 高併發如何解決
模擬場景:
商城做一個秒殺活動,秒殺的商品數量為10,秒到即得
方案:
1.應用層做首次過濾
因為考慮到處理的失敗,我們要給快取開的總數比10稍大是最好的,那我們就給佇列開的總數是50。秒殺開始後,我們的佇列只接收前面50個請求,當數量滿50後,在請求就返回已秒殺完。如果一瞬間的併發大於50,我們就隨機取50個放入佇列。
快取的處理是在記憶體上處理的,效率非常高,但是在這個層面處理過後要二次請求,可能會有稍許延遲。
2.資料層做二次過濾
從50箇中隨機或者排序的方式,二次“併發”按佇列執行下單,這時候可以考慮使用檔案鎖。入庫時也可以考慮使用樂觀鎖、自定義鎖、限制條件等。
經過首次處理後的資料量已經非常小了,直接操作資料庫的話壓力會小很多,二次過濾也能儘可能的保證資料不超出
其他:
如果是分散式叢集伺服器,就需要有一個或多個多層專門的佇列伺服器,或者配置快取佇列共享