2 votes

Quel est le meilleur conteneur d'application pour un conteneur Docker ?

Notre future architecture est de s'orienter vers les services docker /micro. Actuellement, nous utilisons JBoss EAP 6.4 (avec possibilité de mise à niveau vers EAP 7) et Tomcat.

Selon moi, le conteneur JEE est trop lourd (lent, plus de mémoire, plus de maintenance, etc.) pour un environnement de microservices. Cependant, on m'a dit que EAP 7 est assez rapide et léger et qu'il peut être utilisé pour développer des microservices. Comment décider entre EAP 7 et Tomcat 8 pour docker/microservices ? Le coût et la vitesse sont des éléments à prendre en compte.

10voto

Arun Gupta Points 629

EAP7 vs Tomcat 8 est une question ancienne à laquelle il a été répondu à de multiples reprises. aquí , aquí y aquí .

Tomcat n'est qu'un conteneur web alors qu'EAP7 est un serveur d'application qui fournit toutes les fonctionnalités de Java EE 7 telles que la persistance, la messagerie, les services web, la sécurité, la gestion, etc. EAP7 se décline en deux profils - Web Profile et Full Profile. Le profil Web est une version beaucoup plus légère et ne comprend que les implémentations nécessaires à la création d'une application Web. Le profil complet est, comme on peut s'y attendre, la version la plus complète de la plate-forme. L'utilisation du profil Web d'EAP 7 vous permettra donc d'alléger considérablement la plate-forme.

Avec Tomcat, vous devrez utiliser quelque chose comme Spring pour apporter la fonctionnalité équivalente et empaqueter tous les JARs pertinents avec votre application.

Ces discussions sont généralement utiles lorsque vous démarrez un tout nouveau projet et que vous disposez de ressources Java EE ou Spring. Voici les raisons pour lesquelles vous pouvez envisager d'utiliser EAP7 :

  • Vous utilisez déjà EAP 6.4. La migration vers EAP 7 se fera sans problème. L'utilisation de Docker ne serait qu'un style différent de conditionnement de vos applications. Toutes les fonctions existantes de surveillance, de clustering et de journalisation continueront à fonctionner. Si vous optez pour Tomcat, vous devrez apprendre la méthode Spring. Si vous disposez de temps et de ressources et que vous êtes prêt à expérimenter, vous pouvez également opter pour cette solution. Mais réfléchissez à ce que vous voulez en retirer.
  • EAP 7 est optimisé pour les déploiements de conteneurs et de nuages. En particulier, il est disponible en tant que service avec OpenShift et vous savez donc qu'il fonctionne OOTB.
  • L'EAP 7 apportera une amélioration décente des performances en termes de latence et de débit par rapport à l'EAP 6.4. Lire la suite https://access.redhat.com/articles/2607521 pour plus de détails.

Vous pouvez également envisager TomEE . Ils fournissent une pile Java EE intégrée à Tomcat.

Une autre option, comme @Federico l'a recommandé, consiste à utiliser L'essaim WildFly . Vous pouvez alors commencer à personnaliser les éléments de la plate-forme Java EE qui vous intéressent. Et votre modèle de déploiement utilise un fichier JAR.

Pour ce qui est de l'empaquetage à l'aide de Docker, ils fournissent tous une image de base et vous devez y intégrer votre application. Voici quelques considérations importantes concernant l'utilisation d'une image Docker pour les microservices :

  • Taille de l'image Docker : Un conteneur peut mourir de manière inattendue ou le cadre d'orchestration peut décider de le replanifier sur un hôte différent. Une image plus grande prendra d'autant plus de temps à télécharger. Cela signifie que le temps de démarrage perçu du service sera plus important pour une image plus grande. Cela signifie également que la mise à l'échelle dynamique de l'application prendra plus de temps pour être efficace.
  • Heure de démarrage de l'image : Après le téléchargement de l'image, le conteneur peut démarrer rapidement, mais combien de temps faut-il pour que l'application soit "prête" ?

A titre personnel, je suis beaucoup plus familier avec la pile Java EE qu'avec Tomcat/Spring, et WildFly continue d'être mon serveur d'application préféré.

3voto

