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

Стройте для сегодняшнего дня. Планируйте на завтра. Планируйте на случай сбоя.

Также доступно на 28 языках

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A finished sunlit stone-and-timber pavilion with a faint white wireframe of a planned rooftop deck, pergola and staircase rising along the right side.
Изображение создано с помощью ИИ

Модуль 5 из 7 главы Думать как архитектор данных, глава 1 курса Data Architect. Каждый модуль самостоятелен. Назад: Архитектура — искусство компромиссов · Далее: Знайте свои инструменты: девять вопросов

Вопрос, на который отвечает этот модуль: Как проектировать под сегодняшние требования, планируя при этом рост и сбои?

Одна из самых легких ошибок в архитектуре — проектировать только под требования, которые лежат перед вами. У нас есть проект, бэклог и требования. Мы строим то, что им отвечает. Оно работает, и мы объявляем победу. Через полгода меняется бизнес, или вырастают данные, или другое подразделение хочет этим пользоваться, или мы покупаем компанию, или нужно интегрировать новую систему, или ломается то, к чему никто не готовился.

Ничто из этого не должно удивлять архитектора. Мы не можем предсказать все, что произойдет, но можем проектировать, зная, что что-то обязательно произойдет. Поэтому я смотрю на архитектуру с трех сторон:

Стройте для сегодняшнего дня. Планируйте на завтра. Планируйте на случай сбоя.

Нужны все три.

Три взгляда Три взгляда рядом. Стройте для сегодняшнего дня: работает ли это сегодня? Знайте реальные объемы и пользователей, как быстро меняются данные, кому они нужны и зачем. Планируйте на завтра: сможет ли это вырасти завтра? Столбики показывают 10 млн записей сейчас, 13 млн в следующем году, 17 млн через год и 22 млн еще через год, при росте 30 % в год; растите, добавляя, а не меняя. Планируйте на случай сбоя: что будет, когда это сломается? Знайте, что может сломаться, как мы это заметим и как восстановимся. Стройте для сегодняшнего дня Работает ли это сегодня? ЗНАЙТЕ Реальные объемы и пользователей Как быстро меняются данные Кому они нужны и зачем Планируйте на завтра Сможет ли это вырасти завтра? ПРИ 30 % В ГОД 10M Сейчас 13M +1 год 17M +2 года 22M +3 года РАСТИТЕ Добавляя, а не меняя Планируйте на случай сбоя Что будет, когда это сломается? ЗНАЙТЕ Что может сломаться Как мы это заметим Как мы восстановимся Стройте для сегодняшнего дня. Планируйте на завтра. Планируйте на случай сбоя. Вам нужны все три. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Архитектура начинается с проблемы, которая у нас действительно есть. Звучит очевидно, но архитекторы могут совершить ошибку, противоположную краткосрочному мышлению: мы можем переусложнить архитектуру. А что, если мы купим двенадцать компаний, у нас будет миллиард клиентов, мы выйдем в 40 стран и каждой системе понадобится интеграция в реальном времени? Может быть. Но это реальные возможности или мы выдумываем проблемы? Архитектура — это не построение самой изощренной системы, какую можно вообразить. Это построение уместной.

Так что начинайте с сегодняшнего дня: что нужно бизнесу, каковы реальные объемы, пользователи и транзакции, как часто меняются данные и как быстро им нужно перемещаться, кому нужен доступ, откуда данные приходят и куда уходят. И самое главное: почему? Эти ответы дают нам что-то конкретное для проектирования.

Требования, которые вам дали, — не обязательно все ваши требования. Почти всегда есть подразумеваемые требования.

Бизнес говорит: «Нам нужны данные клиентов в Salesforce». Хорошо. Значит, кто-то должен владеть этими данными и решить, насколько свежими они должны быть. Нам нужно знать, что будет, когда система-источник недоступна, как мы заметим, что синхронизация сломалась, и какая сторона побеждает, когда Salesforce и источник расходятся. Нам нужен срок хранения, модель доступа, решение о чувствительных полях и способ исправлять плохие данные.

Ничего из этого не было в пользовательской истории. И все это — архитектура. Большая часть того, чтобы стать архитектором, — научиться распознавать вопросы, которые еще не были заданы.

