前言:
對於構架高效能的web網站大家都高度興趣,本文從幾點粗談高效能web網站需要考慮的問題。
HTML靜態化
什麼是html靜態化?
說得簡單點,就是把所有不是.htm或者.html的頁面改為.htm或者.html
1.純靜態頁面
當使用者訪問是,不需要經過伺服器解析,直接就可以傳送到用戶端,此類型的頁面,由於不需要解析就能直接存取,一般情況下,比動態網頁面的執行速度快。
2.靜態化
頁面靜態化就是用動靜結合的方式將動態網站產生靜態網站來儲存。這是實實在在的html檔案,也就是靜態頁面。
3. 偽靜態方法(Url靜態化)
偽靜態不是真正意義上的靜態化,它只是利用某種方法將訪問的路徑也就是url地址轉換成為.html為尾碼的檔案,但是實際上,檔案本身還是以原來的尾碼儲存在伺服器上。
HTML靜態化的優點
一、減輕伺服器負擔。
二、有利於搜尋引擎最佳化seo,Baidu、Google都會優先收錄靜態頁面,不僅被收錄的快還收錄的全;
三、加快頁面開啟速度,靜態頁面無需串連資料庫開啟速度較動態網頁面有明顯提高;
四、HTML頁面不會受程式相關漏洞的影響
PHP中的html靜態化的模版
著名的smarty模版就是一個實現很好的html靜態化的模版,smarty的優點就是速度快,高效緩衝和html靜態化,模版分離
MVC開發模式
MVC是三個單詞的縮寫,分別為: 模型(Model),視圖(View)和控制Controller)
MVC是一個設計模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心組件:模型、視圖、控制器。它們各自處理自己的任務。
視圖
視圖是使用者看到並與之互動的介面。對老式的Web應用程式來說,視圖就是由HTML元素組成的介面,在新式的Web應用程式中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術已層出不窮,它們包括Macromedia Flash和象XHTML,XML/XSL,WML等一些標識語言和Web services.
如何處理應用程式的介面變得越來越有挑戰性。MVC一個大的好處是它能為你的應用程式處理很多不同的視圖。在視圖中其實沒有真正的處理髮生,不管這些資料是聯機儲存的還是一個僱員列表,作為視圖來講,它只是作為一種輸出資料並允許使用者操縱的方式。
模型
模型表示企業資料和商務規則。在MVC的三個組件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusion Components這樣的構件對象來處理資料庫。被模型返回的資料是中立的,就是說模型與資料格式無關,這樣一個模型能為多個視圖提供資料。由於應用於模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重複性。
控制器
控制器接受使用者的輸入並調用模型和視圖去完成使用者的需求。所以當單擊Web頁面中的超連結和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處理請求,然後再確定用哪個視圖來顯示返回的資料。
MVC優點:
低耦合
高度重用性
高效部署,降低開發週期
可維護性
有理軟體工程化管理
PHP中比較好的MVC架構:
Zend framework PHP官方架構
ThinkPHP 國產架構
yii 高效的次輕量級架構
…………
圖片伺服器分離
原因分析:對於一個非視頻類的網站,圖片一般是最消耗資源的, 這個時候應該考慮圖片與頁面分離,也就是獨立的圖片伺服器.
上面是經典的LAMP架構圖,在LAMP架構中,當流量很大到時候,apache伺服器的缺點就暴露出來,
可以採用nginx來負載非PHP的Web請求,使用nginx這種高效能的HTTP和反向 Proxy伺服器作為靜態資源的獨立伺服器,保證系統的消耗和執行效率。
緩衝技術
LAMP緩衝圖
我們可以看到網站緩衝主要分為五部分:
1.伺服器緩衝:主要是基於web反向 Proxy的靜態伺服器nginx和squid,還有apache2的mod_proxy和mod_cache模組
2.瀏覽器緩衝:包括頁面html緩衝和圖片js,css等資源的緩衝
3.PHP緩衝:有很多免費的PHP緩衝加速工具,如apc ,eaccerlertor等
4.記憶體緩衝:主要是採用memcached這種分布式緩衝機制
5.資料庫緩衝:通過設定資料庫緩衝,以及資料存放區過程,串連池技術等
緩衝黃金原則:讓資料更靠近 CPU。
CPU-->CPU 一級緩衝-->二級緩衝-->記憶體-->硬碟-->LAN-->WAN
資料庫叢集和庫表散列等等
這點本人沒有涉獵可以參考優酷網架構中的資料庫處理方法:
http://www.bkjia.com/edu/2011/10-26/13688.html
負載平衡
負載平衡將是大型網站解決高負荷訪問和大量並發請求採用的終極解決辦法。
優點
(1)解決網路擁塞問題,就近提供服務,實現地理位置無關性;
(2)為使用者提供更好的訪問品質;
(3)提高伺服器響應速度;
(4)提高伺服器及其他資源的利用效率。
PHP中web server解決方案
對於PHP的webserver的負載平衡,
apache的均衡策略
ProxyPass 指令
說明
將一個遠端伺服器映射到本機伺服器的URL空間中
文法
ProxyPass [path] ! |url [key=value key=value ...]]
範圍
server config, virtual host,directory
模組
mod_proxy
該指令允許你將一個遠端伺服器映射到本機伺服器的URL空間中,此時本機伺服器並不充當代理角色,而是充當遠程伺服器的一個鏡像。path是一個本地虛擬路徑名,url是一個指向遠程伺服器的部分URL,並且不允許包含查詢字串。
當使用ProxyPass指令時,ProxyRequests指令通常應當被設為 off。
假設本機伺服器地址是:http://example.com/,那麼,
ProxyPass /mirror/foo/ http://backend.example.com/
將會導致對http://example.com/mirror/foo/bar的本地請求將會在內部轉換為一個代理請求:http://backend.example.com/bar。
更詳細的說明可以參看:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
apache的三種均衡負載策略:http://s456123123b.blog.163.com/blog/static/5632332220101080474642/
nginx的負載平衡
HTTP Upstream 模組,該模組為後端伺服器提供簡單的負載平衡(輪循調度和用戶端 IP)。
樣本:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
} server {
location / {
proxy_pass http://backend;
}
}
官方資料:http://wiki.nginx.org/NginxChsHttpUpstreamModule
前端頁面最佳化
前端最佳化原則
· 頻寬
o 使用CDN
o 壓縮js、css,圖片最佳化
· HTTP最佳化
o 減少轉向
o 減少請求數
o 緩衝
o 儘早Flush
o 使用gzip
o 減少cookie
o 使用GET
· DNS最佳化
o 減少網域名稱解析時間
o 增多網域名稱提高並發
· JavaScript
o 放頁面底部
o defer/async
· CSS
o 放頁面頭部
o 避免@import
· 其它
o 預先載入
總結:
前端最佳化----HTML靜態化-----PHP架構(MVC思想)----資料庫叢集和庫表------圖片伺服器分離----負載平衡
外加一個:一個貫穿始終的緩衝技術,方法都是基礎方法,但是如何讓他們達到高彙總低耦合的狀態就有不簡單了。
原文地址:PHP淮北