2016-11-25 2 views
10

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

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

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

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

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

+0

Взгляните на Akka Clustering and Маршрутизация. Маршрутизаторы могут развернуть несколько Routees на основе конфигурации, и кластер предоставит вам множество узлов для ваших маршрутизаторов. Множество опций, описанных здесь: http://doc.akka.io/docs/akka/current/scala/cluster-usage.html –

ответ

2

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

Ты говоришь:

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

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

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

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

+0

Спасибо, лютц, за ваш очень ценный вклад. Я собираюсь изучить инструменты, о которых вы упомянули (я слышал о Кубернете раньше, но почему-то думал, что он предназначен больше для управления контейнерами Docker). Что касается запуска нескольких JVM на одной машине - да, я хорошо знаю, что это возможно, но я всегда считал это ненужным из-за накладных расходов на запуск полной JVM вокруг каждого микросервиса, когда они все могли работать внутри одного. Возможно, это несколько устаревшее мышление, поскольку современные JVM, как правило, соглашаются быть легкими. – Ruslan

+0

* «Только так вы сможете развернуть, обновить, остановить, запустить их индивидуально», это не так. вы можете иметь отдельные жизненные циклы компонентов в рамках одной JVM.Устойчивость - другое дело, но опять-таки взаимодействие между несколькими JVM на машине может быть нетривиальным, если вы переписываете системные ресурсы. – the8472