Это хорошая идея использовать источник событий для распределенных транзакций? - PullRequest
0 голосов
/ 16 января 2019

У меня есть 2 кластера сервисов с отслеживанием состояния: монго и кластеры эластичного поиска. Я хочу синхронизировать документы для обоих кластеров.

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

Я решил использовать https://eventstore.org для хранения событий и подписаться на мой бэкэнд для внесения изменений, а затем обновить свои кластеры с состоянием.

Мой бэкэнд не имеет состояния, и в конечном итоге он будет масштабирован до нескольких экземпляров, , и я боюсь, что каждый бэкэнд будет получать обновления из хранилища событий и обновлять кластеры с состоянием, поскольку обновления могут быть идемпотентными , поэтому я закончу с N одинаковых документов на каждую запись. Как обычно решается эта проблема?

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

1 Ответ

0 голосов
/ 16 января 2019

Как обычно решается эта проблема?

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

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

Это может быть легко смягчено, потому что эта одноэлементная служба не имеет состояния, поэтому ее можно легко перезапустить или даже переместить на другой хост в случае сбоя. Если вы используете контейнерный оркестратор (например, Docker Swarm или Kubernetes), это очень просто.

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