Как запустить одну JVM с несколькими приложениями с весенней загрузкой? - PullRequest
0 голосов
/ 06 марта 2020

Допустим, у меня есть 25 микро-сервисов с пружинной загрузкой, каждая из которых начинается с 1 ГБ JVM в производстве. В любой момент времени не все используются, и не бывает случаев, когда они используют всю 25 ГБ памяти одновременно. На самом деле многие из них будут бездействовать 90% времени, но любой из них может в какой-то момент позвонить и потребовать до 1 ГБ памяти.

В моей среде разработки я хотел бы запустить их все сразу но только 8 ГБ памяти. Мне не нужна высокая производительность, но мне нужно, чтобы все они работали одновременно, чтобы все приложение работало. Я хотел бы попытаться запустить все приложения в одной JVM с выделенной памятью 6 ГБ. Этого должно быть достаточно в любой момент времени.

Похоже, это будет распространенной проблемой, поскольку многие компании переходят на облачные / микросервисы. 10 лет go у нас будет одно монолитное c приложение с одной JVM (легко запустить в среде разработчиков). Теперь у нас есть десятки небольших приложений, которым может не потребоваться тонна памяти, но каждое из них запускается в своей собственной JVM, поэтому у каждого из них есть много накладных расходов. Это на самом деле делает разработку более сложной, чем упрощающей. Поэтому я пытаюсь найти решение для наших разработчиков, где они могут запустить все, но не убить память на своих машинах.

  • Приложения с весенней загрузкой должны запускаться без изменений, за исключением, возможно, локальных профилей. В противном случае разработчикам придется вносить тонны изменений каждый раз, когда они извлекают код из git
  • . Каждый проект должен иметь возможность настроить другой порт (параметр application-local.properties) для tomcat.
  • Каждый проект нуждается в своих собственных записях пути к классам (например, один может использовать версию jar версии 1.0, а другой может использовать версию 2.0, и без разделения отдельных путей к классам один или другой сломается)

Я пытался подписаться на этот пост , но это не на 100% то, что я хочу. Я чувствую, что правильное решение должно уважать файл application.properties / application-local.properties и использовать порт, установленный внутри проекта, вместо того, чтобы жестко кодировать любую конфигурацию вне проекта. По сути, его пост запускает отдельный поток для каждого микросервиса и прикрепляет отдельный загрузчик классов к каждому потоку. Затем вызывается SpringApplication.run и передается имя класса, которое обычно используется для запуска микросервиса. Я думаю, что это может быть игнорирование свойств автоматической конфигурации.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 06 марта 2020

Вы можете управлять тем, сколько ресурсов потребляют ваши приложения с помощью docker. Одно приложение весенней загрузки должно быть одно docker container. Во время выполнения вы можете изменить объем ресурсов (в вашем случае памяти), используемых контейнером. Взгляните на эту статью о том, как во время выполнения изменить распределение ресурсов в docker. Также с помощью kubernetes можно определить минимальные и максимальные ресурсы, необходимые для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...