Я постоянно подталкиваю архитекторов к количественным оценкам. Не говорите мне, что данных много; скажите сколько. Десять тысяч, десять миллионов, сто миллионов, миллиард? Это совсем разные архитектуры. Не говорите мне, что интеграция запускается часто: каждый час, каждую минуту, тысячу раз в секунду? Не говорите мне, что мы быстро растем. Насколько быстро?

Когда лучшей цифры у меня нет, моя базовая оценка — 30 % роста в год. Это не прогноз; это способ заставить подумать. Если мне говорят, что сегодня у нас 10 млн записей, я не хочу, чтобы обсуждение остановилось на 10 млн. При 30 % в год у нас будет примерно 13 млн в следующем году, 17 млн через год и около 22 млн еще через год. Вот теперь давайте поговорим о проекте. Если бизнес говорит мне, что 30 % — это смешно, отлично: назовите реальную цифру. Смысл в том, чтобы сделать рост частью обсуждения архитектуры.

Я называю это «числом нулей» Steve (Steve’s Number of Zeros). Один лишний ноль может полностью изменить вашу архитектуру. Десять тысяч, сто тысяч, миллион, десять миллионов, сто миллионов: функция не изменилась, и требование, может быть, тоже, а архитектура — может.

Помните записи на прием из модуля 1? Давайте подставим реальные цифры. Более 1 200 точек, 100 записей на точку в день, шесть дней в неделю, около 305 дней в году. Это более 36 млн записей на прием за первый год. Каждый визит создает две записи, значит, более 73 млн записей. Теперь храните историю за пять лет при росте 30 % в год — и получится более 650 млн записей. Та же функция, то же требование. Пара лишних нулей — и совсем другая архитектура.

Поняв сегодняшний день, я смотрю вперед: что с достаточной вероятностью изменится? Объем — часть ответа, но завтра — это не только больше. Это может значить и по-другому: больше продуктов, подразделений и стран; другие требования к конфиденциальности; новые каналы и интеграции; слияние или поглощение; новая стратегия мастер-данных или аналитическая платформа; ИИ-агент, потребляющий информацию, которая проектировалась только для людей.

Вот почему мне так важно, может ли архитектура расти за счет добавления, а не постоянных изменений. Если бизнес добавит продукт, вместит ли его модель? Если данные понадобятся другой системе, сможем ли мы аккуратно их предоставить? Если объем резко вырастет, есть ли нам куда двигаться? Если изменится структура бизнеса, придется ли нам разносить модель данных на части? Мы не пытаемся идеально предсказать будущее. Мы пытаемся не загнать себя в угол.

Здесь нужен баланс. Планировать на завтра не значит строить завтрашнюю систему сегодня. Если у нас 100 000 записей, а через пять лет может быть 100 млн, это не значит, что мы прямо сейчас строим архитектуру на 100 млн записей. Это может принести затраты и сложность, которые нам пока не нужны.

Вопрос, на который я хочу получить ответ: может ли сегодняшняя архитектура развиться в завтрашнюю? Если можно начать просто, с ясным путем вперед, это часто лучше, чем платить за сложность на годы раньше. Опасно не начинать с малого. Опасно начать там, откуда некуда двигаться.

А теперь часть, о которой никто не любит говорить: все ломается. Я никогда не проектировал систему, где каждый компонент всегда оставался доступен, каждая интеграция проходила успешно, каждый пользователь вводил идеальные данные, а каждая внешняя система вела себя точно по документации. Так что не проектируйте такую систему.

Спросите, что может сломаться, а затем — что будет, когда это случится. Интеграция падает по тайм-ауту. API отклоняет запрос. Ночная загрузка обрабатывает 800 000 записей и падает на 200 000. Система-источник отключается. Пользователь вводит недопустимые данные. Внешний идентификатор встречается дважды. Вышестоящая система меняет формат значения, не меняя имя поля. Процесс успешно проходит в одной системе и падает в другой. Это не редкие пограничные случаи. Так выглядит продакшн.

Частичный успех — это все равно сбой, который нужно понять

Заголовок раздела «Частичный успех — это все равно сбой, который нужно понять »

Частичные сбои особенно опасны в архитектуре данных. Представьте, что вы перемещаете миллион записей, и процесс сообщает, что завершился. Отлично. Но пришел ли миллион или 999 997, и каких трех не хватает? Может быть, 200 000 не прошли, какие-то были созданы дважды, или все пришло, но часть полей не прошла преобразование.

