高併發一般是指咱們提供的系統服務可以同時處理不少請求。sql
瞭解下概念:數據庫
QPS = 併發數 / 響應時間後端
二八原則:80%的業務量在20%的時間裏完成緩存
假定總併發請求數量爲10000,每一個請求的處理時間爲t秒,服務器一次性能夠處理的請求數量爲n個,那麼處理完全部的請求須要用時爲T性能優化
T = (10000 / n ) * t服務器
反過來計算每秒處理多少請求則網絡
QPS = (1 / t ) * n併發
假設咱們天天80%的訪問集中在20%的時間裏(峯值),若是天天有300萬的pv,而 咱們的單臺機器的QPS爲58,運行在單機上(固然常常宕機),按照上面的系統性能數據,給出優化解決方案。負載均衡
qps = ( 300W x 0.8 ) / ( 24x3600x0.2 ) = 139
方案一:加機器
既然一臺機器搞不定,咱們就多上幾臺機器。這就涉及到db主從、讀寫分離、負載均衡等技術。
它的原理就是分流,把之前集中的壓力分散開來。改方案見效快,靈活,實踐起來也更快。
因此機器上須要 139/58 臺
方案二:增長單機性能
單機到底性能可以增長到一個什麼程度,這取決於你的機器配置,也取決於你的服務到底有多複雜。
常見好比:提升機器cpu、memory(能夠提升系統同時處理請求的數量);php啓用opcache緩存;運用各類數據緩存技術;代碼性能優化;數據庫優化;運用常駐內存的技術;
假設如今須要你設計個系統,來分析當前產品各個接口的qps,及當前系統的qps狀況。
qps = 時間段內請求數/時間段
假設咱們以每分鐘或者每小時來運算。首先對每次請求記錄日誌包含響應時間、響應結果(每次請求用一個惟一標識標記)記錄到日誌文件,後端起個進程對日誌文件讀取,將數據發送到隊列系統,另外一方隊列消費,落地到數據庫或者nosql,接下來
就是對這些數據進行分析,不難分析qps吧,這樣的日誌系統也能夠做爲全局日誌系統,供公司各個業務線查詢日誌,也能夠起到監控預警的做用(好比說請求超時、訪問量激增異常)。爲何不直接入庫分析,這樣的方案大流量下不會形成性能問題。
【feek 指定行指針;fgets 獲取行內容;feof 判斷是否是到達末尾】