秒殺系統,是典型的短時大量突發訪問類問題。對這類問題,有三種優化效能的思路:
寫入記憶體而不是寫入硬碟
非同步處理而不是同步處理
分布式處理
用上這三招,不論秒殺時負載多大,都能輕鬆應對。更好的是,redis能夠滿足上述三點。因此,用redis就能輕鬆實現秒殺系統。
用我這個方案,無論是電商平台**秒殺,12306火車票秒殺,都不是事:)
下面介紹一下為什麼上述三種效能優化思路能夠解決秒殺系統的效能問題:
redis和redis cluster(分布式版本),是乙個分布式快取系統。其支援多種資料結構,也支援mq。redis在效能上做了大量優化。因此使用redis或者redis cluster就可以輕鬆實現乙個強大的秒殺系統。
基本上,你用redis的這些命令就可以了。
rpush key value
插入秒殺請求
當插入的秒殺請求數達到上限時,停止所有後續插入。
後台啟動多個工作執行緒,使用
lpop key
讀取秒殺成功者的使用者id,進行後續處理。
或者使用lrange key start end命令讀取秒殺成功者的使用者id,進行後續處理。
每完成一條秒殺記錄的處理,就執行incr key_num。一旦所有庫存處理完畢,就結束該商品的本次秒殺,關閉工作執行緒,也不再接收秒殺請求。
也許你會說,我們的客戶很多。即使部署了redis cluster,仍然撐不住。那該怎麼辦呢?
記得某個偉人曾經說過:辦法總比困難多!
下面,我們具體分析下,還有哪些情況會壓垮我們架構在redis(cluster)上的秒殺系統。
如現在有很多搶火車票的軟體。它們會自動發起http請求。乙個客戶端一秒會發起很多次請求。如果有很多使用者使用了這樣的軟體,就可能會直接把我們的交換機給壓垮了。
這個問題其實屬於網路問題的範疇,和我們的秒殺系統不在乙個層面上。因此不應該由我們來解決。很多交換機都有防止乙個源ip發起過多請求的功能。開源軟體也有不少能實現這點。如linux上的tc可以控制。流行的web伺服器nginx(它也可以看做是乙個七層軟交換機)也可以通過配置做到這一點。乙個ip,一秒鐘我就允許你訪問我2次,其他軟體包直接給你丟了,你還能壓垮我嗎?
可能你們的客戶併發訪問量實在太大了,交換機都撐不住了。
這也有辦法。我們可以用多個交換機為我們的秒殺系統服務。
原理就是dns可以對乙個網域名稱返回多個ip,並且對不同的源ip,同乙個網域名稱返回不同的ip。如網通使用者訪問,就返回乙個網通機房的ip;電信使用者訪問,就返回乙個電信機房的ip。也就是用cdn了!
我們可以部署多台交換機為不同的使用者服務。 使用者通過
有需要的聯絡我2317384986 yxxy1717
BugkuCTF 你必須讓他停下
開啟頁面後發現頁面一直在閃動,不難猜到是js在作怪。開啟之後果然發現了重新整理 這不會要了伺服器的命?i want to play dummy game with others but i can t stop stop at panda u will get flag flag is here 給...
能讓曾經你喜歡的人喜歡上你才是你最大的本事。
qq個性簽名 能讓曾經你喜歡的人喜歡上你才是你最大的本事。我空有一身泡妞本領,無奈自己是個妞。如童話,現實如殘渣。要麼堅持愛我 要麼趁早離開 沒什麼事不要找我,有事更不用找我。你不必和我炫耀,那不是你牛逼的資本 別總埋怨老天對你不公,其實老天根本不知道你是誰。涐不怕下地獄 涐怕的是地獄有涐沒沵.別在...
讓客戶喜歡你的十種理由
在與一些成功的 營銷員的交流中,我們不難發現一些規律,面對客戶時,營銷員語言表達是否大方 得體,是否能與客戶產生共鳴,從而在感情上與客戶拉近距離,這將決定他能否從心底裡接受你,近而接愛你產品的最終原因。泛迅oa 時代雜誌主編專訪江西各大公司的知名業務經理,從中獲取各種交際經驗。現總結出10大讓客戶喜...