## 1、高并發架構的相關概念
高并發概念:并發,高并發,通常是指并發訪問。也就是在某個時間點,有多少個訪問同時到來。
## 2、高并發的問題,我們集體該關心什么?
* qps:每秒鐘請求或查詢的數量,在互聯網領域,指每秒響應請求數(http請求)
* 吞吐量:單位時間內處理的請求數量(通常由QPS與并發數決定)
* 響應時間,從請求發出到收到響應應花費的時間,列如系統處理一個http請求需要100ms,這個100ms激素hi系統的響應時間
* pv:綜合瀏覽量,即頁面瀏覽量或者是點擊量,一個訪客在24小時之內訪問的頁面的數量
* 同一個人瀏覽你的網站的同一頁面,只記作一次pv
* uv:獨立訪客,即一定的時間范圍內相同訪客多次瀏覽網站,只計算為1個獨立訪客
* 帶寬:計算帶寬大小需要關注兩個指標,峰值流量和頁面的平均大小
* 日網站的帶寬=pv/統計時間(換算為秒)*平均頁面大小(單位kb)*8
* qps不等于并發連接數
* qps是每秒http請求數量,并發連接數是系統同時處理的請求數量
* 峰值每秒請求數(qps)=(總pv數*80%)/(6小時秒數*20%)
* 壓力測試:測試能承受的最大的并發數,測試最大承受的qps值
* 測試工具:ab,wrk,http\_load
* ab:可以創建多個并發線程,模擬多個訪問者同時對某一url地址進行訪問。它的測試目標是基于url的,因此,它即可以用來測試apache的負載壓力,耶可以測試
## 3、ab工具使用的時候的注意事項
* 測試機器與被測試的機器要分開
* 不要對線上的服務做壓力測試
* 觀察測試工具ab所在的機器以及被測試的前端機的cpu,內存,網絡等都不超過最高限度的75%
## 4、不同qps下的解決方案
優化實例:
### a、qps達到100
假設關系型數據庫的每次請求在0.01秒內完成
假設單頁面只有一個sql查詢,那么1000ps意味著1s內完成100次請求,但是此時我們并不能保證數據庫查詢能完成100次
方案:數據庫緩存層,數據庫的負載均衡
### qps達到800
假設我們使用百兆帶寬,意味著網站出口的實際帶寬是8M左右
假設每個頁面只有10k,在這個并發條件下,百兆帶寬已經吃完
方案:cdn加速,負載均衡
### qps達到1000
靜態html緩存
qps達到2000
這個級別下。文件系統訪問鎖都成了災難,
方案:做業務分離,分布式存儲
## 5、高并發解決方案案列
流量優化:防盜鏈處理
前端優化:減少http請求,添加異步請求,啟用瀏覽器緩存,文件壓縮,cdn加速,建立獨立的圖片服務器
服務端優化:頁面靜態化,并發處理,隊列處理
數據庫優化:數據庫緩存,分庫分表,分區操作(可以使用工具完成),讀寫分離,負載均衡
web服務器優化:負載均衡(利用反向代理,lvs實現負載均衡)
- 一、cookie 和 session
- 二、版本控制軟件
- 三、正則表達式
- 四、外部文件的導入
- 五、魔術方法
- 六、設計模式
- 七、高并發和大流量解決方案
- 八、empty、 isset、is_null的區別
- 九、如何進行防SQL注入
- 十、redis使用場景
- 十一、memcache和redis的區別
- 十二、MHA架構
- 十三、數據庫外鍵約束
- 十四、負載均衡
- 十五、php常用函數
- 十六、Get和Post
- 十七、數組內置的排序方法
- 十八、CAP定理
- 十九、ip直連解決方案以及注冊中心
- 二十、布隆過濾器
- 二十一、常用的消息隊列
- 二十二、微服務
- 二十三、MySQL集群模式
- 二十四、輕松理解redis做緩存的流程
- 二十五、保證mysql和redis的雙寫一致性
- 二十六、redis
- 二十七、mysql基礎
- 二十八、MySQL數據庫優化
- 二十九、MySQL語句優化
- 三十、MySQL索引優化
- 三十一、MySQL查詢優化
- 三十二、Mysql分區大全及講解
- 三十三、MySQL數據庫管理與應用
- 三十四、MySQL索引
- 三十五、php文件系統處理
- 三十六、Linux的常用命令和日常操作
- 三十七、Linux命令大全
- 其他
- 其它知識點
- 1、PHP寫出顯示客戶端信息的代碼
- 2、更多文章
- 3、雪花算法
- 4、令牌桶算法和漏桶算法