22

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

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

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

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

4

7 回答 7

13

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

我知道只有两个库从一开始就实现了非阻塞Vert.xFinagle(它缺少其他东西,比如非阻塞数据访问)。

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

于 2013-11-05T15:56:30.923 回答
6

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

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

于 2013-11-05T07:35:46.160 回答
3

你看过Play吗?

您似乎倾向于使用 Netty,但如果您愿意环顾四周,一个非常简单的Grizzly + Jersey设置可能会表现得足够好。哎呀,一个简单的 Glassfish 4.0 JAX-RS 应用程序也可能运行良好。

于 2013-11-04T22:09:15.193 回答
1

Spring 5 附带了一个名为 WebFlux 的响应式 Web 框架。您可以从多个服务器中进行选择,例如 Netty 或 Undertow。Spring 中还添加了一个响应式非阻塞 WebClient,它还支持响应式 Mongo、Redis 和 Cassandra(我想很快就会有更多)。

Spring Boot,即“自以为是的 Spring”,也将获得基于 Spring 5 的新版本(2.0)。在撰写本文时,预计将于2 月发布。

有关 Spring 的响应式堆栈的更多信息:https ://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html

于 2018-01-23T20:53:29.200 回答
0

Undertow 3.0将位于Netty 之上(而不是 XNIO)。一个完美、超轻、简单的 API,用于构建像 REST API 服务器这样的应用程序。我将它用于我拥有的几乎所有 Java 微服务。

于 2019-07-15T20:57:44.687 回答
0

您可以查看 Spring Framework 4.2.5.RELEASE 中的AsyncRestTemplate。它可以在 Netty 之上使用。

注意:默认情况下 AsyncRestTemplate 依赖于标准 JDK 工具来建立 HTTP 连接。通过使用接受 AsyncClientHttpRequestFactory 的构造函数,您可以切换到使用不同的 HTTP 库,例如 Apache HttpComponents、Netty 和 OkHttp。

于 2016-03-16T14:13:56.750 回答
0

还有一个使用 Netty 和 RxJava 的框架,叫做datamill

如果您对使用功能响应式风格构建 Web 应用程序感兴趣,那么应该考虑一下。

于 2016-11-22T03:46:24.770 回答