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:
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.
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.
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.
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.
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
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).
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.
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.