Outre l'utilisation de serveurs d'application traditionnels, qui ne sont pas vraiment très lourds, vous pouvez goûter à une autre saveur de Java EE, appelée microconteneurs.

Java EE n'est qu'un ensemble de normes. Une norme se traduit par une spécification d'API, que chacun est ensuite libre de mettre en œuvre. Un serveur d'application (AS) est principalement une collection affinée de cette fonctionnalité. Ces API n'ont pas été créées sans raison. Elles représentent des fonctionnalités couramment utilisées dans les projets. Le serveur d'application peut être considéré comme un ensemble de ces fonctionnalités. Cette approche présente de nombreux avantages - AS a de nombreux utilisateurs, il est donc bien testé au fil du temps. Le câblage des fonctionnalités par vos propres moyens peut entraîner des bogues.

Quoi qu'il en soit, une nouvelle ère est arrivée, où avec Docker, l'application emporte ses dépendances avec elle. Dans de nombreux cas, il n'est plus nécessaire d'avoir un serveur d'application complet avec toutes les fonctionnalités prêtes à être servies aux applications. Par le passé, le serveur d'application ne savait pas exactement de quels services les applications déployées auraient besoin. Par conséquent, tout était intégré. Parmi les services les plus innovants, on peut citer Vol à l'air libre n'a instancié que les services nécessaires. Il existe également des profils Java EE qui facilitent quelque peu la tâche du serveur d'application monolithique.

Actuellement, nous livrons généralement l'application avec ses dépendances (JDK, bibliothèques, AS) à l'intérieur d'un Docker - ou nous nous y dirigeons. Par conséquent, un effort pour regrouper exactement la bonne quantité de est un choix logique. Mais, et c'est un "grand mais", le besoin de fonctionnalité de l'AS est toujours d'actualité. C'est toujours une bonne idée de développer une fonctionnalité commune basée sur des normes et des efforts communs. Seulement, il ne semble plus possible de les distribuer sous la forme d'un gros paquet, en laissant potentiellement la plupart des API inactives. Cet effort porte de nombreux noms, qu'il s'agisse de microconteneurs, de créateurs d'uberjar ...

Il existe des serveurs Java EE si légers qu'il est difficile d'utiliser autre chose. * Spring Boot n'est pas basé sur Java EE et dans la configuration par défaut présente dans le guide de démarrage, Tomcat est utilisé en interne.

L'essentiel est que votre application Java EE soit développée comme une application Java EE indépendante. Ces micro-solutions sont chargées de l'envelopper d'une fonctionnalité "juste suffisante". C'est, du moins à mon humble avis, la bonne façon de procéder. De cette manière, vous conserverez la compatibilité avec les AS complets et les micro-solutions. L'uber-jar, qui contient toutes les dépendances, peut être créé pendant ou après le processus de construction.

WildFly Swarm ou Payara Micro sont capables de "scanner" l'application, en n'exécutant que les services nécessaires. Pour une application réelle, l'empreinte mémoire en production peut être aussi faible que 100 Mo - pour une application réelle. C'est probablement ce que vous souhaitez. Spring Boot peut faire des choses similaires, si vous avez besoin de Spring. Cependant, d'après mon expérience, Spring Boot est beaucoup plus lourd et gourmand en mémoire que le Java EE moderne, car il contient évidemment Spring, donc si vous êtes un utilisateur de Java EE, vous ne pouvez pas vous en passer. recherche de légèreté en termes de consommation de mémoire, essayez Java EE, en particulier WildFly Swarm (ou WildFly pur) et Payara Micro. Ce sont mes AS préférés et ils peuvent être très, très petits. Je dirais que WildFly Swarm est beaucoup plus facile à démarrer, Payara Micro nécessite plus de lecture, mais offre des fonctionnalités intéressantes. Les deux peuvent fonctionner comme un wrapper - vous pouvez simplement envelopper votre projet actuel avec eux après la phase de construction, pas besoin de changer quoi que ce soit.

Payara Micro even fournit des images Docker prêt à l'emploi ! Comme vous pouvez le voir, Java EE est mature et prêt à entrer dans les terres de Docker :)

L'une des ressources les plus fiables et les plus intéressantes est celle d'Adam Bien. Vidéo sur les micro/nanoservices Java EE . Jetez un coup d'œil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X