Порада щодо розгортання військових файлів проти виконуваного jar із вбудованим контейнером


89

У Java-просторі існує сучасна тенденція відходити від розгортання веб-додатків Java у контейнері Java-сервлетів (або сервері додатків) у формі файлу війни (або вушного файлу) і замість цього пакувати програму як виконувану банку з вбудований сервлет / HTTP-сервер, як причал. І я маю на увазі це тим більше у тому, як новіші фреймворки впливають на те, як розробляються та розгортаються нові програми, а не на те, як програми доставляються кінцевим споживачам (адже, наприклад, я зрозумів, чому Дженкінс використовує вбудований контейнер, дуже легко захопити та перейти ). Приклади фреймворків, що приймають виконуваний параметр jar: Dropwizard , Spring Boot і Play (ну, він не працює на контейнері сервлетів, але HTTP-сервер вбудований).

Моє питання полягає в тому, що ми надходимо із середовища, де ми розгорнули наші (до цього моменту переважно Struts2) додатки на одному сервері додатків tomcat, які зміни, найкращі практики чи міркування потрібно зробити, якщо ми плануємо використовувати вбудований підхід до контейнерів ? В даний час у нас близько 10 доморощених додатків, що працюють на одному сервері tomcat, і для цих невеликих додатків приємна можливість спільного використання ресурсів та управління ними на одному сервері. Наші програми не призначені для розповсюдження серед кінцевих користувачів для запуску в їх середовищі. Однак, рухаючись вперед, якщо ми вирішимо використати новішу структуру Java, чи повинен цей підхід змінитися? Чи сприяє перехід до виконуваних банок все більшим використанням хмарних розгортань (наприклад, Heroku)?

Якщо у вас був досвід управління кількома програмами в стилі розгортання Play у порівнянні з традиційним розгортанням файлів війни на одному сервері додатків, поділіться своєю думкою.

Відповіді:


81

Цікаве питання. Це лише мій погляд на тему, тож сприйміть все з достатком солі. Я іноді розгортав і керував програмами, використовуючи як контейнери сервлетів, так і вбудовані сервери. Я впевнений, що є ще багато вагомих причин для використання контейнерів сервлетів, але я спробую зосередитись лише на тому, чому вони сьогодні менш популярні.

Коротка версія: Контейнери сервлетів чудово підходять для управління кількома програмами на одному хості, але не здаються дуже корисними для управління лише однією окремою програмою. У хмарних середовищах одне додаток на віртуальну машину здається кращим і більш поширеним. Сучасні фреймворки хочуть бути сумісними з хмарами, тому перехід до вбудованих серверів.


Тому я думаю, що хмарні сервіси є основною причиною відмови від контейнерів сервлетів. Подібно до того, як контейнери сервлетів дозволяють керувати програмами, хмарні служби дозволяють керувати віртуальними машинами, екземплярами, сховищем даних та багато іншого. Це звучить складніше, але в хмарних середовищах відбувся перехід до машин з одним додатком. Це означає , що ви можете часто розглядати всю машину , як це додаток. Кожна програма працює на машині відповідного розміру. Екземпляри хмар можуть з’являтися та зникати в будь-який час, що чудово підходить для масштабування. Якщо додатку потрібно більше ресурсів, ви створюєте більше примірників.

Виділені сервери, з іншого боку, зазвичай потужні, але з фіксованим розміром, тому ви запускаєте кілька програм на одній машині, щоб максимізувати використання ресурсів. Управління десятками додатків - кожен зі своїми конфігураціями, веб-серверами, маршрутами та підключеннями тощо - не є цікавим, тому використання контейнера сервлетів допомагає вам тримати все в керованості та бути здоровим. Це важче масштабувати. Контейнери для сервлетів у хмарі здаються не надто корисними. Їх потрібно було б налаштувати для кожного крихітного екземпляра, не надаючи великої цінності, оскільки вони управляють лише однією програмою.

Крім того, хмари - це круто, а нехмарні речі нудні (якщо ми все ще віримо в ажіотаж). Багато фреймворків намагаються бути масштабованими за замовчуванням, щоб їх можна було легко розгорнути в хмарах. Вбудовані сервери швидко розгортаються та працюють, тому вони здаються розумним рішенням. Зазвичай контейнери сервлетів все ще підтримуються, але вимагають більш складної настройки.

Деякі інші моменти:

  • Вбудований сервер можна оптимізувати для фреймворку або краще інтегрувати з інструментарієм фреймворків (як, наприклад, ігрова консоль).
  • Не всі хмарні середовища мають настроювані зображення машини. Замість того, щоб писати сценарії ініціалізації для завантаження та налаштування контейнерів сервлетів, використання спеціального програмного забезпечення для розгортання хмарних додатків набагато простіше.
  • Я ще не знайшов налаштування Tomcat, яке не вітає вас із помилкою простору в кожному періоді кожні кілька передислокацій вашого додатка. Зайняти трохи більше часу, щоб (повторно) запустити вбудовані сервери, не є проблемою, коли ви можете майже миттєво переключатися між інсталяційними та робочими інстанціями без будь-яких простоїв.
  • Як уже зазначалося у питанні, для кінцевого користувача дуже зручно просто запускати програму.
  • Вбудовані сервери є портативними та зручними для розробки. Сьогодні все швидко , прототипи та MVP потрібно створювати та доставляти якомога швидше. Ніхто не хоче витрачати занадто багато часу на створення середовища для кожного розробника.

1
Дякуємо за відповідь, ви зробили кілька хороших зауважень. Хмара - рушійний фактор! У нашій ситуації мені було б комфортніше володіти хмарним сервером за моделлю Amazon Web Services (Інфраструктура як послуга), на відміну від розгортання лише програми а-ля Google App Engine (Платформа як послуга), але, я гадаю, це стара школа думок. Тож висновок: якщо ми не плануємо використовувати хмару на платформі як сервісний спосіб, розгортання війни - це шлях, а не управління кількома окремими веб-програмами Java на одному сервері. Ще раз спасибі за ваш внесок.
Brice Roncace

3
Лише 2cc: ви можете запускати декілька jar-додатків на одній машині з яким-небудь легким HTTP-сервером як проксі-сервером, тобто: nginx, його можна додатково використовувати для типового веб-трафіку, такого як користувацький CDN, балансування навантаження, брандмауер тощо. Тому доцільно розглянути використовувати його при плануванні великого трафіку (він має кращу продуктивність, а потім обробляє кожен окремий запит - навіть для статичних ресурсів через ваш основний додаток).
biesior
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.