Почему внешние источники ломаются и как это пережить архитектурно
Внешние данные — это всегда нестабильность. Новости, цены, отзывы, каталоги, любые публичные источники. Даже если сегодня всё работает, завтра может сломаться без предупреждения, потому что поведение внешних источников может измениться.
Во-первых, меняется структура страниц и API.
Авторы переименовали поле, поменяли HTML, добавили защиту — и парсер начинает отдавать пустоту или мусор, формально оставаясь “успешным”.
Во-вторых, нестабильность по доступности.
Таймауты, 403, капчи, лимиты по запросам. Иногда это просто пиковая нагрузка на стороне источника, но пайплайну от этого не легче.
В-третьих, данные приходят неравномерно.
Сегодня 10 000 записей, завтра 500. Или наоборот — может быть внезапный всплеск по объему данных, к которому система не готова.
В-четвёртых, шум и дубли. Один и тот же объект приходит под разными ссылками, с разными заголовками и текстом, но по сути это одно и то же событие.
И наконец, могут меняться форматы. Дата может быть “2025-01-10”, “10 января 2025” или “сегодня”. Цена — числом или строкой в разных форматах.
Если не учитывать это в архитектуре, то об этом можно потом сильно пожалеть.
Что помогает принимать и обрабатывать внешние данные так, чтобы можно было спокойно жить и работать? Надо сохранять сырые данные как есть (raw), без попытки сразу привести всё к идеальному виду. Затем делать нормализацию отдельным шагом, чтобы можно было безопасно пересчитать данные при изменениях. И лучше бы иметь карантин для проблемных записей, чтобы они не ломали весь прогон. И неплохо бы версионировать схемы, особенно в нормализованном слое, а также держать дедуп и ключи отдельно от текста, чтобы одинаковые сущности не разъезжались.
Внешние данные лучше заранее воспринимать так, что они могут и будут ломаться. И вопрос не в том, сломается ли источник, а в том, как быстро система восстановится и что при этом потеряет.