Top Banner
CQRS & EVENT SOURCING IN REAL LIFE Artsiom Miklushou, Evolution Gaming
17

CQRS and EventSourcing

Apr 11, 2017

Download

Software

DevOWL Meetup
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CQRS and EventSourcing

CQRS & EVENT SOURCING IN REAL LIFE

Artsiom Miklushou, Evolution Gaming

Page 2: CQRS and EventSourcing

INTRO‣О себе

‣Что мы делаем

‣О чем вообще этот доклад?

Page 3: CQRS and EventSourcing

WHY?

Page 4: CQRS and EventSourcing

WHAT?▸ Play framework

▸ Circe JSON

▸ Akka - Persistence, Cluster, Sharding

▸ Protobuf for serialization

▸ Cassandra

Page 5: CQRS and EventSourcing

КУСОЧЕК РАСПИСАНИЯ

Page 6: CQRS and EventSourcing

CQRS▸ Все либо команда, либо запрос - другого не дано.

▸ Разные ноды

COMMAND CONTROLLERPOST /command

HANDLER (ACTOR)

QUERY CONTROLLERGET /schedule

MSSQL

JSON Response

JSON Response

Page 7: CQRS and EventSourcing

EVENT SOURCING▸ Immutable fact (event)

▸ Cassandra

▸ Recovery system state

▸ Implicit event log

▸ Use past data

Page 8: CQRS and EventSourcing

ACTORS

▸ Умеет принимать сообщения

▸ Умеет отвечать отправителю сообщения и не только

▸ Подробности тут: http://doc.akka.io/docs/akka/2.4.17/java/untyped-actors.html (Java version)

Page 9: CQRS and EventSourcing

PERSISTENT ACTOR▸ Тот же актор, но с плюшками

▸ Умеет сохранять свой стейт

▸ Умеет восстанавливать свой стейт на случай фейла или перезапуска

▸ persistentId

▸ Можем иметь несколько акторов для разных локейшенов, например.

▸ При старте или рестарте в актор прилетят все эвенты с этим persistenceId

Page 10: CQRS and EventSourcing

PERSISTENT ACTOR

EmployeeAgeUpdated

UserNameUpdated

EmployeeCreated

LocationActor(“Malta”)persistenceId = “Malta”

1

2

3

Page 11: CQRS and EventSourcing

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

PROJECTIONS▸ Предоставляем данные в структурированном виде.

Journal getEventsByPersistenceIdgetEventsByTag

StreamEVENT HANDLER STATE

Page 13: CQRS and EventSourcing

SNAPSHOTS▸ Каждый раз читать все эвенты и прогонять их через event handler - это

жирно.

▸ Persistence Actor умеет делать saveSnapshot(state).

▸ Persistence Actor на старте получает команду SnapshotOffer, если для него есть сохраненный снэпшот.

Page 14: CQRS and EventSourcing

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

PALDIES!

Page 16: CQRS and EventSourcing

ЗА ЖИЗНЬ. ЛЮДИ.

▸ Половина людей говорт по-русски.

▸ Сложностей с общением никаких пока не испытывал.

▸ Дискриминации по языковому признаку тоже не встречал.

Page 17: CQRS and EventSourcing

ЗА ЖИЗНЬ. ЦЕНЫ.

▸ Квартира в месяц - 400 евро.

▸ Коммуналка - еще 100.

▸ Самый дешевый транспорт - такси.

▸ Проезд в трамвае - 1.15 евро.

▸ Машина - бесполезна, если живешь в центре.

▸ Пиво (нормальное) в баре (нормальном) - 3-5 евро.