lighttpd 负载均衡-反向代理+cache浅谈
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作者的最新主页: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"
)
#内存级别的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内容,过期时间等均要不同设置才能做到最大限度优化,不能一视同仁。
lighttpd 负载均衡-反向代理+cache浅谈相关推荐
- day10 负载均衡反向代理
day10 负载均衡反向代理 1.复习 1.nginx+python的流程1.1安装基础环境yum install python3 pip3 install django==2.2.2安装uwsgi之 ...
- Linux中 Nginx+uwsgi部署flask项目 Nginx负载均衡 反向代理
Nginx是一款自由的.开源的.高性能HTTP服务器和反向代理服务器. 轻量级,同样起web服务,比 apache占用更少的内存及资源 抗并发, nginx处理请求是异步非阻塞的,而 apache则是 ...
- 负载均衡 反向代理为何叫反向代理?
转 https://www.zhihu.com/question/24723688 与正向代理比起来,反向代理是什么东西反向了? 关注者 1217 被浏览 184352 41 个回答 刘志军 公众号 ...
- 架构之Nginx(负载均衡/反向代理)
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器 ,也是一个 IMAP/POP3/SMTP 代理 服务器 . Nginx 是由 Igor Sys ...
- Nginx安装/负载均衡/反向代理配置与调优
[Nginx安装] Linux下直接使用包管理安装 sudo apt-get install nginx 使用whereis命令查看安装位置 whereis nginx #sbin下代表nginx可执 ...
- 【Ngnix】可提供负载均衡反向代理的web服务器
前言 之前我们用IIS搭建的是web服务器即内网服务器,但通常不直接接受外网用户请求,由反向代理服务器充当这一衔接角色,用户直接访问反向代理服务器就可以获得目标服务器的资源.为提高网络吞吐和加强网络数 ...
- Nginx学习总结(10)——Nginx前后端分离将多个请求转发到多个Tomcat,负载均衡反向代理
一.谈谈"渲染" 相信好多人都挺听过"渲染"这个词,但不清楚它是什么意思?前端开发以为这是后端的活儿,后端开发以为是前端的事儿,推着推着就不了了之.其实渲染很简 ...
- 负载均衡反向代理 动静分离
#!/bin/bash IP=192.168.186.77 WG=192.168.186.2 YM=255.255.255.0 DIR=/etc/sysconfig/network-scripts W ...
- 万字雄文讲透现代网络负载均衡和代理技术,终于弄懂负载均衡那点事
2019独角兽企业重金招聘Python工程师标准>>> 最近我注意到,针对负载均衡和代理这两项现代网络技术,有教育意义的介绍性材料相当稀缺.这引起我的思考:为什么会这样?在可靠的分布 ...
最新文章
- 连接池和 Timeout expired异常
- git怎样用idea拉代码_一款强大的 IDEA 代码生成器,学会用,真香!
- 伪静态隐藏域名后缀_你想知道的动态URL、静态URl、伪静态URL概念及区别都在这里!...
- Oracle 随机取某一列的值
- 什么是oracle命名,ORACLE数据库命名规范
- java空心字木塔_我国七个千年古塔:第四个空心没有塔顶,最后一个是木塔无钉无铆...
- [转]XHTML+CSS兼容性解决方案小集
- Python:Python3错误提示TypeError: slice indices must be integers or None or have an __index__ method解决办法
- diff命令两个服务器文件,LINUX命令diff-文件管理-比较给定的两个文件的不同
- 今天,正式开始行走边境线!
- Datawhale组队学习开源内容汇总
- Python Post提交简单案例,文本内容在线语音合成
- android pad课件制作软件,平板电脑可以做ppt吗
- IPv4/IPv6地址范围与网络地址/子网掩码的转换,点分十进制与数字掩码的转换
- Excel电子表格隔行自动填充底色
- 视频中场:中视频的复兴与前路
- excel报表管理系统mysql_教育扶贫数据库管理系统下载安装|教育扶贫数据库管理系统(mysql收集excel表格)官方版下载_v1.0_9号软件下载...
- SPSS数据类型学习
- HDU——解题报告 1060
- SpringBoot重点详解--dbcp2数据源配置
热门文章
- upgrade lnmpa php.sh,LNMP 状态管理命令说明及Nginx、MySQL/MariaDB、PHP升级教程
- java response.write_response设置编码方式 print和write方法的对比
- 程序模拟抽奖流程图_一道与联欢会相关的概率统计题目的模拟仿真
- 基于YOLOv5模型压缩、模型量化、模型剪枝
- WifiP2pSettings工作流程
- 【TensorFlow2.0】(7) 张量排序、填充、复制、限幅、坐标选择
- 基于简化点云地图的语义边缘对齐的单目定位方法
- window环境Visual Studio配置:OpenCV,Eigen,jsoncpp
- 什么样的显卡能支持 4K 分辨率输出?
- PSM-省电模式(PowerSaving Mode)