«Задание завершено» — не то же самое, что данные верны. Архитектор данных думает о сверке: как узнать, что должно было произойти, что произошло на самом деле, и в чем разница? И что мы с этим делаем?

Вот что я делаю, когда системы становятся сложными. Записи идут из A в B, слева направо. Затем B отправляет кое-что обратно: подтверждение для каждой записи, которую она получила и сохранила. Теперь A может сравнить то, что отправила, с тем, что подтверждено. Если у каждой записи есть подтверждение, прогон прошел успешно. Если каких-то подтверждений нет, значит, не прошел, что бы ни говорил статус задания, и мы точно знаем, за какими записями идти: повторить их, передать человеку или поднять тревогу.

Нет подтверждения — нет успеха Система A отправляет 1 000 записей в систему B слева направо. Система B отправляет обратно в систему A подтверждения для 997 сохраненных. Система A сверяет отправленное с подтвержденным и находит 3 недостающих подтверждения. Каждая недостающая запись идет одним из трех путей: повторить, то есть безопасно отправить снова; передать человеку, когда нужно исправление; или поднять тревогу, когда нельзя ждать. записи подтверждения сравнивает находит Система A Отправляет 1 000 записей Собирает подтверждения Система B Получает и сохраняет 997 Подтверждает каждую сохраненную Сверка сравнить отправленное с подтвержденным 3 недостающих подтверждения отправлено 1 000, подтверждено 997 Повторить отправить снова, безопасно Передать человеку когда нужно исправление Тревога когда нельзя ждать Нет подтверждения — нет успеха: каждое недостающее подтверждение — это запись, которую нужно повторить, передать или поднять по ней тревогу. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Когда случается сбой, я хочу знать, что система делает дальше: повторяет ли попытку, автоматически или нет; что будет, если одна и та же транзакция обработается дважды; куда попадают записи со сбоем и продолжают ли хорошие записи идти мимо плохой; кто получает оповещение, с какой информацией и как он воспроизводит сбой; и как пользователь узнает, что что-то пошло не так.

И самое главное: можем ли мы восстановиться, не сделав проблему хуже? Стратегия повторов, которая создает дубликаты данных, — так себе стратегия восстановления. Хорошая архитектура предполагает сбои и дает нам путь назад.

Планировать на случай сбоя без мониторинга — это не совсем планирование. Если интеграция падает в 02:00 и никто не замечает этого, пока через три дня не позвонит клиент, у нас не было эксплуатационной архитектуры. У нас была надежда.

Решите, что должно быть наблюдаемым: запустился ли процесс, сколько он длился, сколько записей обработано, сколько прошло успешно и сколько со сбоем? Не отличаются ли объемы внезапно от обычных? Растет ли очередь, увеличивается ли число ошибок? Архитектура не заканчивается, когда развертывание прошло успешно. Кому-то завтра эксплуатировать эту систему, и это часть проекта.

Продолжайте применять эти три взгляда в оставшейся части курса. Когда мы проектируем модель данных: работает ли она сегодня, может ли расти завтра и что будет, когда данные неверны или неполны? Интеграцию: перемещает ли она сегодняшние данные, справится ли с завтрашним объемом и системами и что будет, когда одна из сторон недоступна? Большие объемы данных: что у нас есть сегодня, куда движутся цифры и как мы восстанавливаемся, когда крупная операция удается лишь частично?

Технологии меняются от главы к главе. Вопросы — нет.

Разработчик иногда может посмотреть на требование и спросить: «Это работает?» Архитектор должен спросить больше: работает ли это сегодня, будет ли работать завтра и что будет, когда это вообще не работает? Эти три вопроса выводят нас за пределы реализации, в жизнь системы.

Вы не предскажете каждое будущее требование и не предотвратите каждый сбой. Цель не в этом. Цель — построить то, что уместно для того, что мы знаем сегодня, оставить себе куда двигаться завтра и иметь план на случай, когда реальность не хочет сотрудничать.

Стройте для сегодняшнего дня. Планируйте на завтра. Планируйте на случай сбоя. Мы будем пользоваться этими тремя взглядами снова и снова.

  • Каковы реальные объемы и рост и какие цифры изменили бы проект.
  • Какие подразумеваемые требования бизнес еще не высказал.
  • Как сегодняшний проект может развиться в завтрашний, не строя завтрашнюю систему сегодня.
  • Что будет, когда что-то сломается: восстановление, сверка и мониторинг.