Netty 与 Nginx:基于性能、内存管理、内存占用的优缺点

use*_*844 6 performance proxy reverse-proxy nginx netty

问题:Nginx 和 Netty 用于构建代理服务器的优缺点是什么?

细化问题:

我们正在尝试实现一个代理服务器(正向或反向代理),它位于服务前面,并负责可应用于我们服务的良好实践。

因此,我们正在评估市场上可用的不同解决方案,主要是 Nginx 和 Netty。因此,当我们最初对 Nginx 进行研究时,我们遇到了大量正面的博客,这些博客表明 Nginx 非常快,通过编写自定义模块到 Nginx 插件可以轻松配置。

但是当我们在 Netty 上做 POC 时,我们在使用 Netty 4 时得到了更好的性能数据。 所以我想知道是否有人对 Nginx 和 Netty 进行了一些比较,以及不使用 Netty 作为反向的原因是什么/转发代理解决方案。我们担心与 Java Server 解决方案相关的 GC 问题,因此我们想在继续解决方案之前了解 Nginx 和 Netty 的优缺点。

谢谢,维奈。

Jos*_*son 8

我不知道详细的比较,因为你不是在这里比较苹果和苹果。Netty 是一个非常低级的 java 框架,而 nginx 是一个几乎完整的代理。我不确定你在 netty 上为你的例子写了什么。如果我自己不做任何测试,我想在 netty 上制作一个比 nginx 更快的功能代理会非常困难。

我认为如果您想要一个简单的代理服务器,您应该使用 nginx,因为它很可能具有基本代理所需的所有功能。nginx 既快速又成熟,因此对于基本用例来说它应该做得很好。

如果您正在查看带有特殊插件的更复杂的代理。也许像速率限制/自定义身份验证等,那么可能值得考虑使用 netty。这些东西可以在 nginx 上构建,但需要使用 Lua 脚本。作为开发人员,您可能更喜欢使用 java。

如果您最终选择使用 netty,请记住您可能需要重新实现复杂的功能,例如后端负载平衡。

我使用了一个写在 netty 上的负载均衡器,所以我不想劝阻你。我只想指出一个是预先编写的优化反向代理,而另一个是您必须从头开始编写的。


Nic*_*las 1

我还没有看到或做过任何并排比较,但就 Netty 而言,通过一些仔细的编码和池化直接内存缓冲区的使用,您应该不会看到太多 GC 活动。