Для нового проекта я хочу использовать Event Sourcing и CQRS. Итак, я хочу сохранить все изменения состояния приложения как последовательность событий. Кроме того, любой из моих сервисов должен иметь возможность подписаться на поток событий, генерируемый другими сервисами.
Это мои требования:
- Только продукты в качестве услуги, без установки Кафка или другое программное обеспечение.
- Сохранение порядка событий от потребителя. * (см. пример ниже)
- Поддержка нескольких производителей событий и нескольких потребителей событий. * (см. пример ниже)
- Новые события должны отправляться потребителям, подписавшимся на топи c.
- Хранение событий необходимо только до тех пор, пока все потребители не обработают событие, потому что потребители могут персистировать и агрегировать события.
Эти требования очень удобны:
Должно масштабироваться линейно. Должно масштабироваться автоматически. Время доставки должно составлять <100 мс 99% времени, если производитель и потребитель находятся в одном регионе. </li> Следует хранить данные о событиях в двоичном виде без необходимости преобразования в / из Base64. Должно быть с оплатой по мере поступления - go с начальными затратами при разработке ниже 20 евро в месяц.
* Пример для порядка событий с несколькими производителями и потребителями: Пример с двумя производителями и двумя потребителями. Первый производитель публикует события A, B, C, второй публикует события 1, 2, 3. Тогда первый и второй потребители могут оба получать A, B, C, 1, 2, 3 или A, 1, 2 , B, C, 3, но не A, C, B, 1, 2, 3. Кроме того, все потребители должны получать одинаковый порядок всех событий.
Я обнаружил, что Amazon Kinesis Data Потоки будут соответствовать моим требованиям, но я удивлен, что не смог найти сопоставимого решения из Google Cloud или Azure.