lighttpd 负载均衡-反向代理+cache浅谈
Lighttpd有硬盤級別的cache-(mod_cache)和內(nèi)存級別的cache(mod_mem_cache),內(nèi)存級別的cache是國人的產(chǎn)品,我喜歡用lighttpd就是因為它具有2種選擇的cache,像我的實際需求,由于系統(tǒng)存在很多圖片,但是容量不大,一般都少于40k,圖片,js,CSS等我都喜歡放到內(nèi)存里面,畢竟磁盤i/o是一個真正的計算機(jī)瓶頸制造者,而一些其他資源cache就放到硬盤級別的cache
1) squid和modcache的對比:squid是個功能全面的系統(tǒng)、但效率不高;modcache是功能不多,但效率高的緩存系統(tǒng);請求數(shù)不多的情況下 (<100 req/s),兩者差別不大;請求數(shù)超過100 req/s,modcache完勝
2) Linux系統(tǒng)的優(yōu)化也很重要,比如打開最大文件數(shù)等等。不一定非要改linux kernel source,參數(shù)調(diào)優(yōu)事半功倍
3)如何用盡多核CPU。首先要用多個進(jìn)程(server.max-workers=4);用Linux的setaffinity系統(tǒng)調(diào)用把CPU0空閑出來,再根據(jù)服務(wù)情況選擇是否把緩存加載到內(nèi)存中;最后就是給足夠大的負(fù)載了(大部分時候瓶頸在IO上,而不在CPU上)。
其實lighttpd在請求高(>1k req/s)的情況下,CPU也不忙,比Squid好太多;也就是說lighttpd不屬于CPU計算量大的程序,而大部分時間在處理、等待網(wǎng)絡(luò)IO,磁盤IO
4) keepalive 盡量關(guān)閉。lighttpd 1.4.23新加的server.defer-accept選項不錯,可設(shè)置成server.defer-accept=30
5) 小文件緩存到內(nèi)存;大文件放硬盤,硬盤沒必要用raid
6) 加載 mod_status,設(shè)置 status.statistics-url = "/lighttpd_status"。然后訪問http://ip/lighttpd_status 可看到modcache 的緩存命中率
7) modcache 使用兩級hashmap管理內(nèi)存緩存,效率不錯,支持上千萬的項目快速存取
8) 單進(jìn)程和多線程。單進(jìn)程適合現(xiàn)代的硬件和軟件;多線程的弱勢在于鎖:一般多線程使用多個全局鎖,當(dāng)請求數(shù)量超過一定值后,全局鎖會導(dǎo)致性能急劇下降;多線程的擴(kuò)展性比單進(jìn)程差不少。
多線程適合不同線程做不同工作,或者請求數(shù)量可控、且不高的情況
?
以下是關(guān)鍵配置
#模塊的加載-------------------------------------------------------
server.modules??????????????=?(???
??????????????????????????????"mod_compress",
??????????????????????????????? "mod_access",
?????????????????????????????? "mod_status",
?????????????????????????????? "mod_mem_cache",? #memcache 內(nèi)存級的cache
?????????????????????????????? "mod_cache",?????????? #disk cache 硬盤級別的cache
?????????????????????????????? "mod_proxy"
??#模塊的排序是有規(guī)則的,如果不合理排序,容易產(chǎn)生問題
#硬盤級別cache的設(shè)置----------------------------------------
#模塊參數(shù)說明:http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCache
#mod_mem_cache作者的最新主頁:http://code.google.com/p/lighttpd-improved/
######## disk cache #########
cache.support-queries = "enable" #cache允許查詢?
cache.bases = ("/data/cache")?? #cache存放的根目錄
cache.refresh-pattern = ( #以下是允許cache的文件類型以及cache的有效期,單位:分)
??????? "/.(?i)(flv)$" => "0 fetchall-for-range-request flv-streaming",
??????? "/.(?i)(js|css|xml)$" => "240", # update js/css/xml every 4 hours
??????? "/.(?i)(htm|html|shtml)$" => "30 update-on-refresh", #update html/htm/shtml every 30 minutes and on refresh requests
??????? "/.(?i)(jpg|bmp|jpeg|gif|png)$" => "2880",
??????? "/.(?i)(rar|zip|wmv|avi|mp3|ape|rm|mpeg|mpg|wma|asf|rmvb|flv)$" => "0 fetchall-for-range-request",
??????? "." => "30 update-on-refresh"
)
#內(nèi)存級別的cache設(shè)置-----------------------------------------------
#模塊詳細(xì)參數(shù)說明:http://redmine.lighttpd.net/wiki/1/Docs:ModMemCache
######## memory cache ###############
mem-cache.enable = "enable"
mem-cache.filetypes = ("application/x-javascript", "text/css","text/javascript","image/jpeg","image/gif","image/png")??? #定義內(nèi)存cache的文件類型
mem-cache.max-memory = 64????????????????????????????????????? #允許使用的最大內(nèi)存大少,單位:M
mem-cache.max-file-size = 1024?????????????????????????????????? #單個文件大小?,單位:KB
mem-cache.expire-time = 180?????????????????????????????????????? #過期時間,默認(rèn)單位:分
#調(diào)度目標(biāo)的web-server列表
proxy.server? = ( "/" =>
??????? (
? ?????????????? ( "host" => "192.168.10.1","port" => 80)
?????????????????? ( "host" => "192.168.10.2","port" => 80)
??????????????????? ( "host" => "192.168.10.3","port" => 80)
)
)
?
結(jié)果測試:用iE裝了httpwatch后抓包查看,首先第一次訪問proxy_cache后,關(guān)掉,接著清空本地cookies,再次打開,速度是幾何級別的提升,頁面一下子刷出來了,查看http_header時,發(fā)現(xiàn)如下關(guān)鍵字:
#硬盤cache的命中
(Status-Line)?HTTP/1.1 200 OK
Accept-Ranges?bytes
Cache-Control?max-age=13873
Content-Length?2974
Content-Type?application/x-javascript
Date?Thu, 22 Jul 2010 11:26:54 GMT
ETag?"0f3b8da1939ca1:4aa7"
Expires?Thu, 22 Jul 2010 15:18:07 GMT
Last-Modified?Sat, 19 Sep 2009 11:10:54 GMT
Server?lighttpd/1.4.26
X-Cache?HIT??????? #命中緩存
X-Powered-By?ASP.NET
#內(nèi)存cache的命中
(Status-Line)?HTTP/1.1 200 OK
Cache-Control?max-age=172721
Content-Length?13952
Content-Location?http://192.168.3.120/uploads/userup/2192/myface.jpg?#我的proxy_cache地址
Content-Type?image/jpeg
Date?Thu, 22 Jul 2010 11:19:29 GMT
ETag?"22bc68d74227cb1:4e86"
Expires?Sat, 24 Jul 2010 11:18:10 GMT
Last-Modified?Mon, 19 Jul 2010 13:03:54 GMT
Server?lighttpd/1.4.26
X-Cache?TO MEMCACHE?? #命中內(nèi)存
X-Powered-By?ASP.NET
小結(jié):這只是一般情況下的案例測試,具體需要涉及實際情況,例如php動態(tài)文件,媒體文件等的cache,還有圖片網(wǎng)站或者視頻網(wǎng)站等設(shè)置cache內(nèi)容,過期時間等均要不同設(shè)置才能做到最大限度優(yōu)化,不能一視同仁。
總結(jié)
以上是生活随笔為你收集整理的lighttpd 负载均衡-反向代理+cache浅谈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MRTG—网络监控工具
- 下一篇: 高压锅焖猪蹄,好了就立马排气吗?