Ануар Нурмаканов - Event Sourcing и CQRS на конкретном примере

  Рет қаралды 52,515

JPoint, Joker и JUG ru

JPoint, Joker и JUG ru

Күн бұрын

Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
Подробности и билеты: jrg.su/Ypf1HW
- -
. . . . Что такое Event Sourcing и зачем нам CQRS? Все слышали об этих двух парадигмах - теперь пора разобраться конкретнее, как реализовать их. В докладе будет и мотивировано решение обратиться к Event Sourcing, и разобран небольшой конкретный пример, в котором это всё работает с PostgreSQL и ElasticSearch.

Пікірлер: 45
@sanzharbekamatov1581
@sanzharbekamatov1581 5 жыл бұрын
Отличный доклад. Просмотрел на одном дыхании.
@АндрейБашук-ч3э
@АндрейБашук-ч3э 6 жыл бұрын
Очень интересных доклад, спасибо докладчику! Взял для себя очень много пищи для размышлений.
@kalmurza
@kalmurza 2 жыл бұрын
Объяснил доступнейшим языком, спасибо!
@MrSaaart
@MrSaaart Жыл бұрын
Первый доклад по этой теме, после которого до меня прям много чего наконец-то дошло! Спасибо, Ануар )
@белка-у8б
@белка-у8б 2 жыл бұрын
Ты просто красавчик! Спасибо огромное ! 😘😘😘😘
@calinmarian2553
@calinmarian2553 4 ай бұрын
Thanks, очень хороший доклад.
@VitaliySunny
@VitaliySunny 4 жыл бұрын
Докладчик просто бомба, разжевал очень хорошо.
@silentknight4
@silentknight4 Жыл бұрын
Отличный доклад и докладчик! Спасибо!
@ДмитрийДмитриев-р9з
@ДмитрийДмитриев-р9з Жыл бұрын
Блин, на самом интересном закончилось
@immortal-spirit-13
@immortal-spirit-13 2 жыл бұрын
класс доклад, спасибо )) интересно и позитивно ))
@Мурад-м1е
@Мурад-м1е 6 жыл бұрын
В конце была интересная дискуссия, жаль что перебили.
@xfg9183
@xfg9183 5 жыл бұрын
Помоему нет. Автор объясняет, что два клиента могут считать одинаковое состояние агрегата и затем по разному изменить это одинаковое состояние. Без версионирования получится, что один клиент затрет изменения другого, так как изменения от последнего клиента должны учитывать изменения от предыдущего. Базовые вещи и вообще не про ES + CQRS. Слушатель этого не понимает и просто говорит рандомный набор слов.
@liberta828
@liberta828 3 жыл бұрын
@@xfg9183 jygjygyg
@maksimfedorov2632
@maksimfedorov2632 4 жыл бұрын
Автор упомянул перед вводом про CQRS и ES такую тему как DDD, с отсылкой как-будто это альма-матер... а потом показывает, как через сеттеры шатает агрегат в СОБЫТИЯХ :):):):)
@MikhailBorisovTheOne
@MikhailBorisovTheOne 3 жыл бұрын
Отсюда видимо и начались проблемы с многопоточностью :)
@ANTONZUBAREV
@ANTONZUBAREV Жыл бұрын
В общем виде разделение записи и чтения в рамках реляционных субд решает репликация БД. Может не стоит трудиться со сложным Юнитом по синхронизации из видео. Проще применить репликацию.
@Yataganable
@Yataganable 3 жыл бұрын
Ануар, молодец, очень хорошо смотришься на сцене. Правильный слог, интонация и боди language
@Павел-у7ф2е
@Павел-у7ф2е Жыл бұрын
Интересный вариант с кафкой, но я не совсем понял как будут решаться следующие проблемы если использовать кафку как event store: 1) Например мы добавили новую таблицу Materialized view, которая будет основана на уже существующих сообщениях и начинаем ее формировать и через кафку, нам придется прогнать миллиарды сообщения и обработать их, если например данные формировались несколько лет, возможно это вопрос к подходу, а не к кафке)) 2) Например, у нас есть сообщения в кафке, но они же не вечно там хранятся, ну например, если электричество отключат и так далее и упадут контейнеры, и с образом что-то случится, как нам восстанавливать данные? Ведь, как я понял, на жестком диске они хранятся в таком варианте, что их нельзя будет прочитать, ну или это считается плохим подходом.. Получается их нужно будет резервировать каждый раз в каком-то другом формате а потом как-то считывать 3) Порядок сообщений, ведь в кафку сообщения могут падать в беспорядочном виде, а нам нужен будет например другой порядок, наверное это как-то решается на уровне приложений.. Но все таки? Например, в обычных бд можно сортировать хотябы по id или по другому полю потом считывать в порядке. 4) Как я понял нельзя считывать данные с определенного id, а например у нас уже есть materialized view до определенного id и нам нужно его обновить. В любом случае хотелось бы понять best practice для kafka. потому как многие рекомендуют его как event store
@xelaksal6690
@xelaksal6690 2 жыл бұрын
Отличный доклад!!! Про Бугаенко хорошо было)))
@АлексейКиреев-н7н
@АлексейКиреев-н7н 5 жыл бұрын
То что тут названо "обработчик" на 27:45 - в общепринятой терминологии называтся "Projector", а "материализованное представление" - "Projection"
@Oswee
@Oswee 5 жыл бұрын
Vidal i "обработчик" nazvonim "denormalizer"
@GlobusUA
@GlobusUA 3 жыл бұрын
Хороший доклад. Почему не сделать трансляцию из дискусионного зала? Уверен, там тоже полезная информация была.
@arturbarkou6347
@arturbarkou6347 10 ай бұрын
"Мессадж броукер" - этим все сказано
@МаксимВасёв-х5ы
@МаксимВасёв-х5ы 2 жыл бұрын
Я фронтендер. Не могу отлелаться от мысли, что докладчик просто описывает redux с таймтревелом в немного видоизмененных терминах.
@VladimirMiroshnichenko64
@VladimirMiroshnichenko64 Ай бұрын
31:17 а индекс по agregateId или type?
@romangavrilovich8453
@romangavrilovich8453 3 жыл бұрын
в Амазоне нету Кафки, а чем Кинезис не подходит ?
@gylkag
@gylkag 6 жыл бұрын
Я конечно понимаю что докладчик старался, но эти шуточки больно слушать... И зачем вводить в заблуждение о том что такое CQRS? Это всего лишь разделение команд от запросов, при этом можно писать/читать в одну и ту же базу, в одни и те же таблицы. То что можно выделить для запросов отдельные представления (даже отдельные базы построенные на другой парадигме) для увеличения производительности - это уже деталь, это не необходимое условие CQRS. И еще вагон других вопросов по откровенно базовым понятиям...
@snowy0110
@snowy0110 6 жыл бұрын
Это бич нашей сферы. Из-за того что нет единого реестра (словаря), что такое %любое название%, возникают такие ситуации. Есть только книги отдельных людей, статьи, и они так же не консистентны в своих показаниях. Так же многие технические термины используются вообще без определений, просто по наитию. Но и даже если был бы реестр, это не решило полностью проблемы, потому что "машина - это средство передвижения с 4 колесами", но при этом, если скрутить 4 колеса, то все равно это машина. А в какой момент это не становится машиной, если начать отламывать по одной детали? Грань тонка. Журить докладчика по этому поводу не надо, если смысл передан без искажений, то дальнейший спор о терминологии просто не нужен.
@snowy0110
@snowy0110 5 жыл бұрын
Alex B что кроме ваших ощущений заставляет вас думать таким образом?
@xfg9183
@xfg9183 5 жыл бұрын
​@@snowy0110 тем не менее человек задает справедливые вопросы. Со временем данные в событиях могут изменяться или даже сами события могут перестать существовать. Как при этом собирать актуальное состояние агрегата? Поддерживать текущую версию события и все предыдущие? Что делать если событие более не существует? Игнорировать такое событие при сборке агрегата? Как модифицировать read часть, чтобы она соответствовала этим изменениям? Эти вопросы интересуют гораздо больше, чем пересказ любой статьи о том, что такое event sourcing и cqrs. Я не встречал адекватных решений, хотя сама архитектура довольно интересная.
@ivangorsky7537
@ivangorsky7537 5 жыл бұрын
@@xfg9183 "Сами события могут перестать существовать" - это как? Кто-то создал запись, а потом изобрели машину времени и тебя с базой перекинули в прошлое, до создания записи?
@xfg9183
@xfg9183 5 жыл бұрын
@@ivangorsky7537 имею ввиду функционал сайта. Был какой-нибудь каталог - генерировал события. Затем он стал не нужен. Теперь весь код связанный с этим каталогом не нужен и должен быть удален. Тоже самое может быть и с отдельно взятым событием которое больше не нужно так как его генерирующий и обрабатывающий код был удален. Не держать же старый код только потому что когда-то какое-то событие было которое больше произойти не может то есть не существует с настоящего момента и далее.
@ДмитрийПахомов-б1б
@ДмитрийПахомов-б1б 2 ай бұрын
Что такое постгрес сикель?
@OleksandrAndrushchenko
@OleksandrAndrushchenko Жыл бұрын
Спасибо за интересное видео, но Киев пишется как Kyiv
@travacry
@travacry 2 жыл бұрын
доклад огонь. но про производительность mv такое себе.
@VasiliyMikhailov
@VasiliyMikhailov 4 ай бұрын
24я минута «Событие знает как себя применить к агрегату». Кажется все должно быть наоборот - Агрегат слушает события и решает что из них к себе применить.
@kinvain
@kinvain 3 жыл бұрын
С удовольствием посмотрел картинки и меме. Жаль голос на их фоне постоянно отвлекает. А если серьёзно - отличный доклад, огромное спасибо за работу. Но назвите меня скучным и занудой, но моё личное скромное имхо - количество смешнявок перечёркивает весь труд.
@dv5686
@dv5686 4 жыл бұрын
Я так понял Kafka streams уже решает всю ту магию с базами и ентитями. Агрегация и прочая дич
@locSob
@locSob 4 жыл бұрын
Везде пример конференции... Может сам кто то что то придумаеет?
@Oswee
@Oswee 5 жыл бұрын
Ne znaju... ja skorei bi ispolzoval protocol buffers v mesto JSON dlja hronenie i obmena mezhdu servisami. Legche parsitj i menshe mesto nado. Na samom dele prijatno videtj shto u kovo to takaja zhe arhitektura. :)
@sergeibatiuk3468
@sergeibatiuk3468 4 жыл бұрын
Афтар отжог нипадецки
From Small To Giant Pop Corn #katebrush #funny #shorts
00:17
Kate Brush
Рет қаралды 72 МЛН
Spongebob ate Patrick 😱 #meme #spongebob #gmod
00:15
Mr. LoLo
Рет қаралды 21 МЛН
Help Me Celebrate! 😍🙏
00:35
Alan Chikin Chow
Рет қаралды 66 МЛН
А какие виды CQRS вы знаете? Андрей Цветцих, Тинькофф
38:47
Видео с мероприятий {speach!
Рет қаралды 3,1 М.
CQRS pitfalls and patterns - Udi Dahan - NDC Oslo 2023
59:26
NDC Conferences
Рет қаралды 25 М.
Евгений Борисов - Spring - Глубоко и не очень
1:03:57
JPoint, Joker и JUG ru
Рет қаралды 159 М.
Яков Повар - Введение в Event sourcing
58:24
DotNext — конференция для .NET‑разработчиков
Рет қаралды 10 М.