php高併發問題解決思路

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節點。每個節點可能也集羣了多臺服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章