我是一個秒殺請求,正在逃離這顆星球……

2020-12-22 紙鶴視界

星球簡介

地點:β-410 星系,A-731電商星球。

時間:新紀元 2036 年。

星球簡介:

中文名:A-731電商星球外文名:A-731 Mall分類:行星公轉周期:一年常駐用戶:中間件工作者、各種請求。星球總歷史:二十萬年。星球危機

我是一個秒殺請求,每天的工作就是將秒殺請求的數據運送給後端工作者。

這天我在 Nginx 轉發伺服器上遇見了請求小空,我跟小空說有重要消息不方便在現在告訴他,下班再約,然後就都匆匆趕路了,因為我倆都要快速將請求數據運送到訂單星球去。

我和小空晚上十點下班後來到一家酒吧,點了兩杯 mojito,找了一個角落坐下。

小空:你最近看起來心事重重。

我:你有沒有發現最近我們星球的訂單數急劇增加,每天有一千萬訂單數據產生,也不是一天、兩天的事了。

小空:難怪我每天加班到晚上十點來運送請求數據。

我:我有個舅舅在航天局上班,告訴我說我們星球承載不了那麼多請求和訂單數據,不久就會出現行星大爆炸

小空:那怎麼辦?

我:我們可以去 100 光年外的 T-714 星球,但是只能通過秒殺通道坐時空穿梭機去那顆星球。而且名額有限制,不知道我有沒有機會登上穿梭機。

我:明天通道會開啟兩次,上午十點和下午兩點。你明天和我一起去吧!

小空:好的。

涉及的知識點:

這裡的行星大爆炸指的是什麼? 因訂單數據量很大,資料庫撐不住了。資料庫可能宕機。因每天有大量請求發送到伺服器,伺服器也扛不住了。伺服器可能宕機。秒殺通道每天開啟兩次代表了什麼? 流量錯峰 ,將流量分攤到兩個秒殺場次。當然流量錯峰 的手段還有輸入驗證、加入購物車等分攤流量的操作。秒殺通道

地點:A-731 星球機場

時間:09 : 45

「請前往 T-714 星球的請求旅客到 Y1 站臺排隊等待進入特殊通道, 15 分鐘後開始進入穿梭機大廳」。大廳的廣播連續播放了三遍。

我走向了特殊通道,看到通道旁立著一個牌子:秒殺通道,只給秒殺請求使用。

涉及知識點:

秒殺場景為什麼單獨弄了條通道? 秒殺業務為了不影響系統的其他業務單獨部署了一套秒殺系統。總結為服務單一職責 + 獨立部署實時大屏

一抬頭看到通道上方有一個大屏,在不斷播放 T-714 星球的照片,以及機票的訂單信息。

