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