找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3255|回复: 2

Nginx和PSS的对比与侧重

[复制链接]
发表于 2013-7-8 14:49:33 | 显示全部楼层 |阅读模式
最近PSS的开源进程也没有停下,虽然版本还没有到1.0,不过在此期间,也不断在工程的实践不断的总结和修改。在这里感谢那些为PSS做出贡献的朋友。
说到开发PSS的初衷,其实很简单,就是简化服务器开发人员的工作量,努力做到专注。可是随着开发的一步步深入,越发的发现,其实,PSS的另外一个目的也很重要,第一是提供快速开发的途径,第二是排错和维护。
写东西总不能闷头去写,这样做不出好的产品,要时时刻刻从实际需求出发,设计的初衷就是简化服务器开发量。虽然遇到了几次几乎重构的困扰,但是正因为如此,它才会不断进化。
最近读了一下Ngnix的代码,总结了一下它的流程,忽然发现很多东西和PSS里面的流程几乎是一样的,看到很多地方也会豁然开朗。
还是得说, Ngnix代码的严谨性是毋庸置疑的。用C作为底层虽然有时增加了代码阅读的困难,但是习惯了后就会发现其实作者的思路一直很清晰。
Ngnix侧重短连接,这从它的代码设计上就可以一眼看出来。
它首先支持多进程,每个进程里面可以设置若干个线程(最多128个,我觉得这个以后应该可以根据硬件的提升而修改),也可以不设置线程,用队列去处理,不过,我还是觉得多进程多线程是处理超多短连接的最好方法。
而PSS在这方面,和Ngnix几乎想到一起去了,但是我却一直犹豫没有采用多进程。因为我有我的顾虑,多进程好处是短连接并发的数据吞吐,而PSS的目标是维持长链的稳定输出,那么,如果设计为多进程,会更多的抢占系统资源,而我的想法是,把更多的资源留给PSS的插件。也就是逻辑部分,而连接只是一种面向长连接的保存。
Ngnix初始化的时候,声明了连接池和事件池,这一点和我的PSS一致,尽量减少不必要的new和copy,是很重要的。
Ngnix在开始的时候,会按照顺序加载很多插件。这些其实多是Ngnix核心插件和http插件,虽然这里完全可以做到可配置,甚至你可以换成你的插件,但是由于它考虑对http的支持,所以很多东西围绕这个来建立的。这一点非常好。
PSS在这方面尽量做到简洁,因为没有http解析这样的问题,所以,可以做到简单一些,对于数据包的拆解和组合,完全可以放在一个so或者dll里面去完成。其他的处理,留给逻辑插件去解决吧。
真心评论,ngnix比PSS写的好得多,性能也会优于 PSS,因为它用的纯C写的。
在我看来,其实追求极致的性能并不是我的主要目标。而是便捷的开发性。
此后,要和ngnix学的还有很多。不过,我会不断的走下去。
或许,只有自己走过一遍,才会知道某些设计思路的由来。不断的融合别人的长处,才能尽量做到最好。
发表于 2013-7-8 22:43:04 | 显示全部楼层
设计目标的不同,会直接导致具体设计和实现细节的差别。Nginx是好产品,值得观摩学习,加油!
发表于 2013-7-26 08:52:37 | 显示全部楼层
不是因为纯C写的性能会好,而是在基本上每个细节都做到了优化。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-4 01:35 , Processed in 0.013505 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表