主题:【讨论】nginx 还是 apache? -- 铁手

大河奔流 导读 复 35 阅 30876

O 反向PROXY在此不适用 1 copypst 字75 2012-03-15 00:55:01
O 环境不同,应用不同选择也不同,Nginx未必适合老铁 1 copypst 字668 2012-03-15 01:17:58
O 我的建议有两个 1 liuyanzhen 字369 2012-03-15 06:56:21
O 拙见 1 freebsd 字527 2012-03-15 08:51:40
O 根据我对apache和nginx的使用经验看,n胜出 3 季侯 字540 2012-03-15 09:51:17
O 你什么时候做的压力测试,大并发的定义是什么 1 季侯 字290 2012-03-15 09:59:22
O 要透气 whamlu 字70 2012-03-15 10:58:54
O 两位对新的 event MPM有没有看法 铁手 字261 2012-03-15 17:56:08
O 老铁未必有精力搞nginx xda111 字111 2012-03-15 23:27:28
O 老铁应该号召大家捐款, 然后去amazon搞个 3 xda111 字133 2012-03-15 23:31:16
O bugfree的软件以前是有的,好像是改名了 晨池 字169 2012-03-15 23:57:33
O apache event mpm出来的太晚了 季侯 字461 2012-03-16 06:15:29
O 这个的确是关键。 季侯 字92 2012-03-16 06:17:41
O 可能我看到的坏银太多了 copypst 字93 2012-03-16 15:29:25
O 值得一试。 copypst 字177 2012-03-16 15:36:31
3687297 复 3686259
copypst
反向PROXY在此不适用 1

现在老铁的西西河的问题是内存不够,目前并发数尚可,反向PROXY未必会解决问题。


2012-03-15 00:55:01
2012-03-15 01:17:58
3687331 复 3686305
copypstcopypst`18806`/bbsIMG/face/0000.gif`70`16`96`798`从九品上:文林郎|陪戎校尉`2007-08-02 20:49:50`0
环境不同,应用不同选择也不同,Nginx未必适合老铁 1

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 回复
最后于2012-03-15 01:27:43改,共1次;
2012-03-15 01:17:58
2012-03-15 06:56:21
3687614 复 3685846
liuyanzhenliuyanzhen`67698`/bbsIMG/face/0000.gif`70`41`89`991`从九品上:文林郎|陪戎校尉`2010-12-25 16:07:41`0
我的建议有两个 1

1,大家捐点钱

首先老铁要说明自己使用的是什么服务器有没有添加内存的可能性,如果没有请参照1.1

1.1

购置新服务器--内存怎么样也能扩到40多G那种。

2,在实现1 选项目标的前提下,

2。1 利用 淘汰下的服务器做架构更改尝试

既然河内由人技术方面出头---

2.2 架构完成后-将数据迁移到新架构,同时新旧两套服务跑。

前端做个类似于服务状态监测的程序,一旦新架构支撑不住,切换到旧的服务环境。


2012-03-15 06:56:21
2012-03-15 08:51:40
3687714 复 3685846
freebsdfreebsd`32915`/bbsIMG/face/0000.gif`70`51`352`5420`正六品上:朝议郎|昭武校尉`2009-03-22 03:46:07`0
拙见 1

以前做过apache和nginx的对比性能测试,结论如下

大并发情况下,Apache没Nginx理想,但是差距不大.

apache的失败率多于Nginx,但是请求处理时间略低于Nginx;

fastcgi用tcp-socket方式,比unix-socket的失败率低很多。

nginx在内存占用上有明显优势,大概节省了1/4内存占用量

静态文件apache完败nginx。

以上数据,是实测结果,可以做选型参考

给铁手的一些建议

apacheMPM比prefork应该强很多,如果能转最好转一下,带来好处还是蛮多的。

如果有能力拆分前台改用集群还是有必要的,做应用均衡或者做应用切分带来的性能提升都很大,不然光靠优化这样挖掘最后提升太小了。


  • 本帖 1 回复
2012-03-15 08:51:40
2012-03-15 09:51:17
3687763 复 3687331
季侯季侯`4358`/bbsIMG/face/0000.gif`70`5327`1765`39594`正二品:特进|辅国大将军`2004-12-05 05:57:11`0
根据我对apache和nginx的使用经验看,n胜出 3

nginx默认的工作模式是一个master进程加n个worker进程,n默认是4,一般配置成cpu个数。只有worker进程处理http请求,所以即使某个worker进程崩溃了,也不会影响其他worker进程,而且多数情况下master会重启崩溃的worker。

至于说bug,这世界上没有bugfree的软件,但是普通的应用场景根本不会触发nginx的bug,这包括了西西河的应用。其实我们公司以前也是使用apache,不过这些年都逐渐改用nginx,光我团队负责的nginx就有几十台。应该说使用效果很好,非常稳定。除非改脚本,否则根本不用管它。国内的大互联网公司,基本都放弃apache了。

另外nginx的维护非常方便,脚本可读性很好。


  • 本帖 3 回复
