Допустим, у меня есть 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 и передается имя класса, которое обычно используется для запуска микросервиса. Я думаю, что это может быть игнорирование свойств автоматической конфигурации.
Любая помощь будет принята с благодарностью!