web-dev-qa-db-fra.com

Non bloquant basé sur Netty REST

Je travaille sur une application RESTfull qui nécessite une grande évolutivité. J'envisage des frameworks basés sur Netty pour les applications RESTfull. J'ai parcouru certaines des options disponibles et essayé d'obtenir ce qu'elles peuvent offrir en tant qu'implémentation non bloquante. Voici mes découvertes:

  1. rest.li -> Toujours en phase expérimentale pour les implémentations NIO basées sur Netty. Donc, pas prêt pour la production.
  2. RESTEasy -> Projet JBoss standard qui prend en charge Netty 4.x. Mais, au lieu de l'implémentation NIO basée sur la pile complète Netty, RESTEasy est un échange de tampon entre Netty et RESTEasy. Il ne prend pas les avantages de Netty. Par conséquent, l'évolutivité n'est pas aussi élevée que prévu dans un cadre basé sur Netty.
  3. Composant Netty-http -> Une autre option est l'intégration d'Apache Camel tout en utilisant le composant Netty-http comme point de terminaison pour acheminer les demandes vers les services exposés depuis des beans. Je pense que c'est la même chose que RESTEasy, seul le composant Netty-http utilise des capacités NIO basées sur Netty et le reste du système utiliserait l'ancien IO. Je ne pense pas que j'aiderais beaucoup à gagner en scalabilité.
  4. RESTExpress -> Il prétend être un framework basé sur Netty pour l'application RESTFull. Mais, ni elle n'a une communauté décente, ni fiable (car c'est très nouveau) pour les applications d'entreprise qui nécessitent un haut niveau de sécurité.

Avant d'avoir les conclusions ci-dessus, je voulais utiliser un cadre prêt à l'emploi et accélérer le travail.

Je sais que c'est une question d'opinion. Mais, j'ai toujours sérieusement besoin d'aide pour choisir le bon cadre pour mon application. Si dans le cas, il n'y a pas de base Netty REST: serait-il sage d'opter pour le code NIO basé sur Netty bas niveau de plomberie dans mon application? Toute aide appréciée. Merci d'avance.

21
Vaibhav Raj

Si vous voulez vraiment ne pas bloquer, vous devez le faire à partir de zéro et avoir bon REST clients . Sinon, comme indiqué dans mon commentaire la différence de performances sera négligeable et dans de nombreux cas pire pour NIO (Netty avec partage de threads).

Il n'y a que deux bibliothèques que je connais qui ne bloquent pas à partir de zéro Vert.x et quelque peu Finagle (il manque d'autres choses comme l'accès aux données non bloquant).

Vous devez également connaître Tomcat et divers autres conteneurs de servlets pouvant fonctionner avec la prise en charge NIO de JAX-RS. Le problème est que même si NIO est pris en charge, il restera un seul thread par demande. Seuls Play, Finagle, Vert.x et pure Netty (indépendamment de NIO) prennent en charge un modèle de thread partagé partagé différent et ont donc des mécanismes différents pour effectuer la concurrence.

12
Adam Gent

Voici la liste des microframes que je connais pour les applications REST:

N'hésitez pas à commenter la réponse - je mettrai à jour la réponse pour en ajouter davantage.

6
trustin

Avez-vous jeté un coup d'œil à Play ?

Il semble que vous ayez tendance à utiliser Netty mais si vous êtes prêt à regarder autour d'une configuration très simple Grizzly + Jersey fonctionnera probablement assez bien. Heck, une simple application Glassfish 4.0 JAX-RS peut aussi bien fonctionner.

3
user2954240

Spring 5 est livré avec un framework Web réactif appelé WebFlux. Vous pouvez choisir parmi plusieurs serveurs comme Netty ou Undertow. Un WebClient réactif non bloquant a également été ajouté à Spring et il prend également en charge réactif Mongo, Redis et Cassandra (je suppose que d'autres seront bientôt disponibles).

Spring Boot, la "vue avisée de Spring", recevra également une nouvelle version (2.0) basée sur Spring 5. Au moment de la rédaction, il est prév qui sortira en février.

Plus d'informations sur la pile réactive de Spring: https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html

0
Martin Tarjányi

ndertow 3. sera au sommet de Netty (au lieu de XNIO) . Une API parfaite, super légère et simple pour construire une application comme REST API server. Je l'utilise pour presque tous les Java Microservices que j'ai).

0
user1079877

Vous pouvez jeter un œil à AsyncRestTemplate dans Spring Framework 4.2.5.RELEASE. Il peut être utilisé au-dessus de Netty.

Remarque: par défaut, AsyncRestTemplate s'appuie sur des fonctionnalités JDK standard pour établir des connexions HTTP. Vous pouvez basculer pour utiliser une bibliothèque HTTP différente telle que Apache HttpComponents, Netty et OkHttp en utilisant un constructeur acceptant une AsyncClientHttpRequestFactory.

0
Jingguo Yao

Il y a un autre framework qui utilise Netty et RxJava, ça s'appelle datamill

Si vous êtes intéressé à créer des applications Web en utilisant un style réactif fonctionnel, alors envisagez-le.

0