nginx+tomcat与netty优缺点

david95wj 发布于 2014/06/10 10:12
阅读 36K+
收藏 2

MySQL连接为什么挂死了?别踩坑!>>>

话说nginx是异步处理,放在tomcat的前端可以有效的做到负载均衡。netty也是目前开源的异步服务器开源框架。两者都是解决应用大并发处理的方式。二者优缺点在何在?诚恳征求大家意见。
加载中
1
Grrrr
Grrrr

我来给你解答。

我的架构最开始是 nginx + [netty (tcp) ...] 用nginx做负载均衡。后来分布式接口变成了http restful -> nginx + [netty(http) ...]

于是参考了netty的官方http例子,开始移植代码,其实移植量不大,只需要把原来的tpc handler里面的逻辑放到http handler里面就可以了。本以为ok了,测试才发现了大量的问题,其实问题本身是由于对http基础掌握的还不够透彻,比如keep-alive属性,这个平时基本不用的东西,当你要自己开发http server时,变的很有用,你不能每次都close channel.你要化很多时间了解header里面每个字段的意思,然后去实现它。再比如一个post请求,你要自己写代码从body里面读数据,解码等。

最终我放弃了netty,回到了tomcat.应为tomcat把http的一切都帮你搞定了。

最终的架构是 nginx + [tomcat(http) ...]

tomcat就是针对http层的,所以我建议http还是选择tomcat(或者其他成熟的http-server),并不是说netty不好,而是你的选择问题,netty是一个网络组件,tcp,udp,http都可以弄,但是官方文档都是些hello wolrd级别的。如果你非常了解http结构,完全可以基于netty搞出一个比tomcat牛的http server.

如果做tcp开发,netty不二之选!

programtic
programtic
这种情况,选择netty开源的rpc框架会好很多,如果自己去开发,会遇到很多坑。
1
南湖船老大
南湖船老大

netty 对程序员要求太高太高,非常偏底层,不是淘宝级别的程序员很难搞定。全中国能搞定netty的程序员手拉手可以围起一个篮球场,而且是半场。

对HTTP,TCP协议要非常清楚,玩多线程要跟玩hello world一样熟悉才行。能把netty搞定,搞nginx二次开发,甚至自己开发nginx,就是小菜一碟。因为他和nginx是一个级别的。

你想想,全中国能玩转nginx的有几个人?那些编译下,配置下的不能叫玩nginx的,只能叫运维。就那么几个一线、二线公司的少数几个程序员能玩转,掰着手指头就能数过来。

o
open-man
回复 @abcbuzhiming : 看完你的评价,我已经忘了naginx的正确写法了,到底是naginx?aginx?nginx?一脸懵逼。。。。
chenghm123
chenghm123
你也太小看程序员了、、、、、
n
nintar
回复 @abcbuzhiming : 完全同意你的看法,我认为正是别人的高明才会使Netty和nginx变的如此的好用,而要真正的能理解吃透这两样东西,没有深厚的内功心法是不行的。。。。。
n
nintar
回复 @zhustanley : 对于Netty 和Nginx这类东西我认为我们应该怀有敬畏之心,我是一个老程序员,如果说学会使用我觉得半天就可以了,但如果想要玩的转那就不是几个月能搞定的事了。
z
zhustanley
这么简单的东西一个星期就可以搞定了
下一页
0
狄大人
狄大人
tomcat接触多,现在用的就是nginx+tomcat结构,netty没有了解过,话说tomcat群众基础很深厚的。
0
穿越星辰
穿越星辰

nginx是web服务器与apache一样,netty可以理解为一个java的异步编程框架,用它可以方便的进行网络编程,跟mima一样。

0
梅开源
梅开源

前者搞网页

后者搞xxx服务器

0
abcbuzhiming
abcbuzhiming
完全没有必要拿Netty去整Http服务器,tomcat从7开始默认就是nio的,而且人家专门为http实现的,不比你自己写的好吗?自己造轮子很多时候是为了练习,用在项目里的东西是还是选业界成熟方案比较好,我有一个前辈高手,非常擅长自己造轮子,长连接服务器坚持自己用NIO写不用Netty,结果就是他的服务器一周会崩个两三次,而我用Netty的服务器可以跑一个月啥事情没有,但是比理论根基他比我牛逼多了,还是很崇拜他的
0
y
yilong7797
ngnix+tomcat根本不适合用户量大的情况,tomcat的线程模型注定了不能适用于并发大的场景,netty是IO框架,本身并不具备web容器的功能,推荐适用resteasy+netty
0
暴走悠悠
暴走悠悠

引用来自“yilong7797”的评论

ngnix+tomcat根本不适合用户量大的情况,tomcat的线程模型注定了不能适用于并发大的场景,netty是IO框架,本身并不具备web容器的功能,推荐适用resteasy+netty

当今云时代,Tomcat根本不需要大并发。都是瘦子机,计算量不够就立马增加加ECS(虚机)数量横向扩展能力呗。

Nginx的确牛,往前面一站,后面可以跑好多搭载Tomcat的upstream(ECS)。

返回顶部
顶部