Conseils de déploiement de fichiers de guerre vs exécutable jar avec conteneur intégré

Il semble y avoir une tendance actuelle dans l’espace java à abandonner le déploiement d’applications Web java vers un conteneur de servlet java (ou un serveur d’application) sous la forme d’un fichier war (ou fichier un serveur Servlet / HTTP intégré comme jetty. Et je le dis d’autant plus dans la manière dont les nouveaux frameworks influencent la manière dont les nouvelles applications sont développées et déployées plutôt que la manière dont les applications sont livrées aux utilisateurs finaux (parce que Jenkins utilise par exemple un conteneur intégré très facile à saisir et à utiliser) ). Exemples de frameworks adoptant l’option jar exécutable: Dropwizard , Spring Boot et Play (eh bien, il ne s’exécute pas sur un conteneur de servlets mais le serveur HTTP est intégré).

Ma question est la suivante: à partir d’un environnement dans lequel nous avons déployé (jusqu’à présent principalement des applications Struts2) sur un seul serveur d’application tomcat, quelles modifications, meilleures pratiques ou considérations doivent être sockets si nous envisageons une approche de conteneur intégrée? ? Actuellement, nous avons environ 10 applications maison exécutées sur un seul serveur Tomcat et, pour ces petites applications, la possibilité de partager des ressources et d’être gérée sur un serveur est une bonne chose. Nos applications ne sont pas destinées à être dissortingbuées aux utilisateurs finaux pour fonctionner dans leur environnement. Cependant, si nous décidons de tirer parti d’un nouveau framework Java, cette approche devrait-elle changer? Le passage à des jars exécutables est-il stimulé par l’utilisation croissante des déploiements de cloud (par exemple, Heroku)?

Si vous avez déjà expérimenté la gestion de plusieurs applications dans le style de déploiement Play par rapport au déploiement de fichiers de guerre traditionnels sur un seul serveur d’application, veuillez nous en faire part.

Une question intéressante Ceci est juste mon sharepoint vue sur le sujet, alors prenez tout avec un grain de sel. J’ai occasionnellement déployé et géré des applications utilisant à la fois des conteneurs de servlets et des serveurs intégrés. Je suis sûr qu’il y a encore beaucoup de bonnes raisons d’utiliser des conteneurs de servlets, mais je vais essayer de comprendre pourquoi ils sont moins populaires aujourd’hui.

Version courte: Les conteneurs de servlets sont parfaits pour gérer plusieurs applications sur un seul hôte mais ne semblent pas très utiles pour gérer une seule application. Dans les environnements de cloud, une application unique par machine virtuelle semble préférable et plus courante. Les frameworks modernes veulent être compatibles avec le cloud, donc le passage à des serveurs intégrés.


Je pense donc que les services de cloud computing sont la principale raison de l’abandon des conteneurs de servlets. Tout comme les conteneurs de servlets vous permettent de gérer les applications, les services cloud vous permettent de gérer des machines virtuelles, des instances, du stockage de données et bien plus encore. Cela semble plus compliqué, mais avec les environnements de cloud, il y a eu un changement vers des machines à application unique. Cela signifie que vous pouvez souvent traiter la machine entière comme si c’était l’ application. Chaque application s’exécute sur une machine de taille appropriée. Les instances de cloud peuvent apparaître et disparaître à tout moment, ce qui est idéal pour la mise à l’échelle. Si une application a besoin de plus de ressources, vous créez davantage d’instances.

En revanche, les serveurs dédiés sont généralement puissants mais de taille fixe. Vous pouvez donc exécuter plusieurs applications sur une seule machine afin d’optimiser l’utilisation des ressources. La gestion de dizaines d’applications – chacune avec ses propres configurations, serveurs Web, routes et connexions, etc. – n’est pas amusante. L’utilisation d’un conteneur de servlets vous permet de tout gérer et d’être sain d’esprit. C’est plus difficile à faire. Les conteneurs de servlets dans le cloud ne semblent pas très utiles. Ils devraient être configurés pour chaque petite instance, sans apporter beaucoup de valeur car ils ne gèrent qu’une seule application.

De plus, les nuages ​​sont cool et les choses autres que le cloud sont ennuyeuses (si l’on en croit encore le battage médiatique). De nombreux frameworks essaient d’être évolutifs par défaut, afin qu’ils puissent être facilement déployés sur les clouds. Les serveurs intégrés sont rapides à déployer et à exécuter, ils semblent donc être une solution raisonnable. Les conteneurs de servlets sont généralement toujours pris en charge mais nécessitent une configuration plus compliquée.

Quelques autres points:

  • Le serveur embarqué pourrait être optimisé pour le framework ou mieux intégré aux outils de frameworks (comme la console de lecture par exemple).
  • Tous les environnements cloud ne sont pas fournis avec des images personnalisables. Au lieu d’écrire des scripts d’initialisation pour télécharger et configurer des conteneurs de servlets, l’utilisation de logiciels dédiés pour les déploiements d’applications cloud est beaucoup plus simple.
  • Je n’ai pas encore trouvé de configuration Tomcat qui ne vous accueille pas avec une erreur d’espace de génération toutes les quelques redéploiements de votre application. Prendre un peu plus de temps pour (re) démarrer des serveurs intégrés ne pose aucun problème lorsque vous pouvez basculer presque instantanément entre les instances de transfert et de production sans aucune interruption.
  • Comme déjà mentionné dans la question, il est très pratique pour l’utilisateur final d’exécuter l’application.
  • Les serveurs embarqués sont portables et pratiques pour le développement. Aujourd’hui, tout est rapide , les prototypes et les MVP doivent être créés et livrés le plus rapidement possible. Personne ne veut passer trop de temps à mettre en place un environnement pour chaque développeur.