Перейти к содержимому
TelegramGitHub

Fundamentals of Data Engineering, глава 4: Выбор технологий

Главная мысль: сначала архитектура, потом технологии. Архитектура — это что, зачем и когда. Инструменты — это как. Хороший инструмент добавляет ценность продукту данных и бизнесу.

Шесть шагов выбора технологии: от архитектуры до плана выхода

Книга называет одиннадцать факторов:

ФакторКоротко
Team size and capabilitiesМалой команде нужны managed и SaaS. Не копируйте сложные системы больших компаний (cargo-cult engineering)
Speed to marketБыстрее выпускайте ценность. Долгие споры о выборе вредны
InteroperabilityНасколько легко технологии соединяются. Стандарты: JDBC, ODBC. REST не стандарт, у каждого API свои особенности
Cost and business valueTCO, TOCO, FinOps
Immutable и transitoryЧто стабильно, а что быстро уходит
LocationOn-prem, cloud, hybrid, multicloud
Build vs buyСтроить или использовать готовое
Monolith vs modularОдин продукт или набор модулей
Serverless vs serversАбстракция против контроля
Optimization and benchmarksНе верьте вендорским тестам без проверки
UndercurrentsБезопасность, data management, DataOps, архитектура, software engineering

Учитывайте навыки команды. Изучение нового инструмента стоит времени. Часто его так и не доводят до production.

Три взгляда на стоимость и сдвиг от capex к opex

Total cost of ownership — полная стоимость проекта. Входят прямые затраты (зарплаты, счёт AWS) и косвенные (overhead).

Вид затратЧто это
CapexКрупные вложения заранее: железо, ЦОД. Окупаются годами
OpexПлатежи по мере использования. Гибко. Легче отнести к проекту

Книга советует подход opex-first: облако и pay-as-you-go. Железо быстро стареет и не масштабируется.

Total opportunity cost of ownership — цена упущенных возможностей. Выбрав стек A, вы отказались от стеков B, C и D. Вопросы:

  • Насколько быстро и дёшево можно уйти со стека A?
  • Пригодится ли накопленный опыт в следующем поколении технологий?
  • Можно ли заменять отдельные компоненты?

Негибкие технологии авторы сравнивают с bear traps: войти легко, выйти трудно.

FinOps — это не только экономия. Цель: получить больше бизнес-ценности от расходов на облако. Быстрые эксперименты и динамическое масштабирование — часть этой ценности.

  • Immutable технологии живут десятилетиями (эффект Lindy): object storage, сеть, SQL, bash.
  • Transitory технологии приходят и уходят. Пример: Hive уступил место Presto и другим.
  • Совет: стройте основу на immutable технологиях. Transitory инструменты ставьте вокруг неё.
  • Пересматривайте выбор раз в два года.
  • Планируйте под текущие нужды и ближайшие планы. Не переусложняйте ради далёкого будущего.

Сравнение on-prem, cloud, hybrid и multicloud и риск egress fees

ВариантОсобенности
On-premСвоё железо. Вы отвечаете за ремонт, обновления и запас под пики. Всё ещё обычен для зрелых компаний
CloudАренда. IaaS (VM), PaaS (управляемые БД, Kubernetes), SaaS (готовые платформы). Быстрый старт, посекундная оплата
HybridЧасть нагрузки остаётся у вас. Удобный пример: аналитика в облаке, данные идут в одну сторону, egress минимальный
MulticloudНесколько облаков. Причины: близость к клиентам, лучшие сервисы. Минусы: egress, сложность сети и безопасности

Serverless — автоматическое масштабирование от нуля, оплата по использованию. Серверы при этом есть, но вы их не видите.

  • Облако не равно on-prem. Перенос серверов один в один (lift and shift) разумен как первый шаг. Но долго работающие VM в облаке дороже, чем свои.
  • Чтобы получить выгоду: autoscaling, reserved и spot instances, serverless.
  • Облако продаёт не только ресурсы, но и надёжность, долговечность, предсказуемость. Архивное хранение дёшево, но дорого читать.
  • Data gravity: загрузка данных дешёвая или бесплатная, вывод (egress fees) дорогой. Это связывает вас с вендором.
  • Выбирайте технологии для настоящего, но имейте escape plan.
  • Не берите hybrid или multicloud без веской причины: регуляции, клиенты на разных облаках, особые сервисы. Иначе выбирайте одно облако.
  • Любая технология, даже open source, создаёт некоторый lock-in.

Пример Dropbox часто приводят как довод за возврат на свои серверы. Книга предупреждает: вы не Dropbox. Dropbox хранит эксабайты, имеет огромный трафик и специальный продукт. Возврат на своё железо имеет смысл при масштабе порядка эксабайта данных или терабит в секунду трафика, или когда egress — главная статья расходов.

Правило: стройте своё, только если это даёт конкурентное преимущество. Иначе используйте готовое. Избегайте undifferentiated heavy lifting.

Аналогия книги: вы покупаете шины, а не делаете их из сырья. Команды, написавшие свою БД, зря потратили время.

Сегодня программное обеспечение чаще выбирают снизу вверх, а не только через IT-отдел.

