锁定老帖子 主题:高性能动态Web服务器的一些探讨
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-02
至于动态部分,我们一般使用Apache,用C++编写CGI/FastCGI。FastCGI因为比CGI少了fork和初始化,并发性能和CPU消耗都比CGI要好很多。本质上,FastCGI是一种同步多进程的Server(也有用多线程模式,但对编码要求更高些)。 这种同步模式的并发性能,受限于FastCGI进程数和请求处理时长:假设每个请求100ms处理完,那么1个FastCGI进程每秒能处理10个请求,一台Web服务器假设起100个FastCGI进程,那就是每秒并发1000。比起一般异步Server每秒1万的性能,差了10倍。更重要的是,如果后端服务的接口耗时因异常情况变长时,FastCGI就像是被挂住一样,性能急剧下降,抖动明显。 我看到有些架构设计,把FastCGI只作为接入层,把消息转发给后面的异步业务逻辑Server。这种设计里,业务逻辑异步Server不用解析HTTP,能复用现有的框架和组件;但前面的FastCGI接入层需要知道业务Server的分布,有变动时要同步刷新配置,并且并发性能也受FastCGI进程数限制。 为什么不在异步Server的网络组件里直接支持HTTP协议呢?貌似难度很大,SSL、上传、认证、缓存、压缩、安全性等等,想起来就头大。参照前面把动静分离的思路,让异步Server只处理动态逻辑,简化功能,这样就省事多了。考虑到Web服务器经常出现代码bug导致入侵的漏洞,规划以下功能: 1、支持GET/POST方法 2、支持绑定多域名 3、HTTP Header长度限定 4、HTTP Body长度限定 5、URL长度限定 6、Cookie长度限定 7、支持应用逻辑设定HTTP Header 8、支持长连接模式 ...... 这样的话,网络组件直接提供HTTP服务,复用了我们在异步Server上的技术积累,也把原来CS模式的框架延伸到了Web领域。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-03
你的意思就是为业务server写个组件替代fastcgi?
|
|
返回顶楼 | |
发表时间:2010-03-03
不是。fastcgi本质上是多进程同步模型,我的想法是为异步模型增加HTTP支持。按照这样混合使用能平衡性能和开发效率:
·异步模型:性能高,开发复杂度高。适用于访问量大的,业务简单的访问。例如判断是否登录 ·同步模型(fastcgi):性能较低,开发复杂度低。适用于逻辑复杂的场景。 |
|
返回顶楼 | |
发表时间:2010-03-09
怎么看,感觉你说的这个东东好像有人已经做过了似的,,如果异步Server能每秒1万的性能的话,前端我宁可使用jsp/servlet 服务器,动态多线程,现在服务器的硬件配置都趋向于多核多线程,,应该好好利用才是啊
|
|
返回顶楼 | |
发表时间:2010-03-10
thinkry 写道 不是。fastcgi本质上是多进程同步模型,我的想法是为异步模型增加HTTP支持。按照这样混合使用能平衡性能和开发效率:
·异步模型:性能高,开发复杂度高。适用于访问量大的,业务简单的访问。例如判断是否登录 ·同步模型(fastcgi):性能较低,开发复杂度低。适用于逻辑复杂的场景。 你说是AsycWeb吗? 你要用C实现,还是Java呢? |
|
返回顶楼 | |
发表时间:2010-03-10
mercyblitz 写道 thinkry 写道 不是。fastcgi本质上是多进程同步模型,我的想法是为异步模型增加HTTP支持。按照这样混合使用能平衡性能和开发效率:
·异步模型:性能高,开发复杂度高。适用于访问量大的,业务简单的访问。例如判断是否登录 ·同步模型(fastcgi):性能较低,开发复杂度低。适用于逻辑复杂的场景。 你说是AsycWeb吗? 你要用C实现,还是Java呢? C++实现。在mmog游戏后台的一些Server中,一般能做到1万/秒的并发。当然有些逻辑比较重的主逻辑Server就另当别论了。 感觉现在做游戏后台的人挺多的,开发异步Server也变得平常了,一旦打通异步Server和HTTP之前的障碍,Web服务就能有更高性能了。 |
|
返回顶楼 | |
发表时间:2010-03-10
haibo 写道 怎么看,感觉你说的这个东东好像有人已经做过了似的,,如果异步Server能每秒1万的性能的话,前端我宁可使用jsp/servlet 服务器,动态多线程,现在服务器的硬件配置都趋向于多核多线程,,应该好好利用才是啊
我对jsp/servlet的性能不了解,呵呵。 我使用的服务器一般是4核,业务一般是单线程单进程异步模式,充分利用CPU,一般划分接入进程、逻辑进程、辅助进程等。网络IO的软中断本身也会耗CPU。如果更多核怎么办?这是后面需要研究的。一个简单的解决方法是把多套服务部署到一台机器上。 至于多线程/多进程,一般是同步模式,逻辑简单,能快速开发,但容易被后端接口阻塞住。我一般用在同步转异步的地方或对性能要求不高的地方。 |
|
返回顶楼 | |
发表时间:2010-03-11
随便用GO或者Erlang做个web服务器都是C10K以上的并发,不用这么麻烦的,选择好个工具最重要。。。
|
|
返回顶楼 | |
发表时间:2010-03-12
最后修改:2010-03-12
“IO一般不是瓶颈”这个结论不能苟同,这部分应该是最大的瓶颈
要写一个好的服务器要考虑的东西不少,比如: 如何处理分布式 如何易于扩展 如何利用好多核的CPU资源 如何减少在用户态和内核态之间的切换次数 在不同系统上,甚至不同内核版本之间功能实现的机制差异,以及支持的策略差异,如何调整服务器的动作方式 …… 写一个服务器容易,写好一个服务器难啊。当然还是希望LZ能早日写出个好的服务器 |
|
返回顶楼 | |
发表时间:2010-03-12
各位大牛,我想研究高性能web怎么搞,麻烦指点如果入手,谢谢。
|
|
返回顶楼 | |