Size: a a a

2020 May 28

f🤔

focusshifter 🤔 in ctodailychat
Ruslan
А как гуглить? По redpanda event store не нашёл
источник

f🤔

focusshifter 🤔 in ctodailychat
Oleg Batashov
Тоже жил на нем, но недолго.
Пытаюсь вспомнить что заставило жалеть и думать что надо было хранить JSON событий в PostgreSQL и не мудрить
Кажется, это было связано с разрастанием логов, вопросами бекапа/администрирования в целом
У проекта уже был PostgreSQL,  лишь один компонент с ES потащил за собой EventStore
Хороший админ SQL баз был в наличии, а комьюнити вокруг EventStore оставляло желать лучшего в плане быстро найти на SO ответ
Стартап не выстрелил, поэтому в эксплуатации EventStore провел месяцев 6 - вопросы пошли где-то на третьем месяце

Кто-нибудь сравнивал варианты "хранить JSON событий в SQL базе в столбце с JSON типом" vs "юзать базу заточенную под ES"?
Иными словами, что подтолкнуло брать EventStore?
С какими проблемами столкнулись, каких избежали?

Спасибо :)
мы на не очень большом объеме событийных данных сейчас тоже живем в pg
источник

f🤔

focusshifter 🤔 in ctodailychat
основная причина по которой не взяли кафку сразу - по пг есть ощутимая экспертиза в компании
источник

СА

Сергей Аксёнов... in ctodailychat
А пишите, пожалуйста, ваши объёмы? "Очень большой" - это сколько в сутки? У нас вот 9.5 миллиардов. Мне кажется, PG треснет. Храним в кластере Кликхауса.
источник

f🤔

focusshifter 🤔 in ctodailychat
Сергей Аксёнов
А пишите, пожалуйста, ваши объёмы? "Очень большой" - это сколько в сутки? У нас вот 9.5 миллиардов. Мне кажется, PG треснет. Храним в кластере Кликхауса.
эм. _не_ очень большой же

9.5 миллиардов просто событий или событий, реализующих полноценный ES?
источник

СА

Сергей Аксёнов... in ctodailychat
focusshifter 🤔
эм. _не_ очень большой же

9.5 миллиардов просто событий или событий, реализующих полноценный ES?
Пардон, не увидел. И нет, я про чисто аналитические события.
источник

f🤔

focusshifter 🤔 in ctodailychat
у нас порядок десятков миллионов, постгрес это в обе стороны крутит суперлегко без каких-то усилий
источник

OB

Oleg Batashov in ctodailychat
Спасибо, Игорь, выбор стал понятнее
Вот здесь неплохо описаны боли, ждущие с ES
https://chriskiehl.com/article/event-sourcing-is-hard
Что почувствовал на себе из того что вспомнил:
- нет готовой инфраструктуры - реплей стрима для воссоздания агрегата, десериализация событий - писать самому
- создание новой проекции - надо делать аудит лог, и проигрывать его в проекцию
- eventual consistency lag в consumer, если нужно что-то прочитать из проекции
- вследствие eventual consistency/CQRS на разных базах - события приходят не по очереди/с дубликатами
- транспорт потерял событие N, событие N+1 пришло - цепочка N, N+1 не собралась, проекция зависла в ожидании N - не заложил повторную отправку. Возможно причины были в работах по переезду на другой сервер, что-то очень неудачно наложилось - но потерянное сообщение факт
До каких болей не дошел, но они очевидны на горизонте больше года
- версионирование событий (апдейтеры)
- большое количество событий в стриме (снэпшоты)
- а что если мы спроектировали события неправильно?
источник

OB

Oleg Batashov in ctodailychat
Второй раз в ES бы ввязался, очень основательно подумав надо ли оно и потянет ли команда
Тогда пилил в одно лицо
источник

f🤔

