qps多少纔算高併發
首先是無狀態前端機器不足以承載請求流量,需要進行水平擴展,一般QPS是千級。 然後是關係型數據庫無法承載讀取或寫入峯值,需要數據庫橫向擴展或引入nosql,一般是千到萬級。 之後是單機nosql無法承載,需要nosql橫向擴展,一般是十萬到百萬QPS。 最後是難以單純橫向擴展nosql,比如微博就引入多級緩存架構,這種架構一般可以應對百萬到千萬對nosql的訪問QPS。 當然面向用戶的接口請求一般到不了這個量級,QPS遞增大多是由於讀放大造成的壓力,單也屬於高併發架構考慮的範疇。
PV和QPS
比如微博每天1億多pv的系統一般也就1500QPS,5000QPS峯值。
比如有人說:
2C4G機器單機一般1000QPS。
8C8G機器單機可承受7000QPS。
php怎麼處理高併發問題?
通俗來講,高併發是指在同一個時間點,有很多用戶同時的訪問同一 API 接口或者 Url 地址。它經常會發生在有大活躍用戶量,用戶高聚集的業務場景中。
處理高併發的業務邏輯是:
前端:異步請求+資源靜態化+cdn
後端:請求隊列+輪詢分發+負載均衡+共享緩存
數據層:redis緩存+數據分表+寫隊列
存儲:raid陣列+熱備
網絡:dns輪詢+DDOS攻擊防護
php處理高併發問題的方法
1、應用和靜態資源分離
將靜態資源(js,css,圖片等)放到專門的服務器中。
2、頁面緩存
將應用生成的頁面緩存起來可以節省大量cpu資源。對於部分頁面經常變換數據的,可以使用ajax來處理。
3、集羣和分佈式
集羣,多臺服務器具有相同的功能,主要起分流的作用。分佈式,將不同的業務放到不同的服務器中,處理一個請求可能需要多臺服務器,進而提高一個請求的處理速度。又分爲靜態資源集羣和應用程序集羣。後者較複雜,經常要考慮session同步等問題。
4、反向代理
客戶端直接訪問的服務器並不是直接提供服務的服務器,它從別的服務器獲取資源,然後將結果返回給用戶。
代理服務器和反向代理服務器:
代理服務器是代我們訪獲取資源,然後將結果返回。例如,訪問外網的代理服務器。反向代理服務器是我們正常訪問一臺服務器的時候,服務器自己調用了別的服務器。
代理服務器我們主動使用,是爲我們服務的,不需要有自己的域名;反向代理是服務器自己使用的,我們並不知道,有自己的域名。
5、CDN
CDN是一種特殊的集羣頁面緩衝服務器,和普通的集羣的多臺頁面緩衝服務器相比主要區別是:其存放位置和分配請求方式不同。
CDN的服務器分佈在全國各地,接收到請求後會將請求分配到最合適的CDN服務器節點來獲取數據。其每一個CDN節點就是一個頁面緩存服務器。
分配方式:
並不是普通的負載均衡,而是專門的CDN域名解析服務器在解析域名的時候就分配好的。
一般的做法是:ISP那裏使用CNAME將域名解析到一個特定的域名,然後再將解析到的那個域名用專門的CDN服務器解析(返回給瀏覽器,再訪問)到相應的CDN節點。每個節點可能也集羣了多臺服務器。