Архитектура 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. ```