CQRS & EVENT SOURCING IN REAL LIFE Artsiom Miklushou, Evolution Gaming
CQRS & EVENT SOURCING IN REAL LIFE
Artsiom Miklushou, Evolution Gaming
INTRO‣О себе
‣Что мы делаем
‣О чем вообще этот доклад?
WHY?
WHAT?▸ Play framework
▸ Circe JSON
▸ Akka - Persistence, Cluster, Sharding
▸ Protobuf for serialization
▸ Cassandra
КУСОЧЕК РАСПИСАНИЯ
CQRS▸ Все либо команда, либо запрос - другого не дано.
▸ Разные ноды
COMMAND CONTROLLERPOST /command
HANDLER (ACTOR)
QUERY CONTROLLERGET /schedule
MSSQL
JSON Response
JSON Response
EVENT SOURCING▸ Immutable fact (event)
▸ Cassandra
▸ Recovery system state
▸ Implicit event log
▸ Use past data
ACTORS
▸ Умеет принимать сообщения
▸ Умеет отвечать отправителю сообщения и не только
▸ Подробности тут: http://doc.akka.io/docs/akka/2.4.17/java/untyped-actors.html (Java version)
PERSISTENT ACTOR▸ Тот же актор, но с плюшками
▸ Умеет сохранять свой стейт
▸ Умеет восстанавливать свой стейт на случай фейла или перезапуска
▸ persistentId
▸ Можем иметь несколько акторов для разных локейшенов, например.
▸ При старте или рестарте в актор прилетят все эвенты с этим persistenceId
PERSISTENT ACTOR
EmployeeAgeUpdated
UserNameUpdated
EmployeeCreated
LocationActor(“Malta”)persistenceId = “Malta”
1
2
3
AKKA CLUSTER SHARDING
Command EMPLOYEE SHARD
EMPLOYEE ACTOR (RIGA)
EMPLOYEE ACTOR (NY)
EMPLOYEE ACTOR (ORSHA)
Events
Events
Events
- Шарда сама поднимает актор для нужного persistenceId
- Т.к. это persistence actor, то в него прилетают все events-ы из БД и таким образом мы восстанавливаем state актора.
PROJECTIONS▸ Предоставляем данные в структурированном виде.
Journal getEventsByPersistenceIdgetEventsByTag
StreamEVENT HANDLER STATE
SNAPSHOTS▸ Каждый раз читать все эвенты и прогонять их через event handler - это
жирно.
▸ Persistence Actor умеет делать saveSnapshot(state).
▸ Persistence Actor на старте получает команду SnapshotOffer, если для него есть сохраненный снэпшот.
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)
PALDIES!
ЗА ЖИЗНЬ. ЛЮДИ.
▸ Половина людей говорт по-русски.
▸ Сложностей с общением никаких пока не испытывал.
▸ Дискриминации по языковому признаку тоже не встречал.
ЗА ЖИЗНЬ. ЦЕНЫ.
▸ Квартира в месяц - 400 евро.
▸ Коммуналка - еще 100.
▸ Самый дешевый транспорт - такси.
▸ Проезд в трамвае - 1.15 евро.
▸ Машина - бесполезна, если живешь в центре.
▸ Пиво (нормальное) в баре (нормальном) - 3-5 евро.