摘要:在報名當(dāng)天涌入海量考生,并發(fā)數(shù)飆升至,導(dǎo)致系統(tǒng)宕機(jī),拒絕服務(wù),導(dǎo)致考生無法報名,輿情嘩然。所以,用來支持并發(fā),是絕不可能的?;蛘咧苯釉趹?yīng)用服務(wù)器上做操作,拋棄掉無法響應(yīng)的請求,避免流量拖垮整個系統(tǒng)。
在《這垃圾APP,差點毀了70萬高考生》一文中,我們的報考app是用5W rmb 向供應(yīng)商采購。在報名當(dāng)天涌入海量考生,并發(fā)數(shù)飆升至34W,導(dǎo)致系統(tǒng)宕機(jī),拒絕服務(wù),導(dǎo)致考生無法報名,輿情嘩然。
那么5W rmb 能否支持34W并發(fā)呢?
先不考慮服務(wù)器資源是否夠,瓶頸會首先出現(xiàn)在數(shù)據(jù)庫讀寫,假設(shè)現(xiàn)在有34W并發(fā),而且根據(jù)訪問性質(zhì)來看應(yīng)該是報名操作,而報名操作是帶有數(shù)據(jù)庫CRUD的,Mysql的最大連接數(shù)是2000(假設(shè)沒做分庫分表,5W rmb讓開發(fā)商做分庫分表顯然是不可能的),一般用到80%就很不錯了,所以連接數(shù)用1600來算。然后假設(shè)數(shù)據(jù)庫能在100ms內(nèi)返回(想必也不是什么好機(jī)器),那么一個連接1s能進(jìn)行10次操作,那么1600連接用滿,能進(jìn)行1.6W次數(shù)據(jù)庫操作。
但這個也只是理論上的峰值,在實際項目中,單庫是絕達(dá)不到1.6W寫入的,并且還是涉及到多表操作的情況下。
實際上根據(jù)《高性能MySQL》第三版 1.5小節(jié),在如下的測試環(huán)境中
測試機(jī)器Cisco UCSC250
內(nèi)存384GB
存儲引擎是InnoDB
測試的數(shù)據(jù)集2.5GB
MySQL的buffer pool設(shè)置為4GB
所以在內(nèi)存為384G的機(jī)器上,吞吐量不會超過8000。那么384G機(jī)器要多少錢呢?
這是64G機(jī)器的價格,因此384=646 61.8W=10.8W/年
因此,如果要并發(fā)支持到8000,光數(shù)據(jù)庫就至少需要10W/Y。當(dāng)然,這是假設(shè)請求在1s內(nèi)返回的情況,假設(shè)我們允許服務(wù)能在5s內(nèi)返回,那么此時并發(fā)能支持到4W。還是在不考慮服務(wù)器,網(wǎng)絡(luò)損耗的情況下,實際上是遠(yuǎn)遠(yuǎn)達(dá)不到的。
所以,用5w來支持38w并發(fā),是絕不可能的。
回到我們剛才的計算,假設(shè)數(shù)據(jù)庫吞吐量到達(dá)理論峰值,能支持8000用戶同時訪問,如果每個客戶能等待5s的化,能支持4w用戶(前提是這些用戶不可以同時訪問,需要在5s內(nèi)做到均勻分布,此時需要通過限流等手段來實現(xiàn))
要支持8000用戶同時訪問,又需要多少個應(yīng)用服務(wù)器呢?
假設(shè)我們使用tomcat服務(wù),每個線程所占空間為8M,那么光tomcat線程就需要: 80008=64000=64G,當(dāng)然還需要有主機(jī)內(nèi)存,損耗啥的,按照一倍計算就是128G,那么需要是21.8W=3.6W
所以,如果需要支持4w個用戶5s延時的訪問,需要3.6+10.8= 14.4w rmb
這還只是服務(wù)器的錢,不算開發(fā)成本在內(nèi)
那么,如果要支持38w的并發(fā)報名呢?這已經(jīng)是一個相當(dāng)大的并發(fā)量了,首先需要考慮的是拋棄掉一部分流量,可以在cdn就直接拋棄,或是nginx,或者直接在應(yīng)用服務(wù)器上,比如在這種情況下就只能保持8000/380000 = 2%,只能有2%的請求允許進(jìn)來。
可以通過nginx+redis的方式拋棄掉98%的請求,這樣可以不用浪費應(yīng)用服務(wù)器資源?;蛘咧苯釉趹?yīng)用服務(wù)器上做操作,拋棄掉無法響應(yīng)的請求,避免流量拖垮整個系統(tǒng)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/72985.html
摘要:摘要隨著用戶越來越多地使用阿里云的服務(wù),如何用最小的成本來保有,成為用戶越來越重要的關(guān)注點。為了更好的服務(wù)客戶,團(tuán)隊調(diào)整了系統(tǒng)盤的最小容量限制。 摘要: 隨著用戶越來越多地使用阿里云的ECS服務(wù),如何用最小的成本來保有ECS,成為用戶越來越重要的關(guān)注點。為了更好的服務(wù)客戶,ECS團(tuán)隊調(diào)整了系統(tǒng)盤的最小容量限制。 隨著用戶越來越多地使用阿里云的ECS服務(wù),如何用最小的成本來保有ECS,成...
摘要:本文是筆者實踐總結(jié)的技巧,介紹搭建云主機(jī)的方法,主要基于部署系列服務(wù)。從個人開發(fā)者需求出發(fā),一步一步搭建自己的服務(wù)。虛擬內(nèi)存的大小,一般不要超過當(dāng)前內(nèi)存大小,筆者選購的云主機(jī)是內(nèi)存,所以設(shè)置虛擬內(nèi)存。如果使用阿里云,在網(wǎng)頁后臺可以進(jìn)行配置。 0x00 本文是筆者實踐總結(jié)的技巧,介紹搭建云主機(jī)的方法,主要基于Docker部署系列服務(wù)。從個人開發(fā)者需求出發(fā),一步一步搭建自己的服務(wù)。本文適合...
摘要:實現(xiàn)閉包將匿名函數(shù)在普通函數(shù)中當(dāng)做參數(shù)傳入,也可以被返回。如果將匿名函數(shù)返回給外界,匿名函數(shù)會保存所引用的變量,而外界則不能得到這些變量,這樣形成閉包這個概念可能會更清晰一些。 原文:http://my.oschina.net/melonol/blog/126694 匿名函數(shù)提到閉包就不得不想起匿名函數(shù),也叫閉包函數(shù)(closures),貌似PHP閉包實現(xiàn)主要就是靠它。聲明一個匿名函數(shù)...
閱讀 3356·2021-11-23 09:51
閱讀 1141·2021-09-03 10:30
閱讀 3273·2021-08-31 09:40
閱讀 3336·2019-08-30 14:22
閱讀 977·2019-08-30 14:09
閱讀 2964·2019-08-30 13:21
閱讀 3325·2019-08-28 18:03
閱讀 2915·2019-08-26 13:44