Раздел 26 · Data Engineering

Проблема M×N: ад точечных интеграций

junior~15 мин

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

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

Записки по всему офису

Представь офис, где нет общей доски объявлений. Бухгалтер узнал, что поменялся тариф, и пишет записку юристу, менеджеру и директору. Менеджер узнал про нового клиента и пишет бухгалтеру, юристу и складу. Каждый носит записки каждому.

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

Доска объявлений решает всё сразу. Каждый вешает новость один раз, а кому нужно, подходит и читает. Новый сотрудник просто начинает смотреть на доску, и никому не надо добавлять его в списки рассылки.

Как это выглядит в «Гонце»

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

Самый очевидный способ связать их: пусть каждый источник сам отправит событие каждому потребителю, например HTTP-запросом. Такую связь называют точечной интеграцией.

приложение заказов → биллинг
приложение заказов → антифрод
приложение заказов → уведомления
приложение заказов → аналитика
приложение курьеров → биллинг
...

Три источника на четыре потребителя дают 3 × 4 = 12 связей. В общем виде M источников и N потребителей дают M × N связей. Отсюда и название проблемы.

Посмотри сам

Меняй число источников и потребителей и переключай способ связи.

При трёх источниках и четырёх потребителях напрямую получается 12 связей, через общий лог 7. При пяти и пяти разница уже 25 против 10. Добавь ещё одного потребителя: напрямую появится столько новых связей, сколько у тебя источников, а через лог одна.

урок из курса

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

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