Тип решенияЧто проверять
Community OSSMindshare, зрелость, поддержка сообщества, скорость ответа на issues, спонсоры, roadmap, ваши ресурсы на хостинг
Commercial OSS (COSS)Ценность управляемой версии, условия поддержки, цены, финансы компании, вклад в open source. Примеры: Databricks, Confluent, dbt Labs
Независимый proprietary продуктInteroperability, документация, цены и сценарии нагрузки, срок жизни компании
Proprietary сервис облакаЦена и качество против OSS, скидки на reserved capacity, привязка к облаку

Рекомендации книги:

  • По умолчанию выбирайте OSS и COSS. Настраивайте свой код только там, где это двигает бизнес.
  • Не считайте внутренние операционные затраты бесплатными. Лучше обучить команду работе на managed платформе.
  • Заранее выясните, кто утверждает бюджет. Время съедает сделки.
MonolithModular
ПлюсыПросто понять, один инструмент, меньше переключенийЛучший инструмент на каждый шаг, лёгкая замена, Parquet в object storage читают разные движки
МинусыХрупкость, долгие релизы, трудная изоляция нагрузок, тяжёлый уход от вендораБольше систем, сложнее interoperability, нужна orchestration

Пример из книги: монолитный ETL работал 48 часов. При любой ошибке всё запускали заново.

Distributed monolith — распределённая система с общим кодом и зависимостями. Примеры: Hadoop-кластер, Airflow (все executor запускают один код и зависимости). Решения: ephemeral infrastructure (отдельный кластер на задачу, как EMR и Dataproc) и контейнеры.

Совет: проектируйте под interoperability, избегайте bear traps, сохраняйте гибкость.

Serverless (AWS Lambda, BigQuery) даёт быстрый старт и оплату по использованию. Риск: на большом числе событий стоимость быстро растёт, особенно при одном событии на вызов.

Контейнеры (Docker, Kubernetes) — лёгкая изоляция зависимостей. Они частично решают проблему distributed monolith. Но контейнеры изолированы хуже, чем VM. Кластер подходит только для среды взаимного доверия.

Если используете серверы:

  • ожидайте отказов, не делайте special snowflake серверов;
  • применяйте кластеры и autoscaling;
  • управляйте инфраструктурой как кодом (Terraform, CloudFormation);
  • для сложных зависимостей берите контейнеры.

Когда serverless подходит:

КритерийВопрос
Размер задачиПростые задачи — да. Много памяти и CPU — нет
Частота и длительностьЕсть лимиты платформы
СетьМожет не поддерживать VPC и firewall
Язык и runtimeТолько поддерживаемые
СтоимостьМало событий — дёшево. Много — дорого

Совет: сначала serverless, потом контейнеры и серверы, когда вы выросли.

Книга предупреждает о нечестных сравнениях:

  • слишком маленькие наборы данных, которые помещаются в кэш;
  • сравнение систем с разной моделью оплаты (постоянный кластер и посекундная оплата);
  • асимметричная оптимизация: разные схемы и настройки для разных систем.

Проверяйте на своих данных и своих запросах.

  • Data management: спросите вендора о защите от утечек, GDPR и CCPA, месте хранения, контроле качества.
  • DataOps: для OSS мониторинг и деплой на вас. Для managed смотрите SLA, оповещения и прозрачность инцидентов.
  • Data architecture: избегайте лишнего lock-in, обеспечьте interoperability и ROI.
  • Software engineering: покупайте решённые задачи, например коннектор БД в облачное хранилище. Свои силы вкладывайте в то, что отличает бизнес.

Apache Airflow создан в Airbnb в 2014 году. Плюсы: активный проект, большое сообщество, много managed вариантов. Минусы: scheduler и backend БД плохо масштабируются, нет схем, lineage и каталога, сложно тестировать. Альтернативы: Prefect и Dagster.

Термин (EN)Что значит
TCOПолная стоимость владения, прямая и косвенная
TOCOЦена упущенных возможностей из-за выбора
Capex / OpexЗатраты заранее / затраты по мере использования
FinOpsУправление расходами в облаке вместе с бизнесом
Immutable / transitoryДолгоживущие / быстро устаревающие технологии
Lindy effectЧем дольше технология живёт, тем дольше проживёт
Data gravityДанные трудно перенести: egress дорог
Egress feesПлата за вывод данных из облака
COSSКоммерческая версия open source (управляемый сервис)
Distributed monolithРаспределённая система с общим кодом и зависимостями
Lift and shiftПеренос серверов в облако без изменений
ServerlessАвтомасштабируемые сервисы без управления серверами
  • Сначала нарисуйте архитектуру и требования. Потом выбирайте инструменты.
  • Перед покупкой оцените TCO и TOCO. Спросите: как мы отсюда выйдем?
  • Малая команда выбирает managed сервисы. Своё пишут только для конкурентного преимущества.
  • При переносе в облако не оставляйте VM работать 24/7. Включите autoscaling, spot, reserved или serverless.
  • Моделируйте стоимость serverless при росте событий и при worst case, например атаке ботов.
  • Запускайте бенчмарки на своих объёмах. Не верьте цифрам вендора.
  • Раз в два года пересматривайте стек. Держите основу на immutable технологиях.
  1. Чем TCO отличается от TOCO? Почему авторы называют TOCO слепым пятном?
  2. Когда имеет смысл строить своё решение, а когда покупать?
  3. Что такое distributed monolith? Какие два способа его смягчить?
  4. Почему пример Dropbox не подходит большинству компаний?

Предыдущая: Хорошая архитектура данных. Следующая: Источники данных.