秒殺程式架構演進

2022-08-09 06:03:12 字數 695 閱讀 5212

最近的專案上,有秒殺的需求,我負責技術驗證和可行性研究。技術選型比較明確,springboot+mysql+redis,基本上做秒殺都是這麼個選型。秒殺主要是兩個訴求,快還要準。不能慢,慢了是小時殺不是秒殺。不准,那就是浪費成本了。

靠程式加鎖和mysql的事務可以實現,但是太慢,無法支撐秒殺業務的需求。如果前置部署一套redis,通過decr指令來判斷,由於事務隔離的問題並不能保證不出現超賣,只是由於redis的效能很好出現的少一些。實測20併發5000請求大致出現4-6次超賣,已經很高了。

由於秒殺程式可售出的貨物量是一定的,那麼可以將這部分商品預熱到redis中,使用list存放。秒殺開始之前lpush進去,秒殺開始後rpop取數。如果還有剩餘,rpop可以取到結果。如果沒有庫存,redis取到的是nil,認為無庫存。對於每天準點補充庫存的情況,可以使用定時任務進行push操作。

redis裡佇列的push和pop操作都是o(1)的複雜度,效能很好。此處不需要使用llen判斷是否有剩餘,pop取數成功即為庫存。雖然llen也是常量級,但是畢竟是操作,能免則免。同理,不需要設定乙個變數來表示某商品是否可以秒殺,直接pop即可。

此處如果需要記錄日誌,可以將日誌push到佇列中,程式裡使用fixedrate定時排程,持久化到mysql。基本結構如下圖所示。

企業架構演進

其中的分析階段也就包括了架構設計工作,逐漸又被細分為概要設計和詳細設計。但是這個時期的架構設計主要還是針對軟體設計,還沒有發展出成形的企業架構理論。螺旋模型通過持續對原型進行驗證式 增量交付的方式,彌補 瀑布模型 在需求管理方面不足,是一種對需求的漸進式探索,也加強了對專案風險的管理。敏捷宣言四個核...

秒殺的架構

昨天回答的太差了,明明都是些很簡單的東西,我居然回答的那麼差 讓我很有挫敗感 一些概念性的東西這裡就不說了,下面兩個問題,重新梳理一下 1,一致性雜湊虛擬節點與真實節點對映關係的建立 現在我們使用的是字串構成的圓環,每台真實伺服器生成n個虛擬節點,虛擬節點生成的規則為,用 i遍歷從0到n 1,對字串...

設想秒殺架構

b color red 背景設想 color b 千萬使用者在同一時間點向伺服器傳送請求 b color red 伺服器猜測 color b 1 千台lvs或者nginx等負載均衡伺服器 2 上萬台web伺服器集群處理前端伺服器 後的http請求 3 千台memcache等快取伺服器或者redis類...