169 похожих чатов

Выглянул за пределы akka и глянул в сторону zio. Возник

вопрос, он больше абстрактный, архитектурный, но возник как результат. А как организовать общение между микросервисами? Проблема в гарантиях. Когда akka давал cqrs "из коробки", вопросов не было. А тут чистое поле. Предположим, записал результат вычислений в бд, а как гарантированно (без потерь) сообщить об этом "наружу"?

14 ответов

72 просмотра

Конкретно в zio можно использовать zio-flow для организации таких гарантированных взаимодействий: https://zio.dev/zio-flow/ Но насколько он продакшн-реди — сложно сказать

Вы акку какую библиотеку подразумеваете? Стримы? А то просто акка это актеры и там нет цкрс

Вам нужна оркестрация микросервисов? Тогда возможно подойдет уже упомянутый https://zio.dev/zio-flow/ либо https://github.com/vitaliihonta/zio-temporal Еще вариант сами сервисы могут быть на Scala, а их оркестрация на другом стеке. Или вообще подумать может быть стоит отказаться от оркестрации и сделать общение между сервисами напрямую (хореография) и через PubSub (уже упомянутая кафка).

Андрей-Ладний Автор вопроса
Ivan
Вам нужна оркестрация микросервисов? Тогда возможн...

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

Андрей-Ладний Автор вопроса
Ivan
Вам нужна оркестрация микросервисов? Тогда возможн...

Интересное решение получили в akka. На базе persistence + projection сделали так, что и Kafka по сути не нужна. Pubsub между микросервисами.

Андрей Ладний
Интересное решение получили в akka. На базе persis...

а как это работает? во я севрис А хчу запаблишить в топик X и сервисы Б и В и Г хотят подписаться на X что в сценарии с аккой будет происходить?

Андрей-Ладний Автор вопроса

Это работает в режиме "подписки". Сервис А никуда ничего не хочет отправлять. Сервис Б хочет получать. Поэтому Б подписывается и получает поток сообщений. При этом остаётся только менеджмент смещения. Могу ошибаться (не успел попользоваться), но потоку Б надо только сохранять offset до которого он сообщения обработал. А так как в А есть вся история сообщений, то он может отправлять каждому спросившему сообщения с нужного offset

Андрей-Ладний Автор вопроса
Artem Sokolov
а персистенс был поверх постгреса?

По идее любой. Все время продвигали Cassandra а сейчас упор на postgres

Андрей Ладний
Это работает в режиме "подписки". Сервис А никуда ...

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

Андрей-Ладний Автор вопроса
Artem Sokolov
понятно если проводить сравнение с кафкой (чтобы п...

Не совсем. Встроенная кафка : да. Персистенс в akka шардируется по нодам сколько хочешь. В случае с Cassandra тоже имеем шардинг. Клиенты, если они на akka, имеют из коробки все что нужно для таких подписок и поддержки offset

Андрей Ладний
Не совсем. Встроенная кафка : да. Персистенс в akk...

я там переписал, потому что слова персистенс использовал в значении БД (постгрес или касандра)

Андрей-Ладний Автор вопроса
Artem Sokolov
я там переписал, потому что слова персистенс испол...

Понятно. Про разное говорили. Я в терминах akka. Persistence это некоторый слой который не только пишет в базу, но и поток сообщений формирует (pubsub + poll)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта