Лагом: возможно ли разделить экземпляры сервисов по нескольким кластерам? - PullRequest
2 голосов
/ 03 июня 2019

Допустим, у меня есть Hello-Service. В Lagom эта служба может работать на нескольких узлах одного кластера.

Таким образом, в кластере 1 мы можем иметь несколько «копий» Hello-Service:

Cluster1: Hello-Service-1, Hello-Service-2, Hello-Service-3

Но возможно ли запустить службу Hello-Service в нескольких кластерах?

Как это:

Cluster1: Hello-Service-1, Hello-Service-2, Hello-Service-3,
Cluster2: Hello-Service-4, Hello-Service-5, Hello-Service-6

Чего я хочу добиться, так это лучшей масштабируемости процессоров на стороне чтения и потребителей событий:

В Лагоме нам нужно заранее указать количество фрагментов данного тега события в кластере.

Так что мне интересно, могу ли я просто добавить еще один кластер, чтобы распределить нагрузку между ними.

И, конечно, я бы хотел огородить постоянные сущности каким-нибудь ключом.

(Допустим, я создаю мультитенантное приложение, я бы разделял сущности по идентификатору организации, чтобы все сущности некоторого набора организаций переходили в кластер 1, а сущности другого набора организаций переходили в кластер 2, поэтому для каждого кластера можно использовать процессоры на стороне чтения, которые обрабатывают только подмножество событий / объектов в кластере (для лучшей масштабируемости)).

При использовании подхода с одним кластером по мере роста системы сегментированный процессор в одном кластере может становиться все медленнее и медленнее, поскольку ему необходимо обрабатывать все больше и больше событий.

Так что по мере роста системы я бы просто добавил новый кластер (скажем, Cluster 2, а затем Cluster 3, который будет обрабатывать свое собственное подмножество событий / сущностей)

1 Ответ

1 голос
/ 03 июня 2019

Если вы используете сегментированные стороны чтения, Lagom распределяет обработку сегментов по всем узлам кластера.Итак, если у вас есть 10 сегментов и 6 узлов в 1 кластере, то каждый узел будет обрабатывать от 1-2 сегментов.Если вы попытаетесь развернуть два кластера, по 3 узла в каждом, то в конечном итоге каждый узел обработает 3-4 сегмента, но каждое событие будет обработано дважды, по одному разу в каждом кластере.Это не помогает масштабируемости, это делает вдвое больше работы, чем нужно сделать.Поэтому я не понимаю, зачем вам два кластера, просто один кластер, и Lagom будет равномерно распределять осколки по нему.

Если вы не используете сегментированные стороны чтения, то это не имеет значениясколько узлов у вас в кластере, все события будут обрабатываться одним узлом.Если вы развернете второй кластер, он не будет распределять нагрузку, он также будет обрабатывать те же события, поэтому вы получите двойную обработку каждого события каждым кластером, а это не то, что вам нужно.

Так что, просто используйте сторонние данные для чтения и позвольте Lagom распределить работу по вашему кластеру для вас, вот для чего он предназначен.

...