В прошлом уроке мы узнали, что Kafka это журнал событий, который читают сколько угодно читателей. Но что именно писать в такой журнал? Можно писать просьбы: «спиши деньги», «отправь СМС». А можно писать факты: «заказ создан». Разница кажется словесной, но от неё зависит, как устроена вся система «Гонца».
Записка и объявление
На кухне ресторана повар может действовать двумя способами.
Первый: подойти к каждому лично. «Официант, отнеси суп на пятый стол. Кассир, добавь суп в счёт пятого стола. Кладовщик, спиши одну порцию бульона». Повар знает всех, кто должен что-то сделать, и каждому даёт поручение.
Второй: позвонить в колокольчик и крикнуть «Суп для пятого стола готов!». Официант сам понесёт суп, кассир сам добавит его в счёт, кладовщик сам спишет бульон. Повар даже не знает, сколько человек его услышали.
Поручение лично это команда. Объявление в колокольчик это событие.
Команда и событие
Команда обращается к конкретному адресату и просит его что-то сделать. Её пишут в повелительном наклонении: «спиши деньги», «отправь уведомление». Отправитель знает, кому шлёт, и ждёт результата.
Событие сообщает факт, который уже случился. Его пишут в прошедшем времени: «заказ создан», «курьер взял заказ». Автор события не знает и не должен знать, кто на него отреагирует.
Вот как выглядит создание заказа в «Гонце» на командах:
сервис заказов → биллинг: спиши 690 рублей с карты клиента
сервис заказов → уведомления: отправь клиенту СМС «заказ принят»
сервис заказов → диспетчерская: найди свободного курьера
Сервис заказов знает трёх получателей. Захочет Отто добавить антифрод, придётся дописывать четвёртый вызов в сервис заказов. Упадут уведомления, и сервис заказов будет ждать или ловить ошибку.
А вот то же на событиях:
сервис заказов → журнал order-events: заказ 9001 создан, 690 рублей
биллинг читает журнал: списывает деньги
уведомления читают журнал: отправляют СМС
диспетчерская читает журнал: ищет курьера
Сервис заказов сделал одну запись и забыл. Каждый подписчик сам решает, что делать с событием. Антифрод подключается без единой правки в сервисе заказов: он просто начинает читать тот же журнал.
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.