整理自慕課網360大牛全面解讀PHP面試 ,購買鏈接:https://coding.imooc.com/class/133.html
1.高並發和大流量解決方法
真題回顧
PHP如何解決高並發大流量問題?
考點分析
高並發架構的相關概念 : 概念百度百科並發 , 我們所說的並發,在互聯網時代,並發、高並發通常是指並發訪問,也就是在某個時間點有多少個訪問同時到來。 通常如果一個系統的pv在千萬以上,有可能是一個高並發的系統。 高並發的問題,我們該關心什么 , qps每秒鍾請求或者查詢的數量,在互聯網領域,值每秒的響應的請求數。吞吐量, 單位時間內處理的請求數量(通常由qps 與並發數決定)。響應時間 從發出請求到收到響應花費的時間。pv: 綜合瀏覽量(page view ),即頁面瀏覽量或者點擊量,一個訪客在24小時內訪問的頁面數量。同一個人流量一個網站的一個頁面算一個pv 。uv: 獨立訪客(unique visitor),即一定的時間范圍內,相同的訪客多次訪問網站,只計算為1個獨立訪客。帶寬 :計算帶寬大小需要關注兩個指標,峰值流量和頁面的平均大小。日網站帶寬 = pv/統計時間(換算到秒)*平均頁面大小(單位kb)*8 。 並發連接數 qps 不等於並發連接數,qps是每秒http請求數量,並發連接數是系統同時處理的請求數。 峰值每秒請求數 = (總pv數*80%)/(6小時秒數*20) , 含義80%的訪問量集中在20%的時間。6小時是簡單的估值 。壓力測試 ,測試能承受的最大並發、測試最大承受的qps。 常用的性能測試工具 :ab、wrk、http_load、web bench 、 siege、Apache jmeter。ab工具使用可參考:https://blog.csdn.net/qq_16399991/article/details/56676780 注意事項:測試機與被測試機分開、不要對線上服務做壓力測試、觀察測試工具ab所在的機器,以及被測試的前端機的cpu,內存,網絡等不超過最高限度的75%。
qps達到極限 : qps50 :小型網站,一般的服務器就可以應付;
qps達到100:假設關系型數據庫的每次請求在0.01秒內完成,假設單頁面只有一個sql查詢,那么100qps意味着1秒鍾完成100次請求,但是此時我們並不能保證數據庫查詢能完成100次,所以達到極限,優化方案:數據庫緩存層、數據庫負載均衡。
qps達到800:假設我們使用的百兆帶寬,意味着網站出口的實際帶寬是8M左右,假設每個頁面只有10k,這個並發條件下,百兆的帶寬已經吃完。方案:cdn加速、負載均衡。
qps達到1000, 假設使用memcache 緩存數據庫查詢,每個頁面對memcache的請求遠大於對db的請求,memcahe的悲觀並發數在2W左右,但有可能在這之前內網帶寬已經吃光,表現出不穩定。方案:靜態html緩存。
qps達到2000 在這個級別下 文件系統訪問鎖都成為災難。方案:做業務分離,分布式存儲。
優化方案:
web服務器優化 :負載均衡
流量優化:防盜鏈處理 將惡意請求屏蔽,
前端優化:減少http請求、添加異步請求、啟用瀏覽器緩存和文件壓縮、cdn加速、建立獨立的圖片服務器、
服務端優化: 頁面靜態化、並發處理、隊列處理、
數據庫優化: 數據庫緩存、分庫分表、分區操作 、讀寫分離、負載均衡
一網打盡
2.web資源防盜鏈
相關概念:
什么是防盜鏈:盜鏈就是在自己的服務器上展示一些不是自己服務器上的內容
防盜鏈工作原理 : 通過refer 或者簽名,網站可以檢測到目標網頁訪問的來源網頁,如果是資源文件,則可以跟蹤到顯示他的網頁地址,一旦檢測到來源不是本站即進行阻止或者返回指定頁面。 通過簽名方式 通過計算簽名的方式,計算簽名是否合法,合法則顯示,否則返回錯誤信息。
實現方法:通過referer方法 使用nginx 模塊ngx_http_referer_module 用於阻擋來源非法的域名請求,nginx指令valid_referers,全局變量$invalid_referer.問題 可以偽裝referer。 使用加密簽名, 使用第三方模塊httpAccessModule實現反盜鏈,
3.減少http請求
相關概念
為什么減少http請求次數: 性能黃金法則:只有10%-20%的最終用戶響應時間花在接受請求的http文檔上,剩下的80%-90%時間花在html文檔引用的所有組件(圖片,js,css ,flash等)。如何改善:減少組件數量,從而減少http請求。http連接產生的開銷:域名解析-tcp連接-發送請求-等待-下載資源-解析時間
減少http請求的方式:css精靈、合並腳本和樣式表適
4.瀏覽器緩存和壓縮優化技術
5.CDN加速
6.建立獨立的圖片服務器
7.動態語言靜態化
8.數據緩存層的優化
9.數據庫緩存層的優化
10.mysql數據層的優化
11.web服務器負載均衡
相關概念:
七層負載均衡實現: 基於url等應用層信息的負載均衡;代表 nginx的proxy是他一個很強大的功能,實現了7層負載均衡。功能強大、性能卓越、運行穩定, 配置靈活簡單、能自動剔除工作不正常的后端服務器、上傳文件使用異步模式、支持多種分配策略。nginx負載均衡策略:內置策略:iphash、加權輪詢, 擴展策略:fair策略:根據后端服務器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流。通用hash:通用hash比較簡單,可以以nginx內置變量為key進行hash、一致性hash:采用nginx內置的一致性hash環,支持memcache。
nginx配置:
四層負載均衡實現: 通過報文中的目標地址和端口,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。lvs實現服務器負載均衡有三種方式NAT、DR、和TUN。
————————————————
版權聲明:本文為CSDN博主「wangxiaoangg」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_16399991/article/details/82556527