秒殺方案總結

        互聯網秒殺方案爲了解決超賣,目前流行兩種處理方式:1.隊列方式,全部請求放入隊列,後臺從隊列按照FIFO處理2.樂觀鎖方式。 php

        具體方案以下: html

        1.隊列方式,直接將請求放入隊列,採用FIFO(先進先出)方式處理。此方式強行將併發請求一一排序,解決了超賣問題。 nginx

        

        缺點1:當高併發場景爆掉隊列的話,系統將陷入異常,搶購活動停止。 web

        解決方案:1.加大隊列服務器內存 算法

                      2.事先可設置入隊最大個數,當超過次數,直接返回已售罄頁面(推薦) 瀏覽器

        缺點2:用戶搶購後,沒法直觀看到最終搶購結果,須要等到隊列執行以後才能知道 服務器

        解決方案:採用長鏈接通知用戶處理結果 併發

        2.樂觀鎖,樂觀鎖機制大都採用版本號更新。具體實現是全部請求都有資格進行修改庫存,但每次修改前會得到一個該庫存數據版本,只有版本符號的請求才會修改爲功,不然,修改失敗。不過此方式會增大服務器CPU計算開銷 高併發

        

        缺點:服務器CPU消耗大 網站

        解決方案:提早預估搶購規模,準備服務器。隨時根據狀況增長


    總結以後,我的更傾向第二種方案,同時爲了完善此方案,增長一下幾點:

    1.提早預定,只有預定資格用戶可參加搶購

    2.防止惡意搶購,增長動態驗證碼

    3.搶購頁面靜態化,使用CDN

    4.避免經過下單URL直接下單,使該URL動態化。下單頁面URL加入服務器隨機數作爲參數,只有秒殺開始時候才能獲得。

    5.搶購經過定時任務自動開始,開始後可生成隨機下單參數

    6.對時,瀏覽器可能和服務器時間不一致,js固定時間進行對時,保證時間一致性;web服務器對時,每隔一分鐘全部web服務器和對時服務器進行時間同步

    nginx方面的一些設置

    1.ngx_http_limit_conn_module 限制鏈接數模塊

       一般用來限制同一IP地址的可併發鏈接數

       相關文檔:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

       注意:$binary_remote_addr而不是$remote_addr,$remote_addr的長度爲7到15個字節,它的會話信息的長度爲32或64 bytes,$binary_remote_addr的長度爲4字節,會話信息的長度爲32字節,這樣設置1M的一個zone時,用$binary_remote_addr方式,該zone將會存放32000個會話。

    2.ngx_http_limit_req_module 限制請求數模塊

      一般用來限制同一IP地址單位時間可完成的請求數,限制的方法是採用漏桶算法(Leaky Bucket),每秒處理固定請求數量,推遲過多請求,超過桶的閥值,請求直接終止返回503

      相關文檔:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

   3.基於nginx的Tengine分支ngx_http_limit_req_module 

      nginx相似,不過支持多個變量,而且支持多個limit_req_zone及forbid_action的設置。

      相關文檔:http://tengine.taobao.org/document_cn/http_limit_req_cn.html

   4.基於nginx的Senginx分支的ngx_http_limit_req_module

     稱之爲基於條件的限速功能,在Tenginer的limit_req模塊基礎上,增長condition參數,在條件爲真時執行限制動做。
     相關文檔:http://www.senginx.org/cn/index.php/%E5%9F%BA%E4%BA%8E%E6%9D%A1%E4%BB%B6%E7%9A%84%E9%99%90%E9%80%9F%E5%8A%9F%E8%83%BD

   5.基於nginx的Senginx分支的ngx_http_ip_behavior

      稱之爲行爲識別模塊,訪問行爲識別模塊的做用是對用戶訪問網站的行爲進行監控

      相關文檔:http://www.senginx.org/cn/index.php/%E8%AE%BF%E9%97%AE%E8%A1%8C%E4%B8%BA%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9D%97

   6.基於nginx的Senginx分支的ngx_http_robot_mitigation

     稱之爲HTTP機器人緩解,Robot Mitigation模塊採用了一種基於「挑戰」的驗證方法,即向客戶端發送特定的、瀏覽器能解析的應答,若是客戶端是真實的瀏覽器,則會從新觸發請求, 並帶有一個特定的Cookie值,Robot Mitigation模塊會依據此Cookie的信息來決定是否放行此請求。

     相關文檔:http://www.senginx.org/cn/index.php/Robot_Mitigation%E6%A8%A1%E5%9D%97

相關文章
相關標籤/搜索