一分鐘瞭解"秒殺"系統
關於秒殺,第一反應都是實現起來比較複雜。難點在於:併發讀+併發寫+設計兜底方案的實現。
比如QQ,雖然資料量很大,但是多數的資料都是細粒度的資料查詢,鎖衝突比較少;但12306涉及到大量的讀寫操作,對可用性,高效能,資料一致都有要求。
在開始前,先說一些基本概念,通常網際網路的應用包含了:
nginx代理層
tomcat站點層
rpc service服務層
資料層(cache和db)
方向上,降低資料層鎖衝突,具體兩大要點:
-
快取降讀
-
降低寫的頻率,將請求攔截在系統上游
所以,優化的方向,也是從上面幾層展開。
一:優化方案:
1:端上的請求攔截(瀏覽器/app)
比如通過答題延長請求發出時間
js做一些基本性的校驗等
2:站點層的請求攔截
同一個uid xxS內才可以請求,比如計數和限速
這裡可以看到,站點層可能承擔了大部分的流量和壓力,所以站點層需要設計成無狀態服務,通過水平擴充套件的方式,分擔壓力;
但是站點層如何限速呢?
-
如果使用redis,那麼redis需要做proxy切分
-
當然,也可以通過nginx七層路由,相同的id落地到相同的tomcat站點上,做記憶體計數
3:服務層的請求攔截
流量削峰,比如根據你的資料庫抗壓能力,計算出tps,或者通過業務庫存計算等
流量削峰解決了什麼問題:
-
服務端處理變得更加平穩
-
節省伺服器的資源成本
如何削峰:
-
排隊:通過訊息佇列來緩衝瞬時流量
4:資料庫處理
分庫分表,熱點資料隔離,讀寫分離等等
二:12306產品方案:
-
對於秒殺系統來說,下單與支付可以分離,所以支付系統基本上可以不用特殊處理
-
不同的地域分時售票等
三:兜底方案
1:降級
比如當秒殺流量達到5W/s時,把一些無關緊要的查詢記錄從之前的100條,降低為10條,這個可以直接由引數來控制
2:拒絕服務
當系統達到一定的閾值時,設定過載保護,比如在nginx層上做限制,直接返回503 code碼等
更多交流,也歡迎您關注我的微信公眾號:
相關推薦
一分鐘瞭解"秒殺"系統
關於秒殺,第一反應都是實現起來比較複雜。難點在於:併發讀+併發寫+設計兜底方案的實現。 比如QQ,雖然資料量很大,但是多數的資料都是細粒度的資料查詢,鎖衝突比較少;但12306涉及到大量的讀寫操作,對可用性,高效能,資料一致都有要求。 在開始前,先說一些基本概念,通常網際網路的應用
一分鐘瞭解“MAC OS 和 Windows系統的優劣對比”
先上結論: 如果你需要一臺電腦用來寫文件和程式碼,你的工作過程中需要頻繁用到不同程式之間的切換(比如工作過程中需要參考網上資料或者其他文獻),或者需要頻繁在不同資料夾之間操作(複製剪下等),或者需要高效精確的滑鼠操作(比如處理Excel表格)那麼強烈建議你不要用蘋果電腦,M
解密 Redis 助力雙十一背後電商秒殺系統
秒殺活動是絕大部分電商選擇的低價促銷、推廣品牌的方式。不僅可以給平臺帶來使用者量,還可以提高平臺知名度。一個好的秒殺系統,可以提高平臺系統的穩定性和公平性,獲得更好的使用者體驗,提升平臺的口碑,從而提升秒殺活動的最大價值。 本文討論如何利用 Redis 快取設計高併發的秒殺系統。 秒殺的特徵 秒殺活動對
SSM專案實戰(一)--- 高併發秒殺系統之DAO層
專案為慕課網上 搞定Java SSM框架開發的綜合案例–實現一個秒殺系統案例。 1.首先搭建專案 使用Maven構建來管理依賴項,pom.xml檔案: 此pom.xml可作為大多數ssm專案依賴的參考 <project xmlns="http:
一分鐘瞭解spring之FactoryBean
轉自 http://blog.51cto.com/4247649/2118353 今天主要從以下兩方面來介紹一下FactoryBean FactoryBean是什麼 FactoryBean使用演示 1,FactoryBean是什麼 FactoryB
帶你一步步瞭解業務測打款系統的建立
1.專案背景 初始階段 業務方訂單稽核通過後,會有離線任務不斷輪訓向支付中心發起呼叫,支付中心打款處理完成後會返回ifSuccess(是否落庫),state,code,error Message等。如果落庫且code為打款成功,訂單業務狀態會修改為打款成功。 發展階段 為了配合業務發展,會增加各種活動來拉動訂
一分鐘瞭解CONSTRAINT約束的用法
場景 設計資料庫表,用來儲存學生和班級資訊表 第一種情況: 將學生資訊和班級資訊儲存到一張表中 sno sname classno cname 1 周杰倫 001 高三1班 2 林俊杰
五分鐘瞭解什麼是Google檔案系統(GFS)?
簡介 Google檔案系統是構建在廉價伺服器之上的大型分散式檔案系統。它將伺服器故障視為正常現象,通過軟體的方式自動容錯,在保證系統可靠性和可用性的同時,大大降低系統的成本 系統架構 GFS系統的節點可以分為三種角色 GFS Master(主控伺服器) GFS
一分鐘瞭解Allegro匯入DXF檔案
一分鐘瞭解Allegro匯入DXF檔案 Allegro, pads,PCB線路板設計,小北PCB 很高興與大家分享一分鐘瞭解Allegro匯入DXF檔案的方法,請問您們,剛學習這個軟體時,您是否遇到過如何匯入DXF檔案的問題呢?應該我們每一個剛學習者都會遇到,今天我們小北PCB設計
一分鐘瞭解“Matlab畫三維空間中的點scatter3”
用法:scatter3(x,y,z,'.',c) % c 為顏色,需和x,y,z長度相同 例子: x=[4229042.63 4230585.02 4231384.96 4231773.63 4233028.58 4233296.71
一分鐘瞭解“matlab產生某個概率分佈的概率密度函式”
網上或者matlab文件裡查詢pdf函式,幾乎所有能遇到的概率密度函式都會在裡面遇到。 語法: y = pdf('name',x,A) y = pdf('name',x,A,B) y = pdf('name',x,A,B,C) y = pdf('name',x,A,
21歲被人“封神”,曾一分鐘黑了阿里巴巴後臺系統!
這個被譽為“阿里神”的吳瀚清是馬雲公司旗下一個最特別的存在,1985年出生的他自從進入公司以來任何一個人都會恭恭敬敬的稱呼他一聲”道哥“,在去年2017年這位年輕的小夥子咋世界牛人協會中被世界稱為最有可能改變世界的牛人之一,有這樣高稱呼的他絕對實力不凡! 提起阿里巴巴想
一分鐘瞭解Mysql的間隙鎖——《深究Mysql鎖》
什麼是間隙鎖? 間隙鎖是一個在索引記錄之間的間隙上的鎖。 間隙鎖的作用 保證某個間隙內的資料在鎖定情況下不會發生任何變化。比如我mysql預設隔離級別下的可重複讀(RR)。 當使用唯一索引來搜尋唯一行的語句時,不需要間隙鎖定。如下面語句的id列有唯一索引,此時只會對i
一場完美的“秒殺”:API加速的業務邏輯
作者:叢磊,白山雲科技合夥人兼工程副總裁 一天清晨,我被一個客戶電話驚醒,客戶異常焦急,尋問CDN能不能幫助他們解決“秒殺”的問題,他們昨天剛剛進行了“整點秒殺活動”,結果併發量過大,導致服務宕機,使用者投訴。為了理清思路,我問了對方三個問題:(1)服務宕
一分鐘瞭解Android橫豎屏 mdpi hdpi xhdpi xxhdpi xxxhdpi
DPI:每英寸畫素數 簡單的螢幕解析度計算方法: DisplayMetrics metrics = this.getResources().getDisplayMetrics(); float density = metrics.density; int dpi =
一分鐘瞭解“matlab用矩陣寫法代替for迴圈”
K>> [xx,yy]=meshgrid(-3:3,-3:3); K>> [email protected](x,y) x^2+y^2; K>> arrayfun(f,xx,yy) ans = 18 13 1
一分鐘瞭解自動化測試(進軍自動化必看)
引子 寫在最前面:目前自動化測試並不屬於新鮮的事物,或者說自動化測試的各種方法論已經層出不窮,但是,能夠明白自動化測試並很好落地實施的團隊還不是非常多,我們接來下用通俗的方式來介紹自動化測試…… 本文共有2410字,閱讀需要大約一分鐘。 首先我們從招聘崗位需求說起。
一分鐘瞭解微服務的好處和陷阱
微服務架構設計代表了一種架構設計思想,配合現在的容器技術(如Docker),可在軟體開發流程、部署、服務維護等各方面產生效率提升。 但不一定所有的業務場景都適合微服務,有時候非常簡單的業務場景下,微服務反而會降低效率。什麼是微服務,其特性,好處及陷阱,是本文要討論的內容
一分鐘瞭解"matlab用meshgrid實現for迴圈的遍歷功能"
用for寫法: for i=[1,2,3] for j=[4,5] fprintf([num2str(i*10+j),' ']) end end 結果是: 14 15 24 25 34 35 用meshgrid寫法: [c,d]=meshgrid([1,2,3]
實戰講解高併發和秒殺搶購系統設計
網際網路特別是電商平臺,阿里雙11秒殺、還有12306春運搶票、以及平時各種節假日搶購活動等,都是典型的高併發場景。 這類場景最大的特徵就是活動週期短,瞬間流量大(高併發),大量的人短期湧入伺服器搶購,但是數量有限,最終只有少數人能成功下單。 這裡,就來講一講對應該場