Селена, как хранилища данных класса Data Lakehouse, использует открытые архитектуры для хранения данных, это обеспечивает гибкость, поддерживает совместимость и упрощает руководство данными (Data Governance). К сожалению, низкая производительность ограничивает ее применение для рабочих нагрузок с высокими требованиями, например в клиентских приложениях, требующих низкую задержку и высокий уровень параллелизма при обращениях к данным хранилища.
В основном, это связано с хранением данных на удалённых ресурсах, которое влечет за собой увеличение трафика и приводит к появлению узких мест, особенно при работе со множеством мелких файлов. К счастью, проблемы с производительностью можно решить с помощью кэширования. В этой статье рассматриваются стратегии кэширования и примеры их применения.
Эффективность механизмов кеширования
Кэширование может существенно повысить производительность запросов, но следует тщательно продумать его реализацию. Если просто добавить уровень кэширования в инфраструктуру, дополнительные сложности нивелируют потенциальные преимущества:
Проблемы согласованности данных. Если данные часто меняются, трудно поддерживать согласованность между кэшем и базовым хранилищем, особенно в распределенных средах.
Проблемы распределения ресурсов. Кэш может занять на диске много места, которое сложно будет перераспределить между другими задачами в период высоких нагрузок. В результате система теряет гибкость и с трудом масштабирует ресурсы при резком росте рабочих нагрузок.
Отсутствие улучшений производительности. Во время записи данных в кэш скорость работы системы снижается. Чем больше кэшированных файлов, тем выше нагрузка на систему и риск блокировок. Если нагрузка на диск и так высокая, операции с кэшем приведут к появлению узких мест, а не к желаемой оптимизации.
Рост эксплуатационных расходов. Развертывание и обслуживание уровня кэширования требует дополнительных финансовых и трудозатрат.
Принципы кэширования Lakehouse в открытых платформах хранения данных
Эффективная стратегия кэширования подразумевает баланс между повышением производительности с одной стороны и дополнительными сложностями и издержками – с другой. Ключевые компоненты оптимального решения:
Согласованность данных. Требуется отслеживать актуальность данных с помощью метаданных, чтобы гарантировать точность результатов, даже если данные часто меняются.
Масштабируемость и адаптивность. Кэш должен быть достаточно гибким, чтобы адаптироваться к доступным ресурсам системы. В идеале он должен расширяться, кэшируя больше данных, в периоды низкой нагрузки, и сжиматься при росте нагрузки на диск, чтобы не снижать общую производительность.
Умная политика вытеснения. Разные данные требуют разных подходов. Часто запрашиваемые данные должны оставаться в кэше, а редкие запросы не должны влиять на его эффективность. Интеллектуальные алгоритмы вытеснения следят за тем, чтобы в кэше хранились только самые релевантные данные.
Гибкость при чтении. При чтении данных кэш должен переключаться между локальным и удаленным хранилищем, оптимизируя скорость запросов в разных условиях. Благодаря такому гибкому подходу, кэш не ограничивает производительность при нехватке локальных ресурсов.
Сокращение издержек. Затраты на кэширование необходимо свести к минимуму. Если ограничивать прямые операции с файлами и использовать асинхронные процессы кэширования, можно поддерживать высокую производительность запросов без значительного потребления ресурсов.
Селена: пример эффективного кэширования
Создание производительной системы кэширования — сложная задача, требующая оптимизации файловых структур, а также адаптивных механизмов для работы в реальном времени. Селена, как решение на базе StarRocks, позволяет создать эффективный кэш в открытых средах Data Lake (озера данных).
Что такое Селена?
Селена – это хранилище данных класса Data Lakehouse, включающий в себя механизм запросов StarRocks, обладающий массовой параллельной обработкой данных (Massively Parallel Processing, или MPP). Он поддерживает рабочие нагрузки в стиле хранилища DWH, однако с хранением файлов данных в открытом озере данных. Он поддерживает популярные табличные форматы, включая Iceberg, Delta и Hudi, а также такие форматы файлов, как Parquet и ORC. Благодаря расширенным функциям и оптимизации для открытой Lakehouse-платформы, механизм StarRocks решает типичные проблемы с производительностью, вызываемые кэшированием.
Архитектура StarRocks устроена просто, но эффективно: фронтенд, который управляет метаданными и планированием запросов, и вычислительные узлы, которые отвечают за обработку и кэширование данных.
При поступлении запроса вычислительные узлы ищут данные в кэше и проверяют их актуальность через метаданные, гарантируя согласованное и быстрое выполнение.
Рассмотрим, как StarRocks реализует кэширование для достижения оптимальной производительности.
Способы управления кэшированием
Эффективная структура кэширования. Вместо традиционных мелких файлов StarRocks использует крупные файлы, разделенные на блоки. Метаданными блоков управляют вычислительные узлы. Такой подход снижает издержки на обработку множества мелких файлов и значительно повышает эффективность чтения/записи в кэш и общую производительность системы.
Продвинутые стратегии оптимизации. StarRocks применяет двухуровневую стратегию кэширования, сохраняя «горячие» данные в оперативной памяти или на диске – в зависимости от того, что быстрее. Такой подход ускоряет выполнение частых запросов. Для вытеснения данных из кэша используется алгоритм SLRU (Segmented Least Recently Used), который отдает приоритет сохранению в кэше «горячих» данных и не позволяет «холодным» вытеснять важную информацию. Чтобы избежать загрязнения кэша, StarRocks кэширует только запросы и игнорирует другие операции, включая импорт, обновления материализованных представлений, задачи ETL и крупные сканирования.
Адаптивное управление кэшем. StarRocks динамически адаптирует размер кэша под доступную емкость диска. Это позволяет эффективно использовать ресурсы и освобождать место, когда оно требуется для импорта, ETL и других задач. Кроме того, при низкой скорости диска StarRocks может обходить кэш и считывать данные напрямую из удаленного хранилища, поддерживая высокую производительность даже в нестабильных условиях.
Пример применения: реальные варианты реализации Селены
Эффективность стратегии кэширования Селены подтверждается реальными примерами применения, когда компаниям удалось существенно увеличить производительность.
Тестирование запросов Presto по сравнению с Селеной
Было проведено сравнение производительности большого кластера Presto и Селены. Кластер Presto состоял более чем из 100 физических серверов. Для тестирования было отобрано 500 самых долгих запросов, из которых 210 завершались сбоем по истечении 1800 секунд (голубая линия на графике).
Тот же набор запросов запустили на кластере Селены, который включал всего 19 серверов на базе процессоров Xeon E5-2683V4 64C. Несмотря на сетевые ограничения, Селена стабильно показывала более высокую скорость выполнения запросов. Результаты демонстрируют важность локализации данных для повышения скорости при высоких нагрузках.
Реализация клиентской аналитики в Селене
Кэширование заметно ускоряет пользователям работу с аналитикой в открытых архитектурах хранения данных при помощи Lakehouse. При правильном подходе оно решает такие важные проблемы, как согласованность данных, оптимизация ресурсов и нестабильная скорость выполнения запросов. Селена наглядно показывает, как эффективная система кэширования помогает значительно повысить производительность запросов даже при очень высоких нагрузках.