原創:小姐姐味道(微信公衆號ID:xjjdog),歡迎分享,轉載請保留出處。vue
秒殺系統是一件複雜的事,從咱們上篇文章中就能看出來,洋洋灑灑又臭又長接近5000字。這樣複雜的東西,若是每一個系統都要寫一次,勢必是個很是大的人力浪費。其中一個環節考慮不周,就會功敗垂成。git
從上次在技術交流羣裏聊到秒殺系統的設計,到目前爲止已經招募到8位
對其很是感興趣的小夥伴,主筆編碼。通過你們的討論,感受除了作成一個秒殺的demo,咱們還能夠更近一步,將其作成一個秒殺引擎。程序員
在這裏,xjjdog將和你們分享這個過程。結果並不重要,重要的是思路和過程。你可能會獲取一些框架類
代碼的開發經驗,但願或許如此吧。github
【秒殺】1、系統設計要點,從賣病鵝提及spring
最主要的思路,就是把秒殺引擎當作是一個黑盒,對完成秒殺的邏輯進行屏蔽。一端輸入,一端輸出。也就是說,你把要秒殺的數據,通過清洗倒入秒殺引擎後,剩下的就沒原來系統的什麼事了。數據庫
「精緻秒殺引擎,雲加速,彈性可伸縮高可用架構。SLA整年5個9,綠色無公害,爲您的業務保駕護航。專業的售前技術支持,協助您完成最優配置。」是否是很是熟悉而扯淡的宣傳語?這就是黑盒,我只要完成功能了,你管我是牛鬼蛇神。springboot
從過程上來說,咱們將秒殺的代碼也歸類爲三個階段:準備、秒殺、清算。爲了完成上面的目標,仍是須要對涉及的資源進行進一步抽象。如下是初步定下的一些概念,後續或有變更。bash
根據字面意思,就可以看到這裏抽象的是操做的主體,也就是參與的人。actor會帶有一些附着信息,好比用戶的一些基本信息。這樣,就可以實現一些個體的流控策略,或者風控策略。舉個例子,假若有一個邏輯:最新註冊的帳號沒有秒殺資格。那麼actor的附加信息裏,就應該包含用戶的註冊時間。微信
隊列是秒殺請求的緩衝,是首先落地的地方。不管是內存隊列,仍是分佈式隊列,其實操做起來都是差很少的。咱們也對其進行一下抽象。這樣,經過配置參數,就能夠調節秒殺隊列的行爲和性能。架構
數據的提供者。數據可能來源於一個外部的數據庫(db),也可能來自於外部的推送(push),也可能來自於外部接口的拉取(pull)。這個數據獲取的過程,咱們就給它起個名字,叫作source。固然,這部分的功能也是能夠擴展的,好比source數據來自ES。
主要處理秒殺完成後,數據的去向。與source相似,它是一個反向的動做。處理的是相似庫存扣減一類的落地動做。這個組件的行爲,或許是推送,也或許是直接發送一個事件消息。source和sink,組成了一個秒殺目標的具體數據流向,是黑盒以外的東西。
是時候給秒殺目標起個名字了。它擁有一個在秒殺引擎中惟一的名字:targetID,用來標識是哪種商品。很是很是多的個性化配置參數,就在這裏,好比秒殺開始時間,隊列長度,是否懶加載商品等。
庫存操做指的是在黑盒以內的操做,這些信息會不按期的進行合併,sink到業務端。對stock的操做,就須要保證其正確性和吞吐量。這也是咱們的核心概念之一。
相似消息總線的做用。動做,action,指的是actor所產生的全部行爲的載體,在整個生命週期中,是不可變的(Immutable)。動做會被緩衝,追蹤,調度,記錄,是穿插整個引擎的行爲實體。
runtime是變化的,用於秒殺混沌期的信息緩衝,原則上不會記錄和下沉。咱們的運行單元會作不少運算和判斷,直到最終的數據,達到BASE
的狀態。
秒殺引擎會用到各類各樣的技術,咱們手到拈來,可是也須要一種方式進行分享。配合教程+源碼的方式,會有更好的效果。爲了保證程序的健壯性,會使用單元測試,儘可能的覆蓋代碼;爲了評估整個系統的性能,咱們也會介紹一些壓力測試方面的工具;最後,會使用一個springboot項目集成秒殺引擎,作一個最終的效果。
其中的抽象概念部分,要可以作到動態替換,並提供自定義的擴展方式。
秒殺引擎包含三部分。
一、核心部分
此模塊會依賴儘可能少的組件,以便用在各類開發環境中(不只僅是spring),涵蓋了重要的概念和實現邏輯。會有特別多的精細化配置參數進行性能調節。
二、demo部分
使用springboot、vue、flutter等最流行的技術,展示一個完整的示例。
三、方案部分
對一些特殊場景的優化,或者某個擴展性的主題,出具的具備典型性表明的方案。
用最有營銷力的一個詞來講,就是行業解決方案
。
項目代碼在github,目前只有部分抽象概念。有興趣能夠跟蹤。
https://github.com/xjjdog/seckill-engine
複製代碼
小姐姐味道微信公衆號會持續跟蹤狀態變動和值得一提的技術,採用實踐的方式,對過去的一些知識點進行回顧和穿插。
歡迎加我微信,提出你的寶貴意見。
做者簡介:小姐姐味道 (xjjdog),一個不容許程序員走彎路的公衆號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不同的味道。個人我的微信xjjdog0,歡迎添加好友,進一步交流。