оркестровка воспроизведения событий в Куберне - PullRequest
0 голосов
/ 20 марта 2019

У меня есть архитектура CQRS на основе событий, размещенная в kubernetes. У меня есть один писатель («служба денормализатора»), который слушает события и записывает денормализованные представления в хранилище данных. Эти представления затем обслуживаются отдельной службой просмотра. Когда образ денормализатора обновляется посредством развертывания с новыми проекциями, он воспроизводит все события с самого начала и записывает новые представления в другое хранилище данных.

Итак, мне нужно 2 экземпляра денормализатора, один со старым кодом, а другой - для воспроизведения событий через новый код. Когда новый код завершит воспроизведение, мне нужно: 1) подать сигнал в службу просмотра, чтобы переключиться на новое записанное хранилище данных, а затем, 2) сломать старое развертывание денормализатора, так как оно больше не требуется.

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

Есть идеи, как мне сделать что-то подобное?

1 Ответ

0 голосов
/ 07 мая 2019

Я не знаю специфики вашей системы, но мне приходят на ум два решения.

Использование readinessProbe

Вы можете определить readinessProbe для вашего писателяоказание услуг.Сообщите, что служба готова, когда перезапись завершена.Затем обновляемый модуль обновления будет знать, когда завершить работу старой версии устройства записи и начать передавать трафик новой.Единственное, что вам нужно сделать больше, это уведомить зрителя о переключении на новый источник данных.Это может быть сделано автором, вызывающим некоторый API-интерфейс службы просмотра.

Использование отдельного процесса

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

...