Архитектура шины событий и асинхронный обмен сообщениями
Шина событий (pkg/eventbus/eventbus.go) — высокопроизводительный асинхронный брокер сообщений RUSEON Core. Она обеспечивает слабую связанность между ядром обработки видеопотоков и внешними интеграциями (Webhooks, MQTT).
1. FNV-1a хеширование и сохранение порядка событий
Для сохранения хронологического порядка событий по каждой камере (online, offline, segment_ready):
- События распределяются по пулу воркеров (по умолчанию 4 воркера) через FNV-1a хеширование по полю
camera_id. - Все события конкретной камеры обрабатываются строго последовательно в канале одного воркера (буфер на 1 000 событий).
2. Защита Circuit Breaker (30 секунд блокировки сбойных URL)
Для защиты пула воркеров от зависания при медленных или недоступных HTTP-серверах:
- Запрос к вебхуку выполняется с таймаутом 3 секунды.
- При сбое (ошибка сети или HTTP 5xx) для адреса URL включается Circuit Breaker на 30 секунд, предотвращая повторные запросы.
- По истечении 30 секунд следующее событие выполняет контрольную отправку; при успехе Circuit Breaker сбрасывается.
3. Неблокирующий сброс и метрики
При полном заполнении очереди воркера (1 000 событий):
- Новые события отбрасываются неблокирующим образом (
select ... default). - Инкрементируется счётчик Prometheus
ruseon_eventbus_drops_total. - Захват видеопотоков и живой просмотр не испытывают задержек.