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:
- rest.li --> wciąż w fazie eksperymentalnej dla implementacji NIO opartych na Netty. Więc produkcja nie jest gotowa.
- 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.
- 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.
- 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.
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.
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:
- Scalatra - http://www.scalatra.org / (Scala + Netty)
- RestExpress- https://github.com/RestExpress/RestExpress (Java + Netty)
- Finatra- https://github.com/capotej/finatra (Scala + Finagle + Netty)
Zapraszam do komentowania odpowiedzi - zaktualizuję odpowiedź, aby dodać więcej.
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.
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.
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ć.
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
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