到底多大才算高併發?
一、什麼是高併發
定義:
高併發(High Concurrency) 是使用技術手段使系統可以並行處理很多請求。
關鍵指標:
-響應時間(Response Time)
-吞吐量(Throughput)
-每秒查詢率QPS(Query Per Second)
-每秒事務處理量TPS(Transaction Per Second)
-同時線上使用者數量
關鍵指標的維度:
-平均,如:小時平均、日平均、月平均
-Top百分數TP(Top Percentile),如:TP50、TP90、TP99、TP4個9
-最大值
-趨勢
「併發」由於在網際網路架構中,已經從機器維度上升到了系統架構層面,所以和「並行」已經沒有清晰的界限。「並」(同時)是其中的關鍵。由於「同時」會引發多久才叫同時的問題,將時間擴大,又根據不同業務關注點不同,引申出了引申指標。
引申指標:
-活躍使用者數,如:日活DAU(Daily Active User)、 月活MAU(Monthly Active Users)
-點選量PV(Page View)
- 訪問 某站點的使用者數U V( Unique Visitor )
- 獨立IP數IP ( Internet Protocol )
-日單量
二、多大算高併發
這個問題的答案不是一個數字。來看兩個場景:
場景1:
木頭同學去一家創業公司面試。這個公司做的產品還沒有上線,面試官小熊之前就職過公司的產品都沒有什麼量。
小熊:“有高併發經驗嗎?”
木頭:“我們服務單機QPS2000+,線上有4臺機器負載均衡。”
這時候小熊心裡的表情大概是:
但是如果小熊就職的公司是美團之類的。那這 這時候小熊心裡的表情大概是:
場景2:
固態硬碟SSD(Solid State Disk)說:我讀取和寫入高達 1000MB/秒
mysql說:我單機TPS10000+
nginx說:我單機QPS10W+
靜兒說:給我一臺56核200G高配物理機,我可以建立一個 單機QPS1000W的服務
不在同一維度,沒有任何前提,無法比較誰更牛。“我的系統算不算高併發?”這個問題就如同一個女孩子愛問的問題:“我美不美?”
三、高併發的本質
俗話說:「沒有對比就沒有傷害」。算不算高併發,這個問題的答案需要加對比和前提。
對比包括:
-業界:在業界同類產品中併發量處於什麼位置。舉個栗子:chestnut:,美團外賣的日單量是千萬級別,一個系統日單量在百萬,雖然差一個數量級,但是相比大多數公司已經很不錯。
-自身:在自身系統中,併發問題是否已經是系統的瓶頸?如果是,這麼這個瓶頸怎麼打破?如果不是,那當初架構設計的時候是怎麼保證併發不是問題的?(別告訴我:是通過系統沒有訪問量來保證的[擦汗])。
前提包括:
-業務複雜度:舉個栗子:chestnut:,訪問百度首頁的時間基本就是看自己家的網速,通常情況下都是點一下就看到結果了。而掃描二維碼支付,通常需要等很久,雖然這可能已經是業界最牛的支付公司出品了。
-配置:用高配物理機得出的資料和最老最低配的虛擬器上的出來的結果是無法比較的。通常的配置有:cpu、記憶體、磁碟、頻寬、網絡卡
高併發的本質不是「多大算高併發」的一個數字,而是從架構上、設計上、編碼上怎麼來保證或者解決由併發引起的問題。當別人問你:“做過高併發嗎?”回答者完全可以描述自己系統的各項指標,然後開始敘述自己對系統中對預防、解決併發問題作出的思考和行動。
四、總結
過程大於結果,方向大於方法。