前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >lighttpd 负载均衡-反向代理+cache浅谈

lighttpd 负载均衡-反向代理+cache浅谈

作者头像
Java架构师必看
修改2023-09-25 14:02:04
9390
修改2023-09-25 14:02:04
举报
文章被收录于专栏:Java架构师必看

Lighttpd有硬盘级别的cache-(mod_cache)和内存级别的cache(mod_mem运维

Lighttpd有硬盘级别的cache-(mod_cache)和内存级别的cache(mod_mem_cache),内存级别的cache是国人的产品,我喜欢用lighttpd就是因为它具有2种选择的cache,像我的实际需求,由于系统存在很多图片,但是容量不大,一般都少于40k,图片,js,CSS等我都喜欢放到内存里面,毕竟磁盘i/o是一个真正的计算机瓶颈制造者,而一些其他资源cache就放到硬盘级别的cache

1) squid和modcache的对比:squid是个功能全面的系统、但效率不高;modcache是功能不多,但效率高的缓存系统;请求数不多的情况下 (<100 req/s),两者差别不大;请求数超过100 req/s,modcache完胜 2) Linux系统的优化也很重要,比如打开最大文件数等等。不一定非要改linux kernel source,参数调优事半功倍 3)如何用尽多核CPU。首先要用多个进程(server.max-workers=4);用Linux的setaffinity系统调用把CPU0空闲出来,再根据服务情况选择是否把缓存加载到内存中;最后就是给足够大的负载了(大部分时候瓶颈在IO上,而不在CPU上)。 其实lighttpd在请求高(>1k req/s)的情况下,CPU也不忙,比Squid好太多;也就是说lighttpd不属于CPU计算量大的程序,而大部分时间在处理、等待网络IO,磁盘IO 4) keepalive 尽量关闭。lighttpd 1.4.23新加的server.defer-accept选项不错,可设置成server.defer-accept=30 5) 小文件缓存到内存;大文件放硬盘,硬盘没必要用raid 6) 加载 mod_status,设置 status.statistics-url = "/lighttpd_status"。然后访问http://ip/lighttpd_status 可看到modcache 的缓存命中率 7) modcache 使用两级hashmap管理内存缓存,效率不错,支持上千万的项目快速存取 8) 单进程和多线程。单进程适合现代的硬件和软件;多线程的弱势在于锁:一般多线程使用多个全局锁,当请求数量超过一定值后,全局锁会导致性能急剧下降;多线程的扩展性比单进程差不少。 多线程适合不同线程做不同工作,或者请求数量可控、且不高的情况

以下是关键配置

#模块的加载-------------------------------------------------------

server.modules              = (   

                              "mod_compress",                                 "mod_access",                                "mod_status",                                "mod_mem_cache",  #memcache 内存级的cache                                "mod_cache",           #disk cache 硬盘级别的cache                                "mod_proxy"

  #模块的排序是有规则的,如果不合理排序,容易产生问题

#硬盘级别cache的设置----------------------------------------

#模块参数说明:http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCache

#mod_mem_cache作者的最新主页

######## 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" )

#内存级别的cache设置-----------------------------------------------

#模块详细参数说明: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")    #定义内存cache的文件类型 mem-cache.max-memory = 64                                      #允许使用的最大内存大少,单位:M mem-cache.max-file-size = 1024                                   #单个文件大小 ,单位:KB mem-cache.expire-time = 180                                       #过期时间,默认单位:分

#调度目标的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)

) )

结果测试:用iE装了httpwatch后抓包查看,首先第一次访问proxy_cache后,关掉,接着清空本地cookies,再次打开,速度是几何级别的提升,页面一下子刷出来了,查看http_header时,发现如下关键字:

#硬盘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

#内存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   #命中内存 X-Powered-By ASP.NET

小结:这只是一般情况下的案例测试,具体需要涉及实际情况,例如php动态文件,媒体文件等的cache,还有图片网站或者视频网站等设置cache内容,过期时间等均要不同设置才能做到最大限度优化,不能一视同仁。

本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档