Download - CQRS and EventSourcing
![Page 1: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/1.jpg)
CQRS & EVENT SOURCING IN REAL LIFE
Artsiom Miklushou, Evolution Gaming
![Page 2: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/2.jpg)
INTRO‣О себе
‣Что мы делаем
‣О чем вообще этот доклад?
![Page 3: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/3.jpg)
WHY?
![Page 4: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/4.jpg)
WHAT?▸ Play framework
▸ Circe JSON
▸ Akka - Persistence, Cluster, Sharding
▸ Protobuf for serialization
▸ Cassandra
![Page 5: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/5.jpg)
КУСОЧЕК РАСПИСАНИЯ
![Page 6: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/6.jpg)
CQRS▸ Все либо команда, либо запрос - другого не дано.
▸ Разные ноды
COMMAND CONTROLLERPOST /command
HANDLER (ACTOR)
QUERY CONTROLLERGET /schedule
MSSQL
JSON Response
JSON Response
![Page 7: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/7.jpg)
EVENT SOURCING▸ Immutable fact (event)
▸ Cassandra
▸ Recovery system state
▸ Implicit event log
▸ Use past data
![Page 8: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/8.jpg)
ACTORS
▸ Умеет принимать сообщения
▸ Умеет отвечать отправителю сообщения и не только
▸ Подробности тут: http://doc.akka.io/docs/akka/2.4.17/java/untyped-actors.html (Java version)
![Page 9: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/9.jpg)
PERSISTENT ACTOR▸ Тот же актор, но с плюшками
▸ Умеет сохранять свой стейт
▸ Умеет восстанавливать свой стейт на случай фейла или перезапуска
▸ persistentId
▸ Можем иметь несколько акторов для разных локейшенов, например.
▸ При старте или рестарте в актор прилетят все эвенты с этим persistenceId
![Page 10: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/10.jpg)
PERSISTENT ACTOR
EmployeeAgeUpdated
UserNameUpdated
EmployeeCreated
LocationActor(“Malta”)persistenceId = “Malta”
1
2
3
![Page 11: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/11.jpg)
AKKA CLUSTER SHARDING
Command EMPLOYEE SHARD
EMPLOYEE ACTOR (RIGA)
EMPLOYEE ACTOR (NY)
EMPLOYEE ACTOR (ORSHA)
Events
Events
Events
- Шарда сама поднимает актор для нужного persistenceId
- Т.к. это persistence actor, то в него прилетают все events-ы из БД и таким образом мы восстанавливаем state актора.
![Page 12: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/12.jpg)
PROJECTIONS▸ Предоставляем данные в структурированном виде.
Journal getEventsByPersistenceIdgetEventsByTag
StreamEVENT HANDLER STATE
![Page 13: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/13.jpg)
SNAPSHOTS▸ Каждый раз читать все эвенты и прогонять их через event handler - это
жирно.
▸ Persistence Actor умеет делать saveSnapshot(state).
▸ Persistence Actor на старте получает команду SnapshotOffer, если для него есть сохраненный снэпшот.
![Page 14: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/14.jpg)
LINKS▸ https://www.youtube.com/watch?v=JHGkaShoyNs - Greg Young - CQRS and
Event Sourcing
▸ http://doc.akka.io/docs/akka/current/java/persistence.html Akka Persistence (Java version)
![Page 15: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/15.jpg)
PALDIES!
![Page 16: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/16.jpg)
ЗА ЖИЗНЬ. ЛЮДИ.
▸ Половина людей говорт по-русски.
▸ Сложностей с общением никаких пока не испытывал.
▸ Дискриминации по языковому признаку тоже не встречал.
![Page 17: CQRS and EventSourcing](https://reader033.vdocuments.pub/reader033/viewer/2022051502/58d108941a28ab823e8b549f/html5/thumbnails/17.jpg)
ЗА ЖИЗНЬ. ЦЕНЫ.
▸ Квартира в месяц - 400 евро.
▸ Коммуналка - еще 100.
▸ Самый дешевый транспорт - такси.
▸ Проезд в трамвае - 1.15 евро.
▸ Машина - бесполезна, если живешь в центре.
▸ Пиво (нормальное) в баре (нормальном) - 3-5 евро.