今天看了一篇好文章,裡面一些思路頗值得借鑒。先摘錄總結精華。然後看看梁山好漢如何處理秒殺系統(系統隔離/系統搭建/風控過濾/削峰/信号廣播......)。
因為秒殺活動是有計劃的,并且在短時間内會爆發大量的請求。為了不影響現有的業務系統的正常運作,我們需要把它和現有的系統做隔離。即使秒殺活動出現問題也不會影響現有的系統。隔離的設計思路可以從三個次元來思考:業務隔離/技術隔離/資料庫隔離。
在秒殺活動開始之前,可以設計一個“熱場”。“熱場”的形式多種多樣,例如:分享活動領優惠券,領秒殺名額等等。“熱場”的形式不重要,重要的是通過它擷取一些準備資訊。例如:有可能參與的使用者數,他們的地域分布,他們感興趣的商品。為後面的技術架構提供資料支援。
為了避免惡意程式參與秒殺,在用戶端會設計一些問答或者滑塊的功能,減少此類機器人對伺服器的壓力。 伺服器也會過濾一些疑似機器人或者惡意請求。例如:從固定 IP 過來的,頻率過高的請求。
瞬時的海量請求好比請求的“高峰”,我們架構系統的目的就是“削峰”。 需要使用服務叢集和水準擴充,讓“高峰”請求分流到不同的伺服器進行處理。同時,還會利用緩存和隊列技術減輕應用處理的壓力,通過異步請求的方式做到最終一緻性。由于是多線程操作,而且商品的額度有限,為了解決超賣的問題,需要考慮程序鎖的問題。
秒殺活動持續時間短,瞬時資料量大。為了不影響現有資料庫的正常業務,可以建立新的庫或者表來處理。在秒殺結束以後,需要把這部分資料同步到主業務系統中,或者查詢表中。 我們在秒殺之前,需要通過業務的手段,例如:熱場活動,問卷調查,曆史資料分析。通過他們去估算這次秒殺可能需要存儲的資料量。
我看到秒殺這個概念,第一時間就想到了"呼延灼三千連環甲馬"。這古今兩個系統的特點非常相似。
秒殺特點:秒殺時大量使用者會在同一時間,搶購同一商品,網站瞬時流量激增。
三千連環馬特點:“每一隊三十匹馬,一齊跑發,不容你不向前走。那連環馬軍,漫山遍野,橫沖直撞将來”。
梁山的秒殺系統實作得非常好,很多手法暗合我們如今的處理機制。
梁山也有“熱場”。秒殺系統的“熱場”是我們事先主動設計執行的。但梁山就是遭遇戰變成了“熱場”。通過“熱場”活動,梁山發現确實擋不住這個連環馬的沖擊,也對連環馬這個秒殺活動的特點有了深入的了解。
"前面五隊軍馬望見,便亂跑了,策立不定;後面大隊人馬,攔當不住,各自逃生。就水寨裡整點人馬,折其大半,卻喜衆頭領都全;雖然折了些馬匹,都救得性命。" 。
梁山專門打造了秒殺系統來對付連環馬,這個是專門秒殺系統,不是梁山正常戰鬥序列。
"每十個會使鈎鐮槍的,間着十個撓鈎手,但見馬到,一攪鈎翻,便把撓鈎搭将入去捉了"。
梁山專門從矽谷招聘了世界頂尖技術高手徐甯攜帶技術入股。
"當下徐甯選軍已罷,便下聚義廳來,拿起一把鈎鐮槍,自使一回。衆人見了喝采" "衆軍漢見了徐甯使鈎鐮槍,都喜歡。就當日為始,将選揀精銳壯健之人,曉夜習學。又教步軍藏林伏草,鈎蹄拽腿,下面三路暗法。不到半月之間,教成山寨五七百人"
梁山為了防止連環馬在秒殺活動未開始時候惡意侵入,進行了風控過濾,打造了防禦系統。
"山寨中隻教水軍頭領牢守各處灘頭,水底釘了暗樁。呼延灼雖是在山西山北兩路出哨,決不能夠到山寨邊"
梁山也有削峰操作,分别是"分流削峰"/"限流削峰"
"今将步軍下山,分作十隊誘敵"
這就是"分流削峰,服務叢集和水準擴充,讓“高峰”請求分流到不同的伺服器進行處理"
"但見軍馬沖掩将來,都望蘆葦荊棘林中亂走。平川窄路,也如此埋伏。"
這就是"限流削峰",而且連環馬面對"蘆葦/荊棘林/窄路",隻能在這種地形前面排隊依次通過,這不就相當于用隊列進行削峰嘛。
"說猶未了,隻聽得北邊一聲炮響。呼延灼罵道:“這炮必是淩振從賊,教他施放" "正欲分兵之際,隻見西邊又是四隊人馬起來,呼延灼心慌;又聽的正北上連珠炮響,一帶直接到土坡上"
這一次,徹底弄懂“秒殺系統” http://www.sohu.com/a/341289196_728045