В компании Cloudflare традиционно используются базы данных PostgreSQL и ClickHouse для обработки транзакционных и аналитических задач. Однако для нужд аналитики и отчетности в продукте Digital Experience Monitoring (DEX) было решено использовать TimescaleDB, расширение PostgreSQL.
Приоритеты роста и простота реализации
При планировании архитектуры DEX фокус был сделан на простоте: минимальное количество компонентов, быстрое время запуска и ясные границы продукта. Исходная структура DEX включала в себя три основных компонента: HTTP API для конфигурации тестов, PostgreSQL для хранения данных конфигурации и пользовательский интерфейс на React, встроенный в облачную панель Cloudflare.
Выбор базы данных для аналитики
Изначально рассматривался ClickHouse благодаря высокой пропускной способности. Однако сложность ingest-пайплайнов (использование Cap’n Proto/Protobuf, сокетов, Kafka и пакетных вставок) и возникновение write-амплификации сделали этот выбор непрактичным для нашего екея, который включал миллионы устройств с частыми маленькими событиями.
Было принято решение начать с PostgreSQL как более простого и привычного решения. Для этого в таблицах PostgreSQL использовались многоколоночные B-tree индексы. Важным уроком стало размещение колонки с временной меткой последней в индексах и оптимизация порядка других колонок по их уникальности, что позволило значительно улучшить запросы.
Для повышения производительности запросов были внедрены предварительно вычисленные агрегаты (downsampling) посредством cron-задач для агрегации. Это дало масштабные улучшения, но потребовало значительных инженерных затрат для управления cron-задачами и изменениями схем данных.
Преимущества TimescaleDB
В дальнейшем TimescaleDB был оценен как простое и эффективное решение благодаря интеграции с экосистемой Postgres и автоматическому управлению партициями (гипертэблицы), непрерывные агрегаты для автоматической агрегации и downsampling, а также встроенное сжатие данных, которое позволяет значительно уменьшить объём хранения. В результате тестов на собственном облачном TimescaleDB показатели производительности улучшились в 5-35 раз в зависимости от настроек временных окон. Компрессия данных достигла отношения 33x.
Благодаря внедрению TimescaleDB, команда по аналитике и отчетности Zero Trust использовала платформу в качестве слоя агрегации поверх ClickHouse и PostgreSQL кластеров, что позволило достичь более высокой пропускной способности и уменьшить сложность операций.
В заключение можно сказать, что выбрав простоту и откладывая преждевременные оптимизации, Cloudflare смогла быстро выпустить DEX и позже обнаружила, что TimescaleDB обеспечил идеальный баланс между знакомством с PostgreSQL и производительностью OLAP.