Подтвердить что ты не робот

Основанная на Netty блокировка REST-инфраструктуры

Я работаю над RESTfull-приложением, которое требует высокой масштабируемости. Я рассматриваю основы Netty для приложений RESTfull. Я просмотрел некоторые из доступных вариантов и попытался получить то, что они могут предложить в качестве неблокирующей реализации. Вот мои выводы:

  • rest.li → Еще в экспериментальной фазе для реализаций NIO на основе Netty. Таким образом, производство не готово.
  • RESTEasy → Стандартный проект JBoss, который поддерживает Netty 4.x. Но вместо полной реализации NIO, основанной на Netty, RESTEasy является буфером обмена между Netty и RESTEasy. Это не использует преимущества Netty. Поэтому масштабируемость не так высока, как ожидалось, из фреймворка Netty.
  • Компонент Netty-http → Еще один вариант - интеграция Apache Camel при использовании компонента Netty-http в качестве конечной точки для запросов на маршрутизацию к службам, открытым из beans. Я думаю, что это так же, как RESTEasy, только компонент Netty-http использует возможности NIO на основе Netty, а остальная система будет использовать старый IO. Я не думаю, что я бы очень помог в получении scalabiltiy.
  • RESTExpress → Он утверждает, что он основан на основе Netty для приложения RESTFull. Но и у него нет приличного сообщества, и ему нельзя доверять (потому что он очень новый) для корпоративного приложения, требующего высокой степени безопасности.

Прежде чем приступить к вышеуказанным выводам, я хотел использовать некоторые готовые к использованию фреймворки и быстрее выполнять работу.

Я знаю, что это вопрос, основанный на мнениях. Но, тем не менее, мне очень нужна помощь в выборе правильной структуры для моего приложения. Если в случае нет основанной на Netty структуры REST: было бы разумно пойти на нивелирование NIO-кода на основе Netty в моем приложении? Любая помощь оценивается. Заранее спасибо.

4b9b3361

Ответ 1

Если вы действительно хотите неблокировать, вам нужно сделать неблокирование с нуля и правильные клиенты REST. В противном случае, как указано в моем комментарии, разница в производительности будет незначительной и во многих случаях хуже для NIO (Netty с разделением потоков).

Только две библиотеки, которые я знаю, не блокируют с нуля Vert.x и несколько Finagle (его отсутствуют другие вещи, такие как неблокирующий доступ к данным).

Вы также должны знать Tomcat и различные другие контейнеры сервлетов, которые могут работать с поддержкой JAX-RS NIO. Проблема в том, что, несмотря на поддержку NIO, он по-прежнему будет одним потоком для каждого запроса. Только Play, Finagle, Vert.x и чистая Netty (независимо от NIO) поддерживают другую общую файловую модель и, следовательно, имеют разные механизмы для выполнения concurrency.

Ответ 3

Вы взглянули на Play?

Похоже, вы склонны использовать Netty, но если вы захотите посмотреть вокруг очень простой Grizzly + Jersey, то установка, вероятно, будет хорошо работать достаточно. Черт, просто приложение Glassfish 4.0 JAX-RS может работать хорошо.

Ответ 4

Вы можете взглянуть на AsyncRestTemplate в Spring Framework 4.2.5.RELEASE. Его можно использовать поверх Netty.

Примечание: по умолчанию AsyncRestTemplate использует стандартные возможности JDK для установления HTTP-соединений. Вы можете переключиться на использование другой библиотеки HTTP, такой как Apache HttpComponents, Netty и OkHttp, используя конструктор, принимающий AsyncClientHttpRequestFactory.

Ответ 5

Существует еще одна структура, которая использует Netty и RxJava, которая называется datamill

Если вы заинтересованы в создании веб-приложений с использованием функционального реактивного стиля, тогда следует его рассмотреть.

Ответ 6

Spring 5 поставляется с реактивной веб-картой, называемой WebFlux. Вы можете выбирать из нескольких серверов, таких как Netty или Undertow. Реактивный неблокирующий WebClient также был добавлен в Spring, и он также поддерживает реактивные Mongo, Redis и Cassandra (я думаю, что больше скоро появится).

Spring Загрузка, "упрямый взгляд на Spring", также получит новую версию (2.0) на основе Spring 5. На момент написания это ожидается, который будет выпущен в феврале.

Дополнительная информация о реактивном стеке Spring: https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html

Ответ 7

Undertow 3.0 будет на вершине Netty (вместо XNIO). Идеальный, супер легкий, простой API для создания приложений, таких как REST API server. Я использую его практически для любых имеющихся у меня микросервисов Java.