回覆列表
  • 1 # 使用者9983819358658

    先不考慮伺服器資源是否夠,瓶頸會首先出現在資料庫讀寫,假設現在有34W併發,而且根據訪問性質來看應該是報名操作,而報名操作是帶有資料庫CRUD的,Mysql的最大連線數是2000(假設沒做分庫分表,5W rmb讓開發商做分庫分表顯然是不可能的),一般用到80%就很不錯了,所以連線數用1600來算。然後假設資料庫能在100ms內返回(想必也不是什麼好機器),那麼一個連線1s能進行10次操作,那麼1600連線用滿,能進行1.6W次資料庫操作。

    但這個也只是理論上的峰值,在實際專案中,單庫是絕達不到1.6W寫入的,並且還是涉及到多表操作的情況下。

    實際上根據《高效能MySQL》第三版 1.5小節,在如下的測試環境中

    測試機器Cisco UCSC250

    記憶體384GB

    儲存引擎是InnoDB

    測試的資料集2.5GB

    MySQL的buffer pool設定為4GB

    所以在記憶體為384G的機器上,吞吐量不會超過8000。那麼384G機器要多少錢呢?

    這是64G機器的價格,因此384=64*6 6*1.8W=10.8W/年

    因此,如果要併發支援到8000,光資料庫就至少需要10W/Y。當然,這是假設請求在1s內返回的情況,假設我們允許服務能在5s內返回,那麼此時併發能支援到4W。還是在不考慮伺服器,網路損耗的情況下,實際上是遠遠達不到的。

    所以,用5w來支援38w併發,是絕不可能的。

    回到我們剛才的計算,假設資料庫吞吐量到達理論峰值,能支援8000使用者同時訪問,如果每個客戶能等待5s的化,能支援4w使用者(前提是這些使用者不可以同時訪問,需要在5s內做到均勻分佈,此時需要透過限流等手段來實現)

    要支援8000使用者同時訪問,又需要多少個應用伺服器呢?

    假設我們使用tomcat服務,每個執行緒所佔空間為8M,那麼光tomcat執行緒就需要: 8000*8=64000=64G,當然還需要有主機記憶體,損耗啥的,按照一倍計算就是128G,那麼需要是2*1.8W=3.6W

    所以,如果需要支援4w個使用者5s延時的訪問,需要3.6+10.8= 14.4w rmb

    這還只是伺服器的錢,不算開發成本在內

    那麼,如果要支援38w的併發報名呢?這已經是一個相當大的併發量了,首先需要考慮的是拋棄掉一部分流量,可以在cdn就直接拋棄,或是nginx,或者直接在應用伺服器上,比如在這種情況下就只能保持8000/380000 = 2%,只能有2%的請求允許進來。

    可以透過nginx+redis的方式拋棄掉98%的請求,這樣可以不用浪費應用伺服器資源。或者直接在應用伺服器上做操作,拋棄掉無法響應的請求,避免流量拖垮整個系統。

  • 中秋節和大豐收的關聯?
  • 馬頭琴是什麼做的?