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内容,过期时间等均要不同设置才能做到最大限度优化,不能一视同仁。
相关文章:

设置网页标题图标
网页图标如图上位置 设置语句如下: link rel:"SHORTCUT ICON", href:"/images/logo.ico"

DeepMind 的新强化学习系统,是迈向通用人工智能的一步吗?
作者:Ben Dickson来源:数据实战派前言尽管已经掌握围棋、星际争霸 2 和其他游戏,深度强化学习模型的主要挑战之一是,它们无法将其能力泛化到训练领域之外。这种限制使得将这些系统在现实世界中的应用变得非常困难,因为…

无法访问D盘,执行页内操作时的错误
打开D盘后出现“无法访问D:/,执行页内操作时的错误”怎么办?既便D盘有病毒也不会出现这种状况,初步判断是D: 分区表错误,用系统安装光盘开机进入纯DOS下的修复模式中用 CHKDSK /R 或 /F来修复一下试试看。在cmd下输入chkdsk空格d:空格/f本文转…

怎样修改Ubuntu的root帐户密码并使用root登录
Ubuntu版本11.04 Ubuntu是一套基于Debian的Linux系统,它追求的是“Just Work”,最新的7.10版本发布于2007年10月,不同于其他Linux发行版本,Ubuntu的所有版本都是免费的,包括企业版。第一次安装Ubuntu,发现比…

CSDN 开学见面礼!限时免费申请,手慢无!
暑假即将结束,金秋开学季来袭。别让年轻的自己虚度光阴,现在扫码申请学习资格,10+场考前辅导,600+分钟大咖讲解与答疑直播免费看!大厂CTO级别导师陪你加buff!3周带你掌握大厂工程师基…

【No.1_sizeof与strlen】
【注意】 程序语言只是我们与计算机交流并让计算机实现我们创造性思想的工具,可以并鼓励深入掌握一门语言,但千万别沉迷于钻某种语言的牛角尖,一定要把握好二者间的度 本帖属不定时连载贴,以试卷的形式提出一个比较基础的问题供大…

Linux: CentOS 7下搭建高可用集群
转载: http://linux.cn/article-3963-1.html本文以两台机器实现双集热备高可用集群,主机名node1的IP为192.168.122.168 ,主机名node2的IP为192.168.122.169 。一、安装集群软件必须软件pcs,pacemaker,corosync…

史上最大规模 DDoS 攻击,每秒 1720 万次 HTTP 请求
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 互联网基础设施公司 Cloudflare 表示,已化解了迄今为止所记录的最大规模的容量耗尽分布式拒绝服务(DDoS)攻击。 近日,互联网基础设施服务提供商 Cloudfl…

如何查看当前Linux的版本
查看linux的版本主要有三种方法:1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如:[root3.5.5Biz-46 ~]# lsb_release -a LSB Version: 1.3Distributor ID: RedHatEnterpriseASDescription: Red Hat Enterprise Li…

AIX5.3安装bash shell
一、下载bash shell,地址是:ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/bash/ 二、安装bash shell,rpm -ivh bash-3.2-1.aix5.2.ppc.rpm三、你现在就可以用了,赶紧bash试试!----你可能会有疑问我的系统的是…

经典算法题每日演练——第六题 协同推荐SlopeOne 算法
原文:经典算法题每日演练——第六题 协同推荐SlopeOne 算法相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,“商品推荐”,"猜你喜欢“,在实体店中我们有导购来为我们服务,在网络上 我们需要同样的一种替代物&…

基于 Python 环境搭建 - YOLO 实现吸烟行为监测
作者|李秋键 出品|AI科技大本营(ID:rgznai100) 引言 目标检测是一种与计算机视觉和图像处理有关的计算机技术, 用于检测数字图像和视频中特定类别的语义对象 (例如人、建筑物或汽车等), 其在视频安防,自动驾驶, 交通监控, 无人机场景分析和机器人视觉等领域有广阔的应用前景。近…

Ubuntu 下安装thttpd Web服务器
不知道大家是不是真的需要用appache这么复杂的功能这么强大的web server,其实有很多时候使用webserver也只是一种远程共享访问的方式。这里,Ubuntu repository的提供了一个简单的web server,名为thttpd,即 tiny http daemon. th…

mysql 新增 删除用户和权限分配
1. 新增用户 mysql>insert into mysql.user(Host,User,Password) values("localhost","lionbule",password("hello1234")); mysql>flush privileges; 2. 修改用户密码 mysql>update mysql.user set passwordpassword(new password)…

简历空空,如何编写一个面试时能拿的出手的真实项目?
最近,新一波的秋招全面开启,各大互联网行业像腾讯、百度、美团、哔哩哔哩,都加入到招聘队伍,秋招面试也进入白热化。作为一名求职者,要想在招聘浪潮中抢先一步,锁定大厂Offer,现在就要着手准备起…

