2013-11-03 54 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