簡體   English   中英

基於Netty的非阻塞REST框架

[英]Netty based non-blocking REST framework

我正在開發一個需要高可伸縮性的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。 我不認為我會在獲得scalabiltiy方面幫助太大。
  4. RESTExpress - >它聲稱是基於Netty的RESTFull應用程序框架。 但是,對於需要高度安全性的企業應用程序而言,它既沒有一個像樣的社區,也沒有可信任(因為它是非常新的)。

在得到上述發現之前,我想使用一些隨時可用的框架並更快地完成工作。

我知道這是一個基於意見的問題。 但是,我仍然非常需要幫助為我的應用程序選擇正確的框架。 如果以防萬一,沒有基於Netty的REST框架:在我的應用程序中使用基於Netty的低級NIO代碼是否明智? 任何幫助贊賞。 提前致謝。

如果你真的想要非阻塞,你需要從頭開始進行非阻塞,並擁有適當的REST客戶端 否則,如我的評論中所述,性能差異可以忽略不計,並且在許多情況下NIO(帶線程共享的Netty)更糟糕。

我知道只有兩個庫從頭開始進行非阻塞Vert.x和一些Finagle (它缺少其他東西,如非阻塞數據訪問)。

您還應該了解可以使用JAX-RS支持NIO的Tomcat和其他各種servlet容器。 問題是,即使支持NIO,它仍然是每個請求的單個線程。 只有Play,Finagle,Vert.x和純Netty(不管NIO)支持不同的共享線程模型,因此具有不同的並發機制。

這是我知道的REST應用程序的微框架列表:

請隨時評論答案 - 我會更新答案以添加更多內容。

你看過Play嗎?

看來你傾向於使用Netty但是如果你願意環顧一下非常簡單的Grizzly + Jersey設置可能會表現得很好。 哎呀,一個簡單的Glassfish 4.0 JAX-RS應用程序也可以運行得很好。

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

注意:默認情況下,AsyncRestTemplate依賴於標准JDK工具來建立HTTP連接。 您可以通過使用接受AsyncClientHttpRequestFactory的構造函數切換到使用不同的HTTP庫,例如Apache HttpComponents,Netty和OkHttp。

還有一個框架使用Netty和RxJava,它叫做datamill

如果您對使用功能性反應式風格構建Web應用程序感興趣,那么應該考慮它。

Spring 5附帶了一個名為WebFlux的反應式Web框架。 您可以選擇Netty或Undertow等多個服務器。 一個反應性非阻塞WebClient也被添加到Spring,它也支持反應性Mongo,Redis和Cassandra(我想更多即將推出)。

春天的引導,“春天的觀點”,也將獲得基於Spring 5的新版本(2.0)。在撰寫本文時,它預計將在2月份發布。

有關Spring的反應堆棧的更多信息: https//docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html

Undertow 3.0將成為Netty(而不是XNIO)的首選 一個完美,超輕,簡單的API,用於構建REST API服務器之類的應用程序。 我幾乎用於任何Java微服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM