Skip to content

Архитектура Shared-Data

Концепция Shared-Data в LakeHouse

Архитектура Shared-Data (разделение вычислений и хранения) - это фундаментальный принцип построения современной платформы LakeHouse, который позволяет независимо масштабировать вычислительные ресурсы и хранилище данных.

Основные принципы

  • Разделение Compute и Storage: Вычислительные ресурсы (Kubernetes, Spark, StarRocks) и хранилище (S3) работают независимо
  • Единое хранилище данных: Все данные хранятся в S3-совместимом объектном хранилище в формате Apache Iceberg
  • Множество вычислительных движков: Разные инструменты (Spark, StarRocks, Presto) работают с одними и теми же данными
  • Эластичное масштабирование: Возможность независимо увеличивать/уменьшать compute и storage ресурсы

Реализация Shared-Data в нашем проекте

Компоненты архитектуры

Слой хранения (Shared Storage)

  • S3-совместимое объектное хранилище (Ozone)
  • Единое хранилище для всех данных
  • Поддержка различных классов хранения
  • Масштабируемость и отказоустойчивость

  • Apache Iceberg - табличный формат

  • ACID-транзакции
  • Schema evolution
  • Версионирование данных
  • Поддержка временных снимков (snapshots)

Слой вычислений (Compute Engines)

  • Apache Spark - обработка больших данных
  • StarRocks - аналитическое хранилище
  • JupyterHub - интерактивная разработка
  • Airflow - оркестрация процессов

Преимущества архитектуры

Экономическая эффективность

  • Операционные затраты вместо капитальных
  • Оплата по факту использования ресурсов
  • Оптимальное использование вычислительных мощностей

Технические преимущества

  • Независимое масштабирование: Compute и storage масштабируются независимо
  • Эластичность: Быстрое выделение и освобождение ресурсов
  • Единый источник истины: Все движки работают с одними данными
  • Снижение перемещения данных: Минимизация ETL-процессов

Работа с данными в Shared-Data архитектуре

Доступ к данным через Iceberg

Все данные хранятся в S3 в формате Iceberg, что обеспечивает:

-- StarRocks работает с данными через Iceberg External Catalog
CREATE EXTERNAL CATALOG iceberg_catalog
PROPERTIES (
    "type" = "iceberg",
    "iceberg.catalog.type" = "rest",
    "iceberg.catalog.uri" = "http://proxy-adapter-rest-fixture.platform-ldap.svc.cluster.local:8000"
);

Мультитенантность

Архитектура поддерживает работу с несколькими тенантами:

  • Изоляция данных: Каждый тенант имеет свой S3 бакет
  • Общие вычислительные ресурсы: Kubernetes namespace с квотами
  • Единая точка доступа: Iceberg REST catalog для всех тенантов

Правила именования

Для обеспечения корректной работы в multi-tenant окружении:

  • Базы данных должны содержать имя тенанта: {tenant_name}_database
  • Таблицы следуют шаблону: s3a://{tenant_name}/{database_name}/{table_name}
  • S3 бакеты соответствуют именам тенантов

Интеграция компонентов

StarRocks с Iceberg

StarRocks напрямую работает с данными в Iceberg через внешние каталоги:

-- Запросы к данным Iceberg без перемещения
SELECT * FROM iceberg_catalog.tenant_database.table_name;

-- Объединение данных из разных источников
SELECT * FROM iceberg_catalog.data JOIN internal_table ON condition;

Spark с Iceberg

Spark использует Iceberg для обработки данных:

# Конфигурация Spark для работы с Iceberg
configuration = {
    "spark.sql.catalog.wh": "org.apache.iceberg.spark.SparkCatalog",
    "spark.sql.catalog.wh.type": "rest",
    "spark.sql.catalog.wh.uri": "http://rest-catalog-service:8000",
    "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
}

Единая аутентификация

  • Keycloak - централизованная аутентификация
  • OAuth2 - для доступа к Iceberg REST catalog
  • LDAP - интеграция с корпоративной инфраструктурой

Сравнение с традиционной архитектурой

Аспект Hadoop (традиционная) LakeHouse (Shared-Data)
Архитектура Связанные compute и storage Раздельные compute и storage
Масштабируемость Вертикальная Горизонтальная (независимое scaling)
Управление ресурсами Жесткое выделение Эластичное распределение
Стоимость Капитальные затраты Операционные затраты
Гибкость Ограниченная Высокая

Практические аспекты

Производительность

  • Локальность вычислений: Оптимизация запросов к данным в S3
  • Кэширование: StarRocks кэширует метаданные для ускорения запросов
  • Параллельная обработка: MPP-архитектура StarRocks для параллельного выполнения

Надежность

  • Репликация данных: Автоматическая репликация в S3
  • Отказоустойчивость: Множественные экземпляры компонентов
  • Резервное копирование: Снапшоты Iceberg для восстановления

Безопасность

  • Изоляция тенантов: Раздельные S3 бакеты и неймспейсы Kubernetes
  • RBAC: Ролевое управление доступом через Keycloak
  • Шифрование: Данные в S3 и при передаче

Примеры использования

Аналитика в реальном времени

-- StarRocks выполняет аналитические запросы к актуальным данным в Iceberg
SELECT customer_id, SUM(order_amount) as total
FROM iceberg_catalog.sales_orders
WHERE order_date >= CURRENT_DATE()
GROUP BY customer_id
ORDER BY total DESC;

Обработка больших данных

# Spark обрабатывает большие объемы данных в Iceberg
df = spark.sql("""
    SELECT product_category, AVG(price) as avg_price
    FROM iceberg_catalog.products 
    WHERE created_date >= '2024-01-01'
    GROUP BY product_category
""")

Архитектура Shared-Data обеспечивает гибкую, масштабируемую и экономически эффективную платформу для работы с большими данными, объединяя преимущества data lakes и data warehouses. ```