mysql通过查看跟踪日志跟踪执行的sql语句
在SQL SERVER下跟踪sql采用事件探查器,而在mysql下如何跟踪sql呢? 其实方法很简单,开启mysql的日志log功能,通过查看跟踪日志即可。 开启mysql的日志log方法: windows环境下的配置方法: 我使用的版本&#…

用thttpd做Web Server
httpd是busybox中自带的web server,功能弱,不支持认证和CGI。thttpd和boa都支持认证CGI,功能比较全,Boa是一个单任务的小型http服务器,设计的小型系统不要数据库操作,所以可以使用thttpd作为server.1. 编译thttpdccarm…

ii第六单元 文本处理工具
linux中常用的基础命令 diff 命令 patch 命令 grep 命令 Cut 命令 sort 命令 uniq 命令 tr 命令 sed 命1.diff 命令 比较两个文件的不同 用于创建补丁文件 diff -u file file.new >file.path ##生成补丁文件 yum install patch -y ##安装打补丁工具 (1&…

Powershell管理系列(十)邮件联系人及邮件用户的管理
鉴于有些用户不太熟悉邮件联系人、邮件用户的区别,博文首先介绍下用户邮箱、邮件联系人、邮件用户的概念,以下介绍部分博文摘自winos微软中文技术论坛。---------------------------------------------------------------------------------------------…

移植 thttpd Web服务器
从http://www.acme.com/software/thttpd/ 下载thttpd 到/tmp 目录当中,并解压. 编译thttpd [armlocalhost thttpd-2.25b]$ CCarm-linux-gcc ./configure --hostarm-linux [armlocalhost thttpd-2.25b]$ vi Makefile 指定静态链接二进制文件 LDFLAGS -static …

懂外语、会创作,机器高质量学习挑战均在这里实现
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 近年来人工智能在不断的发展中,机器不仅已经学会了英语写作,也正在学习其它语言。 德国 Aleph Alpha 已经构建了世界上最强大的 AI 语言模型之一。它不仅能说流利的英语…

JPA 复杂查询 - Querydsl
添加依赖 <!--query dsl --> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>qu…

服务器端开发经验总结 Linux C语言
简介在进行服务器端开发的时候需要考虑一些算法和性能问题,经过了几年的开发,对这方面有了一些经验,现在写下来跟大家分享和讨论。我主要是在Linux下进行C语言的开发,所以后面的实现都是基于Linux操作系统并用C语言来讲解。其它平…

Backbone.js学习笔记 Hello World!
使用Backbone.js 和 MVC 架构创建一个典型的Hello world项目。虽然是“杀鸡用牛刀了”,毕竟是我第一次使用Backbone.js 依赖 jQuery 1.9.1Undersore.js 1.5.0Backbone.js开始 <!doctype html> <html> <head> <meta charset"utf-8"&g…

一文速览机器学习的类别(Python代码)
作者:泳鱼来源:算法进阶机器学习按照学习数据经验的不同,即训练数据的标签信息的差异,可以分为:*监督学习(supervised learning)*非监督学习(unsupervised learning)*半监…

Linux下分割与合并文件的方法
Linux下分割与合并文件的方法 切割合并文件在linux下用split和cat就可以完成。下面举些实例进行说明。1.文件切割文件切割模式分为两种: 文本文件 二进制模式。 1.1文本模式 文本模式只适用于文本文件,用这种模式切割后的每个文件都是可读的。文本模式又…

将网站程序放在tmpfs下
将网站程序放在tmpfs下然后用nginx直接做对外服务呢varnish或者squid都是利用内存和它的连接数来做到加速服务.但是如果是squid->nginx->fastcgi->mysql这样当中很多连接是开销在内部的连接之中而且如果客户端请求php.squid还需要将请求再转发至nginx,然后nginx再转发…

docker 连接容器
1.通过端口映射 sudo docker run -d -P training/webapp python app.py 容器有一个内部网络和IP地址(在使用Docker部分我们使用docker inspect命令显示容器的IP地址) -P 标记创建一个容器,将容器的内部端口随机映射到主机的高端口49000到4990…

新进展!英伟达用 AI 给纪录片配音,情绪语调拿捏得稳稳地
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) AI 已经将合成语音从单调的机器人电话和传统 GPS 导航系统转变为智能手机和智能扬声器中动听的虚拟助手。 虽然日常和Siri、小爱或小度等对话时声音还是很机械,但最新的技术进展显示&#x…

揭开Annotation的面纱
Annotation是Java5、6只后的新特征(中文称之为注解),并且越来越多的得到了应用,比如Spring、Hibernate3、Struts2、iBatis3、JPA、JUnit等等都得到了广泛应用,通过使用注解,代码的灵活性大大提高。这些都是…