Netty based non-blocking Rest framework

Pracuję nad aplikacją RESTfull, która wymaga wysokiej skalowalności. Rozważam frameworki oparte na Netty dla aplikacji RESTfull. Przejrzałem niektóre z dostępnych opcji i próbowałem uzyskać to, co mogą zaoferować jako nieblokującą implementację. Oto moje ustalenia:

  1. rest.li --> wciąż w fazie eksperymentalnej dla implementacji NIO opartych na Netty. Więc produkcja nie jest gotowa.
  2. RESTEasy -- > standardowy projekt JBoss obsługujący Netty 4.x. ale zamiast pełna implementacja NIO oparta na stosie Netty, RESTEasy jest wymianą buforów między Netty i RESTEasy. Nie wykorzystuje zalet Netty. Dlatego skalowalność nie jest tak wysoka, jak oczekiwano od frameworku opartego na Netty.
  3. komponent Netty-http -- > inną opcją jest integracja Apache Camel podczas korzystania z komponentu Netty-http jako punktu końcowego dla routingu żądań do usług ujawnionych w from of beans. Myślę, że to to samo co RESTEasy, tylko komponent Netty-http wykorzystuje możliwości NIO oparte na Netty a reszta systemu użyłaby starego IO. Myślę, że nie pomogłabym zbytnio w uzyskaniu skalowalności.
  4. RESTExpress -- > it claims to be Netty based framework for RESTFull application. Ale ani nie ma przyzwoitej społeczności, ani nie można jej ufać (ponieważ jest bardzo nowa) w przypadku aplikacji korporacyjnej, która wymaga wysokiego poziomu bezpieczeństwa.

Przed uzyskaniem powyższych ustaleń, chciałem użyć jakiegoś gotowego frameworka i wykonać pracę szybciej.

I know it ' s an pytanie oparte na opinii. Ale nadal poważnie potrzebuję pomocy w wyborze odpowiedniego frameworka dla mojej aplikacji. Jeśli w przypadku, nie ma Netty oparte REST framework: czy byłoby mądre, aby przejść do hydrauliki niskiego poziomu Netty oparte NIO kod w mojej aplikacji? Każda pomoc mile widziana. Z góry dzięki.

Author: ynh, 2013-11-04

6 answers

Jeśli naprawdę chcesz nieblokować, musisz zrobić nieblokowanie od podstaw i mieć odpowiednich klientów odpoczynku . W przeciwnym razie, jak stwierdzono w mój komentarz różnica w wydajności będzie znikoma i w wielu przypadkach gorsza dla NIO (Netty z dzieleniem wątków).

Istnieją tylko dwie biblioteki, które znam, aby nie blokować od podstaw Vert.x i nieco Finagle (brakuje mu innych rzeczy, takich jak nieblokujący dostęp do danych).

Powinieneś też wiedzieć Tomcat i inne kontenery serwletów mogące współpracować z JAX-RS obsługują NIO. Problem polega na tym, że nawet jeśli NIO jest obsługiwane, nadal będzie to pojedynczy wątek na żądanie. Tylko Grać, Finagle, Vert.x i pure Netty (niezależnie od NIO) obsługują inny model współdzielonego wątku, a tym samym mają różne mechanizmy współbieżności.

 11
Author: Adam Gent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:13

Oto lista mikroframeworków, które znam dla aplikacji REST:

Zapraszam do komentowania odpowiedzi - zaktualizuję odpowiedź, aby dodać więcej.

 6
Author: trustin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-05 07:35:46

Czy przyjrzałeś się sztuce ?

Wygląda na to, że jesteś skłonny do korzystania z Netty, ale jeśli chcesz rozejrzeć się po bardzo prostej konfiguracji Grizzly + Jersey prawdopodobnie sprawdzi się wystarczająco dobrze. Heck, prosta aplikacja Glassfish 4.0 JAX-RS może również działać dobrze.

 3
Author: user2954240,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 22:09:15

Możesz spojrzeć na AsyncRestTemplate w Spring Framework 4.2.5.Uwolnij. Może być stosowany na Netty.

Uwaga: Domyślnie AsyncRestTemplate opiera się na standardowych obiektach JDK do ustanawiania połączeń HTTP. Możesz przełączyć się na inną bibliotekę HTTP, taką jak Apache HttpComponents, Netty i OkHttp, używając konstruktora akceptującego AsyncClientHttpRequestFactory.

 0
Author: Jingguo Yao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-16 14:13:56

Jest jeszcze jeden framework, który używa Netty i RxJava, nazywa się datamill

Jeśli jesteś zainteresowany budowaniem aplikacji internetowych z wykorzystaniem funkcjonalnego stylu reaktywnego, powinieneś to rozważyć.

 0
Author: Kishore Karunakaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-22 03:46:24

Spring 5 jest wyposażony w reaktywny framework Internetowy o nazwie WebFlux. Możesz wybierać spośród wielu serwerów, takich jak Netty lub Undertow. Reaktywny nieblokujący WebClient został również dodany do wiosny i ma również wsparcie dla reaktywnych Mongo, Redis i Cassandra(myślę, że wkrótce pojawi się więcej).

Spring Boot, "opinioned view of Spring", otrzyma również nową wersję (2.0) opartą na Spring 5. W chwili pisania tego tekstu oczekuje się, że ukaże się w lutym.

Więcej informacja o reaktywnym stosie sprężyny: https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html

 0
Author: Yossarian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-23 20:53:29