Раздел 26 · Data Engineering

Event streaming и event-driven архитектура

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

В прошлом уроке мы узнали, что Kafka это журнал событий, который читают сколько угодно читателей. Но что именно писать в такой журнал? Можно писать просьбы: «спиши деньги», «отправь СМС». А можно писать факты: «заказ создан». Разница кажется словесной, но от неё зависит, как устроена вся система «Гонца».

Записка и объявление

На кухне ресторана повар может действовать двумя способами.

Первый: подойти к каждому лично. «Официант, отнеси суп на пятый стол. Кассир, добавь суп в счёт пятого стола. Кладовщик, спиши одну порцию бульона». Повар знает всех, кто должен что-то сделать, и каждому даёт поручение.

Второй: позвонить в колокольчик и крикнуть «Суп для пятого стола готов!». Официант сам понесёт суп, кассир сам добавит его в счёт, кладовщик сам спишет бульон. Повар даже не знает, сколько человек его услышали.

Поручение лично это команда. Объявление в колокольчик это событие.

Команда и событие

Команда обращается к конкретному адресату и просит его что-то сделать. Её пишут в повелительном наклонении: «спиши деньги», «отправь уведомление». Отправитель знает, кому шлёт, и ждёт результата.

Событие сообщает факт, который уже случился. Его пишут в прошедшем времени: «заказ создан», «курьер взял заказ». Автор события не знает и не должен знать, кто на него отреагирует.

Вот как выглядит создание заказа в «Гонце» на командах:

сервис заказов → биллинг:      спиши 690 рублей с карты клиента
сервис заказов → уведомления:  отправь клиенту СМС «заказ принят»
сервис заказов → диспетчерская: найди свободного курьера

Сервис заказов знает трёх получателей. Захочет Отто добавить антифрод, придётся дописывать четвёртый вызов в сервис заказов. Упадут уведомления, и сервис заказов будет ждать или ловить ошибку.

А вот то же на событиях:

сервис заказов → журнал order-events:  заказ 9001 создан, 690 рублей
биллинг читает журнал:       списывает деньги
уведомления читают журнал:   отправляют СМС
диспетчерская читает журнал: ищет курьера

Сервис заказов сделал одну запись и забыл. Каждый подписчик сам решает, что делать с событием. Антифрод подключается без единой правки в сервисе заказов: он просто начинает читать тот же журнал.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.