Поток данных в системе
- Приём данных: Data Receiver получает поток с биржи.
- Хранение и публикация: Данные записываются в Redis, который публикует обновления.
- Подписка клиентов: API серверы подписываются на нужные каналы Redis в зависимости от подписок клиентов.
- Доставка клиентам: API серверы сразу передают обновления клиентам через gRPC стримы (или WebSocket)
- Синхронизация: При подключении клиента ему сначала отправляется актуальный снимок данных из Redis, затем начинаются стриминговые обновления.
Взаимодействие компонентов
Архитектура реализует паттерн fan-out:
- Один источник данных (биржа)
- Несколько Data Receiver’ов
- Несколько реплик Redis
- Множество стриминговых API серверов
- Миллионы клиентов
Так обеспечивается масштабируемость и низкая задержка доставки.
Отказоустойчивость и мониторинг
- Репликация Redis для сохранности данных + backup система
- Множество API серверов для отказоустойчивости клиентских подключений
- Снимки (snapshot) Redis для восстановления после сбоев
- Кластер LB для отказоустойчивости балансировки
Полезное
Проблемы Redis и как их можно решить с Dragonfly: https://www.dragonflydb.io/blog/redis-scaling-mistakes