怎樣設計一個秒殺系統

如何設計一個秒殺系統,其實我思考了很久,今天就把我想到了寫下來記錄一下:

所謂秒殺操作就是同一時間段內很多用戶搶購有限的商品,因此秒殺的併發量是很高的。

用戶點擊秒殺的時候,會異步的取服務端的時間,然後在執行秒殺,如果執行秒殺的時間小於服務端設定的時間,

那麼提示用戶秒殺尚未開啓,如果時間在秒殺的範圍內,服務端會返回秒殺接口地址,一般url的某個字段是加密值,用戶點擊後可以執行秒殺。

如果秒殺後

前端:

1.通過動靜分離 把靜態頁面部署到CDN上,這樣可以降低我們系統的壓力,用戶的體驗也會提高

2.因爲秒殺的時候用戶可能會一直的刷新,前端可以做一些控制

3.然後通過前端web服務器用nginx 做負載均衡和反向代理

後端:

後端一般都是一個集羣

1.在redis集羣中維護一個原子計數器(Atomic counter),數量提前設定好,用戶請求到來的時候直接對這個原子計數器

進行操作,如果原子計數器大於0那麼,減去1,然後插入一條用戶秒殺的消息到rabbitmq中(或者其他消息隊列),然後又消費者來消費這個rabbitmq產生的消息,把對應的記錄寫到數據庫中;如果原子計數器小與等於0,那麼返回秒殺已經結束。

2.如果數據庫壓力很大,那麼對數據庫可以進行分庫,分表

3.數據庫端也可以使用存儲過程,減少服務器端到數據庫的傳輸時延,以及服務端GC造成的延遲


前一段時間在面試的時候,面試過跟我分享了一個新的思路,比如1000W個人搶10個商品,那麼我只讓10條流量進來不就可以了?其他的都到不了我的後臺的應用程序,我覺得這是一個很好的一個思路,或許有點不公平,但是對於流量的隨機選取 只抽取10條算是比較公平的了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章