Size: a a a

Scala User Group

2020 March 25

A

Alexey in Scala User Group
Vladimir Sam
если в процессе обработки и записи нового стейта стало ясно, что ктото записал конкурентно, пытаемся выполнить команду заново
сейчас так. обработка некоторых команд неидемпотентая, так что есть гемор с тем чтобы такие вещи как-то разруливать. иногда это совсем не просто и не очевидно.

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

VS

Vladimir Sam in Scala User Group
трюк в том, чтобы не выполнять какие-то сайдэффекты "вне" сущности если команда не удалась

т.е. если результат успешный - пошли эффекты
если результат неуспешный - повтор команды
источник

VS

Vladimir Sam in Scala User Group
от того, что команды выстраиваются в очередь в кафке, базе или очереди актора принцип не меняется
источник

Y

Yevhen in Scala User Group
Юрий Бадальянц
Делай на кафке без акки
кафка ведь не решает все те проблемы что делает акка, ето обычная очередь
источник

λ

λoλdog in Scala User Group
а какие проблемы решает акка?
источник

Y

Yevhen in Scala User Group
с аккой как минимум можно выбросить зукипер
источник

λ

λoλdog in Scala User Group
что?
источник

λ

λoλdog in Scala User Group
а причем тут зукипер?
источник

ЮБ

Юрий Бадальянц in Scala User Group
Yevhen
кафка ведь не решает все те проблемы что делает акка, ето обычная очередь
На базе Кафки можно решить проблему, я только об этом. Она даёт нужные гарантии. Да, надо пописать код руками. Таков путь.
источник

GP

Grigory Pomadchin in Scala User Group
λoλdog
а причем тут зукипер?
¯\_(ツ)_/¯ ну знаешь эти кафки зукиперы
источник

ЮБ

Юрий Бадальянц in Scala User Group
Локи на базе тоже решение, чёуж. Правда под нагрузкой далеко не уедешь - плохо масштабируется. Но на практике есть куча задач, где постгри хватит за глаза.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
да
источник

Oℕ

Oleg ℕizhnik in Scala User Group
лучше всего использовать микросервисную архитектуру, запускать 10 сервисов, по 10 нод каждый, каждый по 10 тредов, но разрешать одновременно выполняться только одной операции на одной машине из одного треда
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ditstributed GIL
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а пока всё это работает можно заняться оптимизицией аллокаций
источник

Y

Yevhen in Scala User Group
λoλdog
а причем тут зукипер?
ты просто актера поднимешь вместо зукипера
источник

ЮБ

Юрий Бадальянц in Scala User Group
Олег, ну если там нагрузки мало, и лок происходит редко, то почему бы и нет? Если уже есть пг, например. Конечно, я бы лучше на кафке сделал, и скорее всего это даже проще бы вышло, но вариант с базой тоже рабочий
источник

ЮБ

Юрий Бадальянц in Scala User Group
"прагматичный"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Если нагрузки мало и лок происходит редко можно использовать оптимистичную блокировку
источник

ЮБ

Юрий Бадальянц in Scala User Group
Ну так об этом и речь
источник