基于 Netty 的非阻塞 REST 框架

2022-09-02 01:39:50

我正在开发一个需要高可扩展性的RESTfull应用程序。我正在考虑基于Netty的RESTfull应用程序的框架。我浏览了一些可用的选项,并试图获得它们可以作为非阻塞实现提供的内容。以下是我的发现:

  1. rest.li --> 基于Netty的NIO实现仍处于实验阶段。所以,还没有生产就绪。
  2. RESTEasy -->支持Netty 4.x的标准JBoss项目。但是,RESTEasy不是基于Netty的全栈NIO实现,而是Netty和RESTEasy之间的缓冲区交换。它没有利用Netty的优势。因此,可扩展性并不像基于Netty的框架所期望的那样高。
  3. Netty-http组件 -->另一种选择是Apache Camel集成,同时使用Netty-http组件作为端点,用于将请求路由到从bean中公开的服务。我认为它与RESTEasy相同,只有Netty-http组件使用基于Netty的NIO功能,系统的其余部分将使用旧的IO。我不认为我会在获得可扩展性方面有太大帮助。
  4. RESTExpress --> 它声称是基于Netty的RESTFull应用程序的框架。但是,对于需要高度安全性的企业应用程序,它既没有一个体面的社区,也没有可以信任(因为它是非常新的)。

在获得上述发现之前,我想使用一些现成的框架来更快地完成工作。

我知道这是一个基于意见的问题。但是,我仍然非常需要帮助为我的应用程序选择正确的框架。如果以防万一,没有基于Netty的REST框架:在我的应用程序中管道基于Netty的低级NIO代码是否明智?任何帮助赞赏。提前致谢。


答案 1

如果你真的想要非阻塞,你需要从头开始做非阻塞,并有适当的REST客户端。否则,正如我在评论中所述,性能差异将可以忽略不计,并且在许多情况下对于NIO(具有线程共享的Netty)来说更糟。

据我所知,只有两个库从头开始做非阻塞Vert.x和一些Finagle(它缺少其他的东西,如非阻塞数据访问)。

您还应该知道Tomcat和其他各种可以与JAX-RS支持NIO一起使用的servlet容器。问题是,即使NIO受支持,它仍然是每个请求的单个线程。只有Play,Finagle,Vert.x和纯Netty(无论NIO如何)支持不同的共享线程模型,因此具有不同的并发机制。


答案 2

以下是我所知道的用于 REST 应用程序的微框架列表:

请随时对答案发表评论 - 我会更新答案以添加更多。