从apache迁移到lighttpd

  最近将公司的一个产品从apache 2迁移到了lighttpd。迁移过程中出现了几次措手不及的问题,但好在没影响线上服务,并且及时找到了原因,也算基本成功了吧,至少今后公司同事做类似事情的时候,不会重蹈覆辙了。
  为什么要放弃apache?
  这个原因直接从网上搜吧,一堆堆的。从实际工作角度来看,我是这样考虑的:之前用的是apache的prefork模式,它主要的问题是内存占用大(几个G),并且CPU占用会随着瞬时请求增加而飚升。对于一个访问量不断增加的网站来说,这些弊端是不可以接受的。
  为什么要迁移到lighttpd?
  响应能力高,根据我的测试和网上一些评测报告,粗略的看,能提高一倍左右。负载稳定,这个跟它用epoll还是有很大关系的。内存消耗少,这方面的优势是惊人的,稍后介绍。
  为什么不迁移到nginx?
  其实我对nginx更偏爱一些,一方面是没看到网上有从nginx迁移到lighttpd的,另一方面对它的并发处理能力很欣赏,但还是因为工作中的复杂情况,没有从apache一次迁移到nginx,确实是忍痛割爱了。
  迁移中的重点难点在哪里?
  是调优!max-keep-alive-requests和max-keep-alive-idle这两个值困扰了我好久,因为在和apache对比测试的时候,发现lighttpd的并发连接比apache要高几倍,虽说吞吐量大了,但是负载也上去了,后来才发现这两个值设的有点高。这说明,片面追求性能高,也不是好事,比如你可以把keepalive的idle时间设的充分长,但可能瞬时上千个爬虫IP来访问,服务器就挂了。(这块我理解的可能还有些偏差)
  在url rewrite方面,apache和lighttpd的规则大部分是相同的,而nginx跟他们就不太一致,很多需要重写。
  迁移后的效果如何?
  高峰时段的负载也变得很平滑,之前负载的突变彻底消失了,每天的最高负载稳定在2到2.5,很完美的范围哦。
  内存占用控制在1G左右。有时候我们不是嫌内存占的多,而是不知道它会占多少。lighttpd在这方面做的非常好,不但内存数量可控,且占用较低;举个例子,同样的fastcgi程序,用lighttpd启动,内存就比apache要小20%甚至更多;在高峰的时候,apache可能会拼命启动很多个fastcgi,而假设一个进程占几十M的话……就等着服务器报警吧,这个时候谁都会束手无策,虽然重启服务很简单,但fork几百上千个进程是需要开销的,更重要的是,每秒还有成百上千的用户在等着访问你的80端口。
  

《从apache迁移到lighttpd》有3个想法

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s