В прошлом уроке мы решили, что статус заказа «Гонцу» нужен потоком, а не раз в час. Но событие «заказ создан» ждёт не только дашборд Отто. Его ждут биллинг, антифрод, уведомления клиенту и аналитика. Сегодня разберём, что происходит, когда каждый сервис начинает слать события каждому сам.
Записки по всему офису
Представь офис, где нет общей доски объявлений. Бухгалтер узнал, что поменялся тариф, и пишет записку юристу, менеджеру и директору. Менеджер узнал про нового клиента и пишет бухгалтеру, юристу и складу. Каждый носит записки каждому.
Пока в офисе три человека, это терпимо. Когда их двадцать, половина дня уходит на записки, а половина записок теряется: кто-то ушёл в отпуск, кто-то переехал в другой кабинет, кто-то не понял почерк.
Доска объявлений решает всё сразу. Каждый вешает новость один раз, а кому нужно, подходит и читает. Новый сотрудник просто начинает смотреть на доску, и никому не надо добавлять его в списки рассылки.
Как это выглядит в «Гонце»
У «Гонца» три сервиса, которые рождают события: приложение заказов, приложение курьеров и платёжный шлюз. Их называют источниками. И четыре сервиса, которым эти события нужны: биллинг, антифрод, уведомления и аналитика Отто. Это потребители.
Самый очевидный способ связать их: пусть каждый источник сам отправит событие каждому потребителю, например HTTP-запросом. Такую связь называют точечной интеграцией.
приложение заказов → биллинг
приложение заказов → антифрод
приложение заказов → уведомления
приложение заказов → аналитика
приложение курьеров → биллинг
...
Три источника на четыре потребителя дают 3 × 4 = 12 связей. В общем виде M источников и N потребителей дают M × N связей. Отсюда и название проблемы.
Посмотри сам
Меняй число источников и потребителей и переключай способ связи.
При трёх источниках и четырёх потребителях напрямую получается 12 связей, через общий лог 7. При пяти и пяти разница уже 25 против 10. Добавь ещё одного потребителя: напрямую появится столько новых связей, сколько у тебя источников, а через лог одна.
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.