2013-11-03 56 views
20

我正在研究一种需要高可伸缩性的RESTfull应用程序。我正在考虑基于Netty的RESTfull应用框架。我浏览了一些可用的选项,并试图获得他们可以提供的非阻塞实现。这里是我的发现:基于Netty的非阻塞REST框架

  1. rest.li - >仍然在基于Netty的NIO实现的实验阶段。所以,不准备生产。
  2. RESTEasy - >支持Netty 4.x的标准JBoss项目。但是,RESTEasy不是基于Netty的完整堆栈实现,而是Netty和RESTEasy之间的缓冲区交换。它没有考虑到Netty的优势。因此,基于Netty的框架的可扩展性并不像预期的那么高。
  3. Netty的-HTTP组件 - >另一种选择是Apache的骆驼集成度,同时使用了Netty-HTTP组件作为路由请求从豆暴露在服务的端点。我认为它与RESTEasy相同,只有Netty-http组件使用基于Netty的NIO功能,而系统的其余部分将使用旧的IO。我认为我不会在很大程度上提供帮助。
  4. RESTExpress - >它声称是基于Netty的RESTFull应用框架。但是,它既没有一个体面的社区,也没有可信赖的(因为它是非常新的),对于需要高度安全性的企业应用程序。

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

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

+0

你可能会感到惊讶,BIO很多时候表现比NIO特别更好地为短请求的情况下(即没有保持活跃或网页套接字)。大多数REST客户端甚至REST通常都是短的请求。 –

+2

使用NIO REST框架不会使您的应用程序具有神奇的可扩展性。让你的应用程序无状态并正确使用缓存标题是一个好的开始。 – eiden

+0

@eiden我已经和Akka-Actors一起玩了远程功能,使它成为一个高度可扩展的分布式应用程序。我只是想摆脱Servlet-API的阻塞性质。我已经开始和Spray + Akka Actors一起玩。 –

回答

11

如果你真的想要非阻塞,你需要从头开始非阻塞,并有proper REST clients。否则,如my comment中所述,性能差异可忽略不计,并且在许多情况下对于NIO(具有线程共享的Netty)而言更差。

我知道只有两个库从零开始非阻塞Vert.x并且有点Finagle(它缺少像非阻塞数据访问的其他内容)。

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

+0

我没有得到你想说的“正确的REST客户端”。你能否给我提供更多的信息?感谢您的回复。 –

+1

我用链接编辑了答案。我的意思是支持永久连接或完全使用不同的协议。 Node.js和整个非阻塞/单线程事件循环的巨大推动力是因为持久连接变得越来越普遍(Websockets,Comet等)。由于线程/请求,几乎所有传统的Java REST服务都会对流式REST API产生困难,因为不管NIO如何,都会有10,000个长时间运行的请求。这就是说大多数REST客户端会做GET/POST/DELETE/PUT作为请求,然后立即关闭连接。 –

3

你已经采取了看Play

看样子,你倾向于使用Netty的,但如果你愿意看周围一个非常简单的Grizzly + Jersey设置可能会执行不够好。哎呀,一个简单的Glassfish 4.0 JAX-RS应用程序也可能工作得很好。

0

你可以在Spring框架4.2.5.RELEASE看看AsyncRestTemplate。它可以在Netty之上使用。

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

0

还有一个其中一个Netty和RxJava框架,这就是所谓的datamill

如果您有兴趣制作使用功能活性的风格,那么应该考虑它的Web应用程序。

0

春天5附带一个名为WebFlux反应web框架。您可以选择多个服务器,如Netty或Undertow。一个被动的非阻塞WebClient也被添加到Spring中,它也支持被动的Mongo,Redis和Cassandra(我猜更多的是即将推出)。

Spring Boot,'Spring的独立观点',也将得到基于Spring 5的新版本(2.0)。在撰写本文时,它将是expected将在2月份发布。

春天的反应栈上的更多信息:https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html