有兩個穿制服的工作者正在大屏旁巡邏。一個制服上印著 Nginx,一個制服上印著 CDN。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6P1fVR1b-1603325598167)(http://cdn.jayh.club/blog/20201021/162136369.png)]

涉及知識點:

Nginx 制服:穿 Nginx 制服的工作者在維護 Nginx 的靜態和動態資源。商品詳情頁是一個靜態頁面,將這些靜態頁面存儲到 Nginx 伺服器上,訪問靜態資源時,請求先到 Nginx,然後 Nginx 伺服器通過請求的 URL 連結來匹配是否是訪問的靜態資源。大屏的商品詳情頁並不是通過發送請求從後臺伺服器拿到的。其實實現了動靜分離一張圖解釋 Nginx 動靜分離

靜態資源比如 HTML 文件極少變化,就可以專門放到一臺伺服器上,直接訪問,不需要與後臺伺服器交互(比如 Tomcat)。動態資源比如需要從後臺拿到有多少人購買了商品,發送下單請求來存儲數據,這些都稱作動態資源,不能狹隘的理解為看得見的資源,廣義上可以包括獲取邏輯處理的結果,執行存儲數據等操作。CDN 制服什麼是 CDN:CDN 大白話解釋就是用戶就近獲取資源,減少網絡傳輸時間,提高訪問速度。Nginx 上放 HTML文件,而 CDN 上則放 HTML 引入的圖片文件、腳本文件。穿 CDN 制服的工作者在維護 CDN 的資源。一張流程圖解釋 CDN 工作原理

驗證通道

時間:10:00

「驗證通道已開啟,請攜帶密碼進入!」 又是播放了三遍廣播。

涉及的知識點:

為什麼需要密碼? 為了防止大量模擬的秒殺請求進入業務處理流程,所以先加一道驗證,丟棄這些假請求。怎麼做到的?前端網頁先發送請求拿到密碼,點擊搶購時,請求體中攜帶加密密碼,後端校驗密碼是否匹配。可以通過 MD5 加密。總結為秒殺請求加密穿梭機大廳

經過驗證通道的篩選後,有一半的假請求被擋在門外,像我這種拿到了正確密碼的順利進入了穿梭機大廳。

來到大廳,發現大廳的正中央擺放著一個顯示器,上面顯示的紅色數字 100 赫然映入眼中。

顯示屏的左手邊站著一位穿著 Redis 統一制服的靚女。在一旁的我偷聽到原來她是控制顯示器顯示穿梭機剩餘數量的。如果數字變為 0 ,則表示穿梭機已經全部被佔用,後來的人就得無功而返了。

涉及的知識點:

秒殺場景中,查詢剩餘庫存並不是直接查資料庫,而是查 Redis 緩存的。為什麼是查緩存?因為查緩存的速度要遠遠快於查資料庫,減少了響應時間,而且對資料庫的壓力減小了很多。如果很多查庫存的請求都到資料庫了,那資料庫就要崩了,而且資料庫幹不了其他的活了。搶票

顯示屏的右手邊站著一位西裝筆挺的年輕帥哥,看到他的袖口上掛著一個紅袖章,印著 Redisson 字樣。他一臉嚴肅的模樣,對大廳內黑壓壓一片的請求熟視無睹。可能是見慣了這種場景吧。

正在打量這位帥哥時,發現他的左手拿著一疊機票,沒錯,有了一張機票就可以登入穿梭機了。我以百米衝速的速度到達了他面前,到達他面前時,已經有十幾個請求也到了他身邊,他按照先來後到的順序依次發放機票,到我的時候,機票已經只剩幾張了,慶幸的是我的百米衝速幫我搶到了一張機票。我問帥哥是否可以再發一張票給我,他拒絕了。

每一次發放票,穿 Redis 制服的靚女都會操作顯示屏,讓其數量減一。

十秒鐘後,票已經發完,顯示屏顯示數字 0 。

涉及的知識點:

Redisson 是啥呢?Redis 客戶端,解決了分布式的一些常見問題。這裡其實用到了 Redisson 的信號量功能,總共有 100 張票,也就是 100 個信號量,而且票的數量不會因為多線程並發或分布式系統的原因而導致票的數量被超賣。比如賣出了 101 張票。每個人只能獲得一張票,這就是秒殺系統中涉及到的冪等性校驗,不能重複搶票。

登機牌

發放機票的帥哥告訴我,拿到票後,到 A 窗口排隊付款,才能拿到登記牌。於是我和另外 99 個請求一起在 A 窗口排隊了。

看到一個請求想要放棄付款了,說是機票太貴了,然後準備離開大廳時,被發放機票的帥哥攔住了,他問請求是否要考慮下,有 15 分鐘的考慮時間,如果請求還是覺得不行,可以將機票還給他,他可以再發放給其他人。

涉及的知識點:

秒殺系統中常用的隊列削峰 。秒殺成功的請求,進入隊列,慢慢創建訂單、扣減庫存。秒殺成功後,快速告訴用戶已經秒殺成功,而不是等待訂單完在告訴用戶,那用戶就要多等一會了,影響體驗。為什麼要做隊列削峰?成功的請求不必一下子都去資料庫創建訂單,這樣對資料庫的壓力也會小一些。在秒殺場景中,很有可能有用戶搶到了但是不付款的場景,這個時候庫存是要加回去的,可以提供給其他用戶。啟航

訂單創建成功後,我順利拿到了登機牌,通過了登機牌的校驗後,成功登上了穿梭機。

出發,去往 T-714 星球。聽說那個星球的資料庫進行了分庫分表、服務也拆分成了微服務。

總結

上面通過科幻小說的方式來講解了秒殺系統中關注的點,但並沒有講全,所以下面列出了秒殺系統關注的八大點:

服務單一職責、獨立部署庫存預熱、快速扣減秒殺連結加密動靜分離惡意請求攔截流量錯峰限流&熔斷&降級隊列削峰只講原理好像不得勁,是不是要來篇實戰!

你好,我是悟空哥,「7年項目開發經驗,全棧工程師,開發組長,超喜歡圖解編程底層原理」我還手寫了 2 個小程序,Java 刷題小程序,PMP 刷題小程序,點擊我的公眾號菜單打開! 另外有 111 本架構師資料以及 1000 道 Java 面試題,都整理成了PDF。 可以關注公眾號 「悟空聊架構」 回復 悟空 領取優質資料。

「轉發->在看->點讚->收藏->評論!!!」是對我最大的支持!

我是悟空哥,努力變強,變身超級賽亞人!我們下期見!

相關焦點

  • 你想過逃離地球嗎?宜居星球陸續被發現,星球移民計劃或將實現
    你有沒有萌生過一種逃離地球的感覺?著名樂隊五月天有一首名為《逃離地球表面》的歌曲,其歌詞輕鬆有趣,主要內容是勸告人類拋棄手中的手機電腦,逃離現實世界中的壓力,逃離地球的表面。這首歌曲創意新穎,再配上輕鬆有趣的調子,聽起來別有一番風味,因而在年輕人群體圈子中廣為流傳。
  • 儘管如此,我們仍是這顆星球的主宰者。——讀疫情新聞有感
    我記得,臘月二十九的晚上打電話給老媽,家族裡有個遠親在武漢定居,好像每年都會回來過年,我以為受過高等教育的他會選擇留在他鄉,犧牲小家的團圓以成就大家的安全,沒曾想他開車帶著全家回到了村裡,雖然已經被隔離且沒有異常,可我心裡還是不能平復。
  • 推薦三篇星際科幻小說:這顆星球需要我,我出發了
    推薦三篇星際科幻小說:這顆星球需要我,我出發了大家好,今天小編為大家推薦三篇星際科幻小說:這顆星球需要我,我出發了,希望大家喜歡,如果有喜歡看小說的朋友可以關注小編,小編將持續為您推薦精彩好看的小說哦!
  • 地球的「新朋友」,一個星球正在靠近地球,奇怪的是它被改造過
    閱讀本文之前,請先點擊右上方的「關注」,每天更新精彩內容,每天分享最新文章,了解世界,從這裡開始,喜歡文章請點擊關注,您的支持是我前進的動力,有不足的地方,也希望大家能夠多多指點,編者一定會努力改正的,謝謝支持!
  • Methuselah星球:這顆星球比宇宙還要大2億歲
    這是件不可思議的事,在上個世紀,一個驚人的發現使它變為現實——科學家發現Methuselah星球比宇宙更古老。Methuselah星球是什麼?有可能的,因為星球的構成意味著當鐵在宇宙中廣泛存在之前,這顆星球就已經形成了,表明它是有可能比宇宙更古老的。
  • 《逃離塔科夫》玩家請求鎖國區 因中國外掛泛濫
    硬核MMOFPS《逃離塔科夫》近日的官方中文正式版已經上線,這款火遍全球的遊戲一時間《逃離塔科夫》在國內熱度暴漲。當然外掛是所有遊戲難以解決的問題,近日,一位國外玩家就在Reddit上請求官方將《逃離塔科夫》鎖國區,因為中國的外掛實在太泛濫了。
  • 用力去愛這顆藍色的星球!
    今天是第51個世界地球日今年的宣傳主題為「珍愛地球 人與自然和諧共生」保護地球,保護環境一直是人類永恆的主題美好的世界源於和諧的自然人類只有一個地球作為地球村的公民我們熱愛這顆藍色的星球更離不開這個賴以生存的家園2020年一場疫情雖改變了我們的生活卻也讓我們緊緊相連我們來自同一個地球家園生存命運,休戚與共保護地球資源和生態環境是我們共同的責任大自然的和諧共生需要大家一起作出努力為了保護地球,創造自然和諧
  • NASA觀察到木衛二會發出螢光,這顆星球發光的原因是什麼?
    地球的表面雖然有70%的面積被海水覆蓋,然而地球上的水卻不是太陽系不是最多,科學家認為木衛二和土衛二這兩顆冰凍星球上的水遠超過地球,由於這兩顆星球表面都有一層厚厚的冰,科學家甚至認為在冰層下面的海洋中可能有生命存在,目前NASA對外公布了一項新發現,在觀察木衛二歐羅巴(
  • 探測器發回照片,這顆星球發現疑似「焊痕」現象,長達1300公裡
    即使我們至今都還沒找到他們的跡象,這並不影響我們對宇宙的探索,也不影響我們對一些星球進行觀測。由於有一些星球離我們相對較遠,所以在地球運行的望遠鏡很難看到它們的細節,不過在航天技術的幫助下,我們人類現在已經可以將一些探測器送到外星球附近,環繞外星球飛行,甚至可以登陸到外星球表面進行搜尋。
  • 原來是這顆星球惹的禍
    尼比魯這顆星球是在蘇美爾文明出土的文獻中記載的。根據蘇美爾文明的文獻記載,蘇美爾人所信奉的「神」正是來自尼比魯星球,這顆星球和土星或者木星差不多大,擁有巨大的橢圓形運行軌道,儘管它並非屬於太陽系,但是卻會每3600年進入太陽系一次。每當它進入太陽系的時候,其軌道經過的近日點的位置就在於太陽系的中間,也就是火星和木星之間,而遠日點是在遠離太陽系的宇宙深處。
  • 《星際穿越》中有個星球,星球上的7年等於地球的1小時
    在電影《星際穿越》裡面的確有這樣一個星球,這是男主去宇宙遇到第一個星球,也是計劃目標的一號星球,名叫米勒!這顆星球上的一個小時等於外界、以及地球上的7個小時!這種情況是由「黑洞引力」引起的一種現象!
  • 世界地球日,與NASA一起探索這顆美麗的藍色星球
    圖片來源:NASA/珍妮 莫塔(Jenny Mottar) 50年前,也就是1970年的4月22日,全世界的環保主義者慶祝了第一個世界地球日(Earth Day),數千萬人聚集在一起,宣揚著保護我們這顆美麗藍色星球的重要性。
  • 探索星球,《我的起源》聯動BBC紀錄片《七個世界,一個星球》[視頻...
    我的起源聯動《七個世界,一個星球》,自從這款遊戲上架以後,瞬間火爆全球,本次的聯動就是為了讓玩家們擁有更多新的探索玩法,例如建造家園、馴養神奇動物、探索更大的世界等,讓我們相聚在一起,共同瓦全全新的趣味玩法。
  • 星球大戰、哈利波特和守望先鋒,樂高正在為你建立一個帝國
    因為跑車只是樂高的冰山一角,樂高最新的哈利波特系列、守望先鋒系列和星球大戰系列同樣很有吸引力。樂高哈利波特系列作為八部哈利波特電影的忠實粉絲,我第一次看到樂高哈利波特系列宣傳圖還是非常震撼的,尤其是這個系列的主打產品:編號 71043 的霍格沃茲城堡豪華收藏版。它以 6020 顆樂高積木還原了將近 20 種經典電影場景,覆蓋了整個八部電影。
  • 我的世界:飛船墜毀,墜落至六面體星球空島,你該如何活下去
    Hi~各位MC玩家們,今天為大家帶來一個有趣的MC生存地圖,墜入無人星球,醒來後的你發現了一絲異常,你該如何逃離這個奇怪的星球?但是你認為這還不夠安全,因此你到庇護所附近收集了一些補給品…這顆星球雖然很平靜,但是你覺得無論如何都要保持冷靜,因為外表很可能是欺騙人的…地圖名:一顆星球生存進入地圖你會發現你出生在一間小木屋內,小木屋裡有一個補給箱子。拿上裡面的補給品星球探險就正式開始了!打開木門的那一刻,這顆星球的景色盡收眼底(光影效果)。
  • 宇宙中的神奇星球,有的暗無天日,有的正在逐漸消亡!
    我們都知道,宇宙是我們給這個天體雲集的空間,起的一個名字而已,它到底有多大,到底為什麼存在,目前還沒有人可以下定論,但是可以肯定的一點就是,有些星球我們是可以通過數據來計算其信息的,比如這幾個宇宙中的奇葩星球,它們的特性就大大的顛覆了我們的三觀。
  • 《小王子》:我的星球很簡單,世界也是,願你每天開心快樂
    第一次見面,小王子請求飛行員給他畫一隻綿羊,飛行員仿佛挨了雷劈似的,因為六歲那年,他想當畫家的志氣就已經被大人們打消了,除了肚皮閉上的蟒蛇和肚皮敞開的蟒蛇,他什麼都沒畫過。不管飛行員說什麼,小王子一直重複給他畫一隻綿羊。飛行員畫了很多隻綿羊,小王子都不滿意,最後飛行員畫了一個盒子,說他想要的綿羊在裡面,這時候的小王子顯得很高興,說這就是他想要的。
  • 網易雲熱評情句|我環遊整個宇宙,只想要你這顆小小星球
    我環遊整個宇宙,只想要你這顆小小星球。大大的宇宙,小小的星球,而溫柔的你,一直留在我心裡。I travel around the universe and just want you on this little planet.
  • 這顆星球比俄羅斯的面積要小,直徑卻符合餘弦函數的變化?
    相信對於宇宙只是感興趣的朋友們一定不會忘記這顆"世紀悲慘的行星",這顆天體就是曾經位列太陽系第九大行星的冥王星.這顆星球於1930年被天文學家們發現,並被命名為普魯託,在羅馬神話中普魯託是掌管冥界之神,所以普魯託也被譯為冥王星.值得一提的是,普魯託的名字一經媒體宣傳就被大眾廣為接受,迪士尼的著名卡通人物米老鼠的寵物布魯託很有可能就是受冥王星名字的啟發創造出來的.
  • 福利丨救救這顆「唯一的星球」
    每一個人都應該深刻認識到,其他國家並非單純意味著更加新穎的商機,或者更加開闊的商戰市場,他們的環境案例也不只是珍貴的教訓與手段,我們與他們共享著「同一個」家園,共同擁有著地球這顆「唯一的星球」。本周福利「同一顆星球」叢書(《塵暴》《環境、權力與不公》《環境與社會》《危險的年代》)前方預警,福利來襲堪薩斯的黑色星期日就像一塊黑色的滾下來的幕布,遮蓋了我們的城市。我們想,這就是我們的最後審判;我們想,這就是我們的末日。