主题:【讨论】nginx 还是 apache? -- 铁手
现在老铁的西西河的问题是内存不够,目前并发数尚可,反向PROXY未必会解决问题。
1.老铁的西西河服务器有HA吗,还是单独服务器,如果是后者httpd的稳定性更加重要。Apache的prefork虽然老土,但一个进程垮掉只影响一个连接,系统还OK,影响有限。我没有Nginx的稳定性数据,但根据我的经验,bad或恶意的request很容易crash掉httpd。一个小例子:
Get / HTTP/1.1
Host:127.0.0.1
会很容易把httpd的proxy模块推入死锁。实际应用中各种边界条件或risk condition多不胜数,nginx是否能处理好不知道啊。
看看nginx的changelog :http://nginx.org/en/CHANGES,似乎很有一些segfault bugs
2.老铁的西西河动态内容多吗,如果很多,那瓶颈会在php的解释器,
改变httpd作用有限
用top看看memory usage大的apache process,然后用strace -p 或lsof -p pid_of_the_process 看看究竟它在干什么呢,就会有个直观概念
1,大家捐点钱
首先老铁要说明自己使用的是什么服务器有没有添加内存的可能性,如果没有请参照1.1
1.1
购置新服务器--内存怎么样也能扩到40多G那种。
2,在实现1 选项目标的前提下,
2。1 利用 淘汰下的服务器做架构更改尝试
既然河内由人技术方面出头---
2.2 架构完成后-将数据迁移到新架构,同时新旧两套服务跑。
前端做个类似于服务状态监测的程序,一旦新架构支撑不住,切换到旧的服务环境。
以前做过apache和nginx的对比性能测试,结论如下
大并发情况下,Apache没Nginx理想,但是差距不大.
apache的失败率多于Nginx,但是请求处理时间略低于Nginx;
fastcgi用tcp-socket方式,比unix-socket的失败率低很多。
nginx在内存占用上有明显优势,大概节省了1/4内存占用量
静态文件apache完败nginx。
以上数据,是实测结果,可以做选型参考
给铁手的一些建议
apacheMPM比prefork应该强很多,如果能转最好转一下,带来好处还是蛮多的。
如果有能力拆分前台改用集群还是有必要的,做应用均衡或者做应用切分带来的性能提升都很大,不然光靠优化这样挖掘最后提升太小了。
nginx默认的工作模式是一个master进程加n个worker进程,n默认是4,一般配置成cpu个数。只有worker进程处理http请求,所以即使某个worker进程崩溃了,也不会影响其他worker进程,而且多数情况下master会重启崩溃的worker。
至于说bug,这世界上没有bugfree的软件,但是普通的应用场景根本不会触发nginx的bug,这包括了西西河的应用。其实我们公司以前也是使用apache,不过这些年都逐渐改用nginx,光我团队负责的nginx就有几十台。应该说使用效果很好,非常稳定。除非改脚本,否则根本不用管它。国内的大互联网公司,基本都放弃apache了。
另外nginx的维护非常方便,脚本可读性很好。
如果采用worker 的apache mpm那么apache一般也就能有3/4000的并发链接,prefork性能更差;而nginx几万个并发没压力。
之所以性能差距这么大,是因为在linux下nginx采用的是基于epoll的事件驱动模型,而prefork/worker都是采用每个链接一个线程/进程的模式,后者太古老了,已经不能适应c10k/c100k的场景需求。
河主,俺啥都不懂,时政版这两天口水太多了,潜水也快被淹死,过来透气的。
最新的apache httpd 2.4版本,我试着在自己机器上从源代码安装,MPM全选,并且是loadable的情况下,在我的机器里缺省的MPM是event。应该是代表一种趋势,和nginx靠拢?或者可能产生类似的性能?
还有一点值得注意的是,php的最新版本,包括了 php-fpm,也许是鼓励fast cgi的使用。
做过一次将系统从apache整体转移到nginx的事情. 成本挺高的. 甚至很多php脚本都被影响到.
相对apache,nginx专业了一点.
ec2, 内存跟不上了点个按钮就升级. 新加坡美国都开一个node, 照顾一下翻墙众.
数据库用RDS, 每天自动备份.
然后老铁可以专心写网页, 运营网站.
http://www.bugfree.org.cn/
不是真的bugfree,是人家起了个好名字。我用着还可以,微型团队管理bug还是不错的。我记得这个软件改名了还是不维护了,今天去看了看,居然发布新版本了
apache的event 也是采用epoll的事件驱动模式,原理和nginx的实现类似,性能应该也不会相差太大。貌似从08年就有event mpm了,但是一直处于实验状态,所以不能在正式环境中使用。而这些年,nginx确处于飞速发展中。好像event mpm最近正式发布了。但是时过境迁了,追求兼容性的继续使用prefor/work mpm,追求性能的早就改用nginx了,我觉得市场恐怕不太大。用的人少了,解决问题也就麻烦一点,:-)
如果没有太多的原有特性要兼容还是建议使用nginx,另外要找一下系统的瓶颈是什么,再觉得是否更换。
如果改动工作量很大就别该了,除非性能瓶颈在此。
不过一般来说,web应用的瓶颈都不会在静态这里。
我做internet安全工作,看到的坏银太多,所以看重稳定性和安全性多一些。我绝对同意nginx性能卓越。
总体性能还不如nginx,但你的迁移成本会低很多。可以先起一个新apache eventmpm,用iptables rules redirect
小部分流量测试一下。假设西西河在一台独立的机器上运行,没有load balancer或HA