php高併發問題解決思路

qps多少纔算高併發

首先是無狀態前端機器不足以承載請求流量,須要進行水平擴展,通常QPS是千級。 而後是關係型數據庫沒法承載讀取或寫入峯值,須要數據庫橫向擴展或引入nosql,通常是千到萬級。 以後是單機nosql沒法承載,須要nosql橫向擴展,通常是十萬到百萬QPS。 最後是難以單純橫向擴展nosql,好比微博就引入多級緩存架構,這種架構通常能夠應對百萬到千萬對nosql的訪問QPS。 固然面向用戶的接口請求通常到不了這個量級,QPS遞增大可能是因爲讀放大形成的壓力,單也屬於高併發架構考慮的範疇。php

 

PV和QPScss

好比微博天天1億多pv的系統通常也就1500QPS,5000QPS峯值。前端

好比有人說:ajax

2C4G機器單機通常1000QPS。redis

8C8G機器單機可承受7000QPS。sql

 

php怎麼處理高併發問題?

通俗來說,高併發是指在同一個時間點,有不少用戶同時的訪問同一 API 接口或者 Url 地址。它常常會發生在有大活躍用戶量,用戶高彙集的業務場景中。數據庫

 

處理高併發的業務邏輯是:後端

前端:異步請求+資源靜態化+cdn瀏覽器

後端:請求隊列+輪詢分發+負載均衡+共享緩存緩存

數據層:redis緩存+數據分表+寫隊列

存儲:raid陣列+熱備

網絡:dns輪詢+DDOS攻擊防禦

 

php處理高併發問題的方法

一、應用和靜態資源分離

將靜態資源(js,css,圖片等)放到專門的服務器中。

二、頁面緩存

將應用生成的頁面緩存起來能夠節省大量cpu資源。對於部分頁面常常變換數據的,能夠使用ajax來處理。

三、集羣和分佈式

集羣,多臺服務器具備相同的功能,主要起分流的做用。分佈式,將不一樣的業務放到不一樣的服務器中,處理一個請求可能須要多臺服務器,進而提升一個請求的處理速度。又分爲靜態資源集羣和應用程序集羣。後者較複雜,常常要考慮session同步等問題。

四、反向代理

客戶端直接訪問的服務器並非直接提供服務的服務器,它從別的服務器獲取資源,而後將結果返回給用戶。

代理服務器和反向代理服務器:

代理服務器是代咱們訪獲取資源,而後將結果返回。例如,訪問外網的代理服務器。反向代理服務器是咱們正常訪問一臺服務器的時候,服務器本身調用了別的服務器。

代理服務器咱們主動使用,是爲咱們服務的,不須要有本身的域名;反向代理是服務器本身使用的,咱們並不知道,有本身的域名。

五、CDN

CDN是一種特殊的集羣頁面緩衝服務器,和普通的集羣的多臺頁面緩衝服務器相比主要區別是:其存放位置和分配請求方式不一樣。

CDN的服務器分佈在全國各地,接收到請求後會將請求分配到最合適的CDN服務器節點來獲取數據。其每個CDN節點就是一個頁面緩存服務器。

分配方式:

並非普通的負載均衡,而是專門的CDN域名解析服務器在解析域名的時候就分配好的。

通常的作法是:ISP那裏使用CNAME將域名解析到一個特定的域名,而後再將解析到的那個域名用專門的CDN服務器解析(返回給瀏覽器,再訪問)到相應的CDN節點。每一個節點可能也集羣了多臺服務器。

相關文章
相關標籤/搜索