如下內容爲《構建高性能Web站點》的讀書筆記web
根據Web組件的來分析Web組件的差別數據庫
文件大小後端
文件數量api
內容更新的頻率瀏覽器
預計併發的用戶數緩存
是否須要腳本解釋器服務器
是否涉及大量CPU計算cookie
是否訪問數據庫併發
訪問數據庫的主要操做是讀仍是寫負載均衡
是否包含遠程調用(RPC)
對應的優化方法
是否使用epoll模型
是否使用sendfile()系統調用
是否使用異步I/O
是否支持HTTP持久鏈接(HTTP Keep-alive)
是否須要支持opcode緩存
是否使用動態內容緩存以及有效期爲多長
是否使用Web服務器緩存以及有效期爲多長
是否使用瀏覽器緩存以及有效期爲多長
是否使用反向代理緩存以及有效期爲多長
是否使用負載均衡策略
Web組件的分離的目的是便於採起針對性的最佳優化方案,是的Web組件可以充分利用服務器資源,達到符合各自實際狀況的吞吐率最大化(單位時間內的處理請求數,通常指每秒處理的請求權數)
分離前
www.demo.com
分離後
images.demo.com
upload.demo.com
static.demo.com
js.demo.com
。。。
小問題
在對分離後的組件進行請求時,會把www.demo.com也帶上,對於這個有兩種解決方法
限制cookies頂級域名只對主機域名服務
使用頂級域名來指向web組件,例如:www.img-demo.com,保存了demo.com的全部圖片資料
同時,使用上面的第二種解決方案,順帶解決了瀏覽器併發請求同一域名站點的請求數限制。參見下表格。
瀏覽器 | HTTP /1.1 | HTTP /1.0 |
---|---|---|
IE 6,7 | 2 | 4 |
IE 8 | 6 | 6 |
Firefox 2 | 2 | 8 |
Firefox 3 | 6 | 6 |
Chomre 1,2 | 6 | - |
開啓opcode動態緩存
足夠快的CPU(例如使用多核CPU)
大的內存(內存不大,會使用swap空間,與硬盤之間頻繁複制數據)
多進程(多實例web進程或者fastcgi進程)
與數據庫保持高速鏈接(單機使用unix socket鏈接,多機只能經過TCP進行鏈接,跨機房創建DDN專線)
可靠的數據中心
動態內容放在反向代理的後端,而且對一些動態內容進行了反向代理的緩存。
若是是使用web api的話,則能夠單獨設置域名,例如:api.demo.com,部署在反向代理後端以外,此時的數據不會被反向代理緩存
同時分離代理的好處
域名更具備可讀性,用戶容易記憶
有利於服務獨立統計
有利於服務獨立擴展,該處涉及dns的負載輪詢
同時壓力小的時候,能夠把全部域名指向一臺服務器,靜態內容再分發到其餘服務器上
支持epoll
非阻塞I/O
異步I/O
sendfile()系統調用
單進程
使用Raid分區
足夠大的帶寬
開啓Web服務器的keep-alive,設置Expires過時時間,避免重複的請求開銷