Перейти к содержимому
13 / 15

Как спроектировать счётчики просмотров и сбор аналитических событий?

Первый вопрос здесь — какая нужна точность. Счётчик просмотров допускает погрешность в доли процента, и это меняет всё: можно буферизовать в памяти и сбрасывать пачками, можно считать уникальных приблизительно через HyperLogLog, можно терять события при падении узла. Конвейер строится так: клиент отправляет события пачками, коллектор пишет их в журнал (Kafka), оттуда один поток агрегирует окнами в счётчики для показа, второй складывает сырые события в аналитическое хранилище для запросов задним числом. Главный компромисс — точность против стоимости: точный подсчёт уникальных требует хранения идентификаторов, приблизительный укладывается в килобайты. Узкое место — горячие ключи популярных объектов, снимается локальным батчингом и шардированием ключа.