Частые ошибки проектирования data-платформ — симптомы, причины и пошаговые решения.
Выбор Lambda Architecture по умолчанию без анализа реальных требований к латентности. Если задержка до нескольких минут допустима, Kappa Architecture с единым streaming-pipeline значительно проще в поддержке.
Все источники данных обрабатываются в одном монолитном процессе без разделения на независимые единицы. Отсутствует fault isolation — сбой любого этапа каскадирует на весь pipeline.
Аналитические запросы выполняются напрямую к production базе вместо создания отдельного аналитического хранилища. OLTP-база оптимизирована для транзакций, не для сканирования больших объёмов данных.
Отсутствие промежуточного слоя абстракции между производителями и потребителями данных. Producer напрямую пишет в таблицу consumer или использует point-to-point интеграцию без event bus.
Все данные перечитываются и перезаписываются при каждом запуске ETL, потому что не реализован механизм отслеживания изменений (watermark, CDC timestamp, audit columns).
Избыточное партиционирование по колонкам с высокой кардинальностью (user_id, timestamp) создаёт тысячи директорий с файлами в несколько килобайт. Overhead метаданных превышает выигрыш от partition pruning.
Все слои Data Lake (Raw, Curated, Serving) используют одинаковый формат без учёта требований каждого слоя. Raw-данные должны сохранять оригинальный формат для аудита, а serving-слой — оптимизированный для чтения.
Streaming-pipeline использует processing time вместо event time и не настроены watermarks. Данные, поступившие с задержкой (out-of-order events), отбрасываются или попадают в неправильное окно.
Streaming consumer не обрабатывает ошибки десериализации и бизнес-валидации. Сбой на одном сообщении вызывает бесконечный retry или молчаливый skip без сохранения проблемного сообщения.
Pipeline не ограничивает скорость потребления при превышении пропускной способности обработки. Отсутствуют механизмы противодавления между источником и обработчиком.
Классическая Star Schema оптимизирована для append-only загрузки и read-heavy аналитики. При частых обновлениях (>10K/мин) MERGE-операции на больших fact-таблицах становятся узким местом.
Отсутствие архитектуры слоёв данных. Все трансформации выполняются в одном шаге — от raw-данных до финальных отчётов. Нет промежуточных staging-таблиц и переиспользуемых data marts.
Не определена стратегия развития схемы данных. Изменения схемы (добавление, удаление, переименование полей) не управляются централизованно и не поддерживают backward/forward compatibility.
Между командой-производителем данных и командой-потребителем нет формального соглашения о схеме, SLA по свежести и полноте данных. Изменения в upstream-системе никому не сообщаются.
Data quality проверки отсутствуют или выполняются только на финальном этапе. Между слоями (Raw → Curated → Serving) нет point-of-check валидации — ошибки обнаруживаются слишком поздно.
Оркестратор (Airflow, Prefect) развёрнут на одном сервере без горизонтального масштабирования. При росте количества DAG и задач single-node становится bottleneck.
Зависимости между DAG реализованы через cron-расписание или проверку наличия файла, а не через событийную модель. Upstream и downstream DAG не знают друг о друге и полагаются на timing.
Метаданные и происхождение данных (lineage) не отслеживаются централизованно. Каждая команда работает изолированно, не имея общего каталога доступных данных и их зависимостей.
Отсутствие автоматизации cost management: нет бюджетов, алертов, auto-shutdown для non-production ресурсов. Стоимость инфраструктуры не привязана к конкретным pipeline и командам.
Feature Store развёрнут изолированно от основной data-платформы. ML-инженеры строят собственные pipeline вместо использования curated-данных из DWH/Lakehouse.