Skip to main content
Skip to main content

Кейс

Гео/Heatmap бэкенд: агрегация в реальном времени

Агрегация плотности/присутствия, API, масштабирование.

150KСобытий/мин
180msp95 латентность
Год: 2024Индустрия: Локационная аналитикаСроки: 8 недель

Задача

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

Ограничения

  • 100K+ событий в минуту в пике
  • Время ответа на запрос менее секунды
  • Хранение исторических данных 2 года
  • API должен быть публичным (с rate-limiting)

Решение

Построили streaming-пайплайн с гео-разрешением на нескольких уровнях зума. Предагрегировали данные во временные бакеты. Разделили горячее (недавнее) и холодное (историческое) хранилище. Реализовали многоуровневое кеширование с Redis.

Результаты

  • Пайплайн приёма событий
  • Движок агрегации в реальном времени
  • Сервер тайлов heatmap
  • REST API с OpenAPI спецификацией
  • Rate limiting и система аутентификации
  • Дашборды мониторинга

Артефакты

Документы и результаты проекта

H3 Resolution spec

Geo grid

API OpenAPI spec

REST v1

Доки по кешу

Redis + ClickHouse

Верификация / гейты качества

6-фазный чеклист перед релизом

01Сборка
Пройден
02Юнит-тесты
Пройден
03Нагрузочное тестирование (150K событий/мин)
Пройден
04Бенчмарки латентности
Пройден
05Тесты API контрактов
Пройден
06Проверка rate limiting
Пройден
Все гейты пройдены
6/6

Стек технологий

GoApache KafkaClickHouseRedisPostgreSQLDockerKubernetes

Результат

Уверенно обрабатывает 150K событий/минуту. 95-й перцентиль латентности запросов: 180мс. API обслуживает 50+ сторонних интеграций. Снижение затрат на инфраструктуру на 60% vs предыдущего решения.

Сложные задачи, которые мы решили

Стратегия гео-разрешения

H3 гексагональная сетка для консистентной агрегации на всех уровнях зума. Предвычисление на нескольких разрешениях для избежания рантайм-вычислений.

Разделение горячего/холодного хранилища

Последние 24 ч в Redis для мгновенного доступа. 30 дней в ClickHouse для быстрой аналитики. Старше: сжатое в S3, доступно через Athena. Тиринг автоматический: фоновый воркер перемещает данные по возрасту, API‑слой маршрутизирует запросы в нужное хранилище прозрачно — клиент видит один унифицированный API независимо от того, где лежат данные.

Агрегация в реальном времени при 50K событий/сек без потери точности

Тайлы хитмапы должны обновляться в течение 2 секунд после события, но наивный пересчёт на каждое событие рухнет под нагрузкой. Реализовали двухстадийный пайплайн: (1) входящие события батчатся в Redis Streams (окно 50 мс), затем (2) Lua‑скрипт атомарно инкрементирует предвычисленные счётчики H3‑ячеек на нескольких разрешениях одновременно. Фронтенд получает дельты тайлов (не полные снапшоты) через Server‑Sent Events, снижая трафик на 94% по сравнению с полным поллингом. При 50K событий/сек задержка тайлов остаётся менее 1.8 секунд, загрузка CPU — ниже 40% на одном 4‑ядерном инстансе.

Похожий проект? Получите оценку или запишитесь на звонок.

Похожий проект?

20 минут — обсудим вашу задачу, дадим честную оценку. Без обязательств.