Каков канонический способ развертывания микросервисов Scala/Akka?

Мы собираемся завершить десятки этих микросервисов (большинство из них основаны на Akka), и я не уверен, как лучше всего управлять их развертыванием. В частности, они построены независимо друг от друга и как можно более специализированные и распределенные.

Мой вопрос связан с тем, что все они слишком малы для своих индивидуальных JVM; даже если бы мы разместили их на экземплярах AWS nano, мы все равно закончим с 40 машинами, если вы восполняете избыточность, и такое большое количество просто не нужно. Три экземпляра среднего размера могут (и делать) легко обрабатывать всю рабочую нагрузку.

В настоящее время я просто группирую их в "контейнерные" приложения, несколько случайным образом, а затем запускаю эти контейнерные приложения на больших JVM.

Однако должен быть лучший способ. Я не знаю о каких-либо серверах приложений для Akka, где вы можете просто "развернуть актеров", поэтому я хотел получить представление о том, как другие запускают микросервисы Akka на производстве (и конкретно, как управлять развертыванием).

Это, вероятно, не ограничивается Scala и Akka, но большинство других платформ имеют выделенные серверы приложений, где вы развертываете эти вещи.

Ответ 1

IMHO, канонический способ - использовать инструмент инструментальной поддержки сервисов, который действительно запускает их в отдельных процессах, каждый со своей собственной JVM. Это единственный способ получить развязку, изоляцию, устойчивость, которую вы хотите с помощью микросервисов, только таким образом вы сможете развернуть, обновить, остановить, запустить их индивидуально.

Вы говорите:

Мой вопрос связан с тем, что все они слишком малы для их собственные индивидуальные JVM; даже если бы мы размещали их на AWS nano экземпляры

Кажется, вы рассматриваете виртуальные машины JVM и Amazon как эквивалентные, но это не так. Вы можете иметь несколько процессов JVM на одной виртуальной машине.

Я предлагаю вам взглянуть на инструменты организации, такие как Lightbend Production Suite/Сервисная оркестровка или Kubernetes

Это просто примеры, есть и другие. Обратите внимание, что эта категория инструментов даст вам множество функций, которые вам рано или поздно понадобятся, например, простое масштабирование, консолидация журналов, поиск служб, проверка работоспособности/отказ службы и т.д.