Почему Авито не подключает микросервисы к Kafka напрямую?
Хороший кейс для разбора по системному дизайну:
Если у вас 500+ сервисов на разных языках программирования, то прямое подключение к Kafka означает свой клиент под каждый язык и невозможность поменять кластера без обновления для всех потребителей.
Поэтому они поставили между сервисами и Kafka прослойку (шину данных). Сервисы общаются только с ней, а всю внутрянку кафки шина берет на себя. Продуктовым командам по итогу вообще не нужно знать, как там всё устроено под капотом.
На практике это дало:
1. Когда отваливался дата-центр, запись в Kafka зависала до 30 секунд и все запросы на запись просто стояли и ждали. Они переделали архитектуру: вместо одной Kafka на все дата-центры сделали несколько локальных, которые потом синхронизируются между собой. Сервисы этого перехода даже не заметили, для них ничего не поменялось.
2. Шина проверяет контракты событий при каждом деплое. Если сервис Б читает событие от сервиса А и ждёт там определённое поле - А не сможет его удалить или поменять тип, пока Б на него рассчитывает. Раньше такое всплывало багами на проде.
Читать📚
IT АНАЛитика | Подписаться
Post #301
837

- ❤ 5
- ✍ 3