вопрос, он больше абстрактный, архитектурный, но возник как результат. А как организовать общение между микросервисами? Проблема в гарантиях. Когда akka давал cqrs "из коробки", вопросов не было. А тут чистое поле. Предположим, записал результат вычислений в бд, а как гарантированно (без потерь) сообщить об этом "наружу"?
Конкретно в zio можно использовать zio-flow для организации таких гарантированных взаимодействий: https://zio.dev/zio-flow/ Но насколько он продакшн-реди — сложно сказать
Вы акку какую библиотеку подразумеваете? Стримы? А то просто акка это актеры и там нет цкрс
Persistence + projections
Вам нужна оркестрация микросервисов? Тогда возможно подойдет уже упомянутый https://zio.dev/zio-flow/ либо https://github.com/vitaliihonta/zio-temporal Еще вариант сами сервисы могут быть на Scala, а их оркестрация на другом стеке. Или вообще подумать может быть стоит отказаться от оркестрации и сделать общение между сервисами напрямую (хореография) и через PubSub (уже упомянутая кафка).
Нет. Вопрос не про оркестрацию. Вопрос про данные, которые гарантированно должны уйти из микросервиса. Выше был ответ, вариант решения понятен.
Интересное решение получили в akka. На базе persistence + projection сделали так, что и Kafka по сути не нужна. Pubsub между микросервисами.
а как это работает? во я севрис А хчу запаблишить в топик X и сервисы Б и В и Г хотят подписаться на X что в сценарии с аккой будет происходить?
Это работает в режиме "подписки". Сервис А никуда ничего не хочет отправлять. Сервис Б хочет получать. Поэтому Б подписывается и получает поток сообщений. При этом остаётся только менеджмент смещения. Могу ошибаться (не успел попользоваться), но потоку Б надо только сохранять offset до которого он сообщения обработал. А так как в А есть вся история сообщений, то он может отправлять каждому спросившему сообщения с нужного offset
а персистенс был поверх постгреса?
По идее любой. Все время продвигали Cassandra а сейчас упор на postgres
понятно если проводить сравнение с кафкой (чтобы понять нужна она или нет) то это как будто встроенная в приложение кафка (нагрузка на брокер не отделима от приложения), поверх персистенса а не диска (производительность и масштабируемость на определенных нагрузках падает в ноль, аффектит персистенс производительность), менелжмент офсетов на клиенте надо писать самому но вам рили кафка как кафка и не нужна была, если по производительностям все устраивает
Не совсем. Встроенная кафка : да. Персистенс в akka шардируется по нодам сколько хочешь. В случае с Cassandra тоже имеем шардинг. Клиенты, если они на akka, имеют из коробки все что нужно для таких подписок и поддержки offset
я там переписал, потому что слова персистенс использовал в значении БД (постгрес или касандра)
Понятно. Про разное говорили. Я в терминах akka. Persistence это некоторый слой который не только пишет в базу, но и поток сообщений формирует (pubsub + poll)
Обсуждают сегодня