2012-03-15 09:51:17
2012-03-15 09:59:22
3687773 复 3687714
季侯季侯`4358`/bbsIMG/face/0000.gif`70`5327`1765`39594`正二品:特进|辅国大将军`2004-12-05 05:57:11`0
你什么时候做的压力测试,大并发的定义是什么 1

如果采用worker 的apache mpm那么apache一般也就能有3/4000的并发链接,prefork性能更差;而nginx几万个并发没压力。

之所以性能差距这么大,是因为在linux下nginx采用的是基于epoll的事件驱动模型,而prefork/worker都是采用每个链接一个线程/进程的模式,后者太古老了,已经不能适应c10k/c100k的场景需求。


  • 本帖 1 回复
2012-03-15 09:59:22
3687846 复 3685846
whamlu
要透气

河主,俺啥都不懂,时政版这两天口水太多了,潜水也快被淹死,过来透气的。


2012-03-15 10:58:54
2012-03-15 17:56:08
3688119 复 3687773
铁手
铁手`352`/bbsIMG/upload/face/352.gif`70`45480`39467`907208`从三品:银青光禄大夫|云麾将军`2003-05-03 11:59:57`0
两位对新的 event MPM有没有看法

最新的apache httpd 2.4版本,我试着在自己机器上从源代码安装,MPM全选,并且是loadable的情况下,在我的机器里缺省的MPM是event。应该是代表一种趋势,和nginx靠拢?或者可能产生类似的性能?

还有一点值得注意的是,php的最新版本,包括了 php-fpm,也许是鼓励fast cgi的使用。


  • 本帖 2 回复
2012-03-15 17:56:08
2012-03-15 23:27:28
3688585 复 3687763
xda111xda111`52289`/bbsIMG/face/0000.gif`70`746`675`15224`从四品下:中大夫|明威将军`2010-01-26 20:46:04`0
老铁未必有精力搞nginx

做过一次将系统从apache整体转移到nginx的事情. 成本挺高的. 甚至很多php脚本都被影响到.

相对apache,nginx专业了一点.


  • 本帖 1 回复
2012-03-15 23:27:28
2012-03-15 23:31:16
3688590 复 3685846
xda111xda111`52289`/bbsIMG/face/0000.gif`70`746`675`15224`从四品下:中大夫|明威将军`2010-01-26 20:46:04`0
老铁应该号召大家捐款, 然后去amazon搞个 3

ec2, 内存跟不上了点个按钮就升级. 新加坡美国都开一个node, 照顾一下翻墙众.

数据库用RDS, 每天自动备份.

然后老铁可以专心写网页, 运营网站.


2012-03-15 23:31:16
2012-03-15 23:57:33
3688630 复 3687763
晨池
晨池`18927`http://picture.talkcc.com/0,0805/18927_09013654.jpg`70`7741`4399`67597`从四品下:中大夫|明威将军`2007-08-11 22:57:11`0
bugfree的软件以前是有的,好像是改名了

http://www.bugfree.org.cn/

不是真的bugfree,是人家起了个好名字。我用着还可以,微型团队管理bug还是不错的。我记得这个软件改名了还是不维护了,今天去看了看,居然发布新版本了


2012-03-15 23:57:33
2012-03-16 06:15:29
3689154 复 3688119
季侯季侯`4358`/bbsIMG/face/0000.gif`70`5327`1765`39594`正二品:特进|辅国大将军`2004-12-05 05:57:11`0
apache event mpm出来的太晚了

apache的event 也是采用epoll的事件驱动模式,原理和nginx的实现类似,性能应该也不会相差太大。貌似从08年就有event mpm了,但是一直处于实验状态,所以不能在正式环境中使用。而这些年,nginx确处于飞速发展中。好像event mpm最近正式发布了。但是时过境迁了,追求兼容性的继续使用prefor/work mpm,追求性能的早就改用nginx了,我觉得市场恐怕不太大。用的人少了,解决问题也就麻烦一点,:-)

如果没有太多的原有特性要兼容还是建议使用nginx,另外要找一下系统的瓶颈是什么,再觉得是否更换。


2012-03-16 06:15:29
2012-03-16 06:17:41
3689158 复 3688585
季侯季侯`4358`/bbsIMG/face/0000.gif`70`5327`1765`39594`正二品:特进|辅国大将军`2004-12-05 05:57:11`0
这个的确是关键。

如果改动工作量很大就别该了,除非性能瓶颈在此。

不过一般来说,web应用的瓶颈都不会在静态这里。


2012-03-16 06:17:41
2012-03-16 15:29:25
3689686 复 3687763
copypstcopypst`18806`/bbsIMG/face/0000.gif`70`16`96`798`从九品上:文林郎|陪戎校尉`2007-08-02 20:49:50`0
可能我看到的坏银太多了

我做internet安全工作,看到的坏银太多,所以看重稳定性和安全性多一些。我绝对同意nginx性能卓越。


2012-03-16 15:29:25
2012-03-16 15:36:31
3689692 复 3688119
copypstcopypst`18806`/bbsIMG/face/0000.gif`70`16`96`798`从九品上:文林郎|陪戎校尉`2007-08-02 20:49:50`0
值得一试。

总体性能还不如nginx,但你的迁移成本会低很多。可以先起一个新apache eventmpm,用iptables rules redirect

小部分流量测试一下。假设西西河在一台独立的机器上运行,没有load balancer或HA


2012-03-16 15:36:31
帖内引用