focusshifter 🤔 in ctodailychat
Oleg Batashov
Спасибо, Игорь, выбор стал понятнее
Вот здесь неплохо описаны боли, ждущие с ES
https://chriskiehl.com/article/event-sourcing-is-hard
Что почувствовал на себе из того что вспомнил:
- нет готовой инфраструктуры - реплей стрима для воссоздания агрегата, десериализация событий - писать самому
- создание новой проекции - надо делать аудит лог, и проигрывать его в проекцию
- eventual consistency lag в consumer, если нужно что-то прочитать из проекции
- вследствие eventual consistency/CQRS на разных базах - события приходят не по очереди/с дубликатами
- транспорт потерял событие N, событие N+1 пришло - цепочка N, N+1 не собралась, проекция зависла в ожидании N - не заложил повторную отправку. Возможно причины были в работах по переезду на другой сервер, что-то очень неудачно наложилось - но потерянное сообщение факт
До каких болей не дошел, но они очевидны на горизонте больше года
- версионирование событий (апдейтеры)
- большое количество событий в стриме (снэпшоты)
- а что если мы спроектировали события неправильно?
про боли, решения:
- апкастинг эвентов как одна из стратегий версионирования
- снепшоты, да
- апкастинг с демультиплексированием
источник

f🤔

focusshifter 🤔 in ctodailychat
по последнему пункту - если доменная область была хоть немного проработана, то _совсем_ неправильно сделать не очень просто, а большая часть "тут неплохо бы несколько событий вместо одного" или наоборот "тут было достаточно одного, зачем-то сгребли в кучу" относительно ок решается преобразованиями при чтении
источник

f🤔

focusshifter 🤔 in ctodailychat
про "основательно подумать" и требования к команде абсолютно согласен, выбор несколько упрощается, когда реализовываешь что-то предельно событийное в своей природе (самый примитивный пример - бухгалтерские книги как литералли "ES на бумаге")
источник

OB

Oleg Batashov in ctodailychat
Спасибо! Бухгалтерия наверное один из любимых демо-примеров в объяснении ES в статьях
А с потерей событий, и созданием новых проекций - какие у вас решения?
Для первого очевидно - не терять, at least once delivery, восстановление в ручном порядке если что-то сильно пошло не так? В аудит логе событие было, до проекции не дошло.
Были ещё мысли о circuit breaker - но не понятно, каковы дальнейшие действия в автоматическом режиме, если потеряно одно из событий
источник

f🤔

focusshifter 🤔 in ctodailychat
с проекциям осознанно суперпримитивно, мы их обновляем синхронно

да, это не by the book (но на самом деле нет, жесткого требования нигде нет), но снимает огромный слой сложности в реализации и синхронизационных проблем
источник

f🤔

focusshifter 🤔 in ctodailychat
но конкретно в нашем случае это работает только потому что мы не ожидаем огромного множества событий для одного агрегата в очень небольшой промежуток времени
источник

f🤔

focusshifter 🤔 in ctodailychat
(в кредитных линиях самая нагруженная часть - обслуживание, и она нагруженная _в общем_, у конкретного же займа чудом может набраться сотня событий за сутки)
источник

IV

Igor V in ctodailychat
Ruslan
А как гуглить? По redpanda event store не нашёл
https://vectorized.io/ - redpanda замена кафке с 100% api compatibility
источник

OB

Oleg Batashov in ctodailychat
Я пришел к неплохой в общем-то альтернативе там где полноценный ES не нужен
Current state в таблице + таблица лог событий, в которую просто пишем события в дополнение к изменению current state

Если нужно завязать логику на последовательность действий или из нее что-то ещё выводить - для простых доменов подойдёт
источник

IV

Igor V in ctodailychat
Раньше был тренд на то, что в компании приходили эвангелисты скрама и рассказывали про новое светлое будущее, которое скоро наступит. Сейчас же ходят по компаниям и рассказывают про Event Storming
источник

D

Dedulik in ctodailychat
Igor V
Раньше был тренд на то, что в компании приходили эвангелисты скрама и рассказывали про новое светлое будущее, которое скоро наступит. Сейчас же ходят по компаниям и рассказывают про Event Storming
...но пришел вирус и их выперли сразу после маркетологов...
источник