Tohum

Сквозной playbook разработки IoT-продуктов — Этап 2: Системная архитектура

Иллюстрация: датчики питают устройство, устройство общается с облаком, облако обслуживает панель пользователя

План на бумаге прежде, чем строить

Переход к предыдущему разделу: Этап 1

Архитектурные решения — самые дешёвые в принятии и самые дорогие в исправлении ошибок, поэтому Этап 2 происходит на бумаге. С готовыми требованиями из Этапа 1 на руках именно здесь вы создаёте высокоуровневый план их выполнения. Думайте о системной архитектуре как о проектировании города до постройки домов и дорог: вы решаете, где пройдут магистрали и мосты, до заливки бетона. В IoT-проекте это значит набросать всю систему на бумаге или доске (цифровая «бумага» тоже подходит) до любой пайки или написания кода. Этот этап — о мышлении в масштабе: ключевые решения принимаются сейчас, и они сформируют дизайн позже. К концу Этапа 2 у вас будет ясный чертёж вашего IoT-продукта, а чертежи менять гораздо дешевле, чем печатные платы.

Визуализируйте всю систему блок-диаграммой

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

Эта цепочка — сквозной путь данных. Датчик собирает данные и передаёт их MCU. Микроконтроллер может выполнить некоторую обработку, затем использует беспроводное радио (Wi-Fi, Bluetooth, LoRa и т.д.) для отправки данных на облачный сервер. Сервер хранит или анализирует данные и делает их доступными пользовательскому интерфейсу — веб-дашборду или мобильному приложению. С разложенным потоком вся команда видит все части одним взглядом и понимает, как данные путешествуют по системе.

Не переживайте о навыках рисования — простых прямоугольников и стрелок достаточно. Цель — ясность. Блок-диаграмма — это карта общего плана вашего IoT-«города»: она показывает ключевые компоненты и их взаимодействие и предотвращает недопонимания вроде того, что один человек считает, будто устройство общается напрямую с приложением на телефоне, а вы задумывали путь через облачный API. Когда все видят одну и ту же карту, потом меньше людей теряется.

Решения о разбиении: кто что делает (и где)?

С нарисованной системой следующий шаг — разбиение (partitioning): решение, где живут какие обязанности. Кто что делает: какие задачи относятся к железу/устройству, какие — к firmware, а какие — к облаку или серверной стороне. Эти решения влияют на производительность, стоимость, сложность и безопасность.

Несколько примеров решений о разбиении в IoT-системе:

Разбиение — это акт балансировки: каждая часть системы должна заниматься тем, что у неё получается лучше всего. Маленький датчик на батарее хорош в сборе данных и лёгкой обработке; тяжёлые вычисления принадлежат облачному серверу с запасом мощности. И наоборот, если приложению нужен очень быстрый отклик или работа без интернета, больше интеллекта уходит на edge. Универсального ответа нет — компромиссы вытекают из ваших требований Этапа 1.

Итерировать эти выборы — совершенно нормально. Вы можете начать с «наше устройство будет делать всё — предобработку, шифрование, принятие решений», а затем понять, что выбранный MCU не тянет нагрузку или его память слишком мала. Это понимание может сместить задачи в облако. Или наоборот: обработка, запланированная для облака, переезжает на устройство, потому что сетевая задержка — проблема. Поймать эти проблемы на бумаге гораздо дешевле, чем обнаружить их после того, как код написан или изготовлена PCB, не способная поддержать firmware. Потратьте время на то, чтобы хорошо разделить обязанности.

Выбор технологий: правильные инструменты для каждой части

С блок-диаграммой и разбиением на месте пора переходить к выбору технологий: решению, какие конкретные технологии или компоненты будут в каждом блоке, — или хотя бы сужению вариантов. Думайте об этом как о выборе материалов для каждой части здания: стальной или деревянный каркас, кирпичные или бетонные стены. В терминах IoT ключевые соображения:

Выбор технологий на архитектурном этапе держит части совместимыми друг с другом и с требованиями и позволяет грубо проверить стоимость и осуществимость. Если вам «вероятно» нужен high-end MCU и конкретное дальнобойное радио, вы можете прикинуть, укладывается ли суммарная стоимость в бюджет и могут ли детали работать вместе (нужные интерфейсы? поддержка драйверов?). Вы можете обнаружить, что понравившийся радиомодуль сочетается только с определённым семейством MCU или требует внешнего MCU, — хорошо знать это сейчас.

Также держите в голове энергопотребление и размер. Крошечное устройство на батарее (носимое, удалённый датчик) может вынудить взять system-on-chip, интегрирующий MCU + радио, ради экономии места и энергии. Очень чувствительное к цене устройство может потянуть в сторону все-в-одном модуля, объединяющего датчик, MCU и радио. Это этап, где эти варианты жонглируются на бумаге, чтобы увидеть, какой стек лучше всего подходит проекту.

Анализ рисков и стоимости: выявляйте потенциальные подводные камни рано

Даже на этом этапе хороший архитектор начинает составлять список рисков и затрат, привязанных к выбранному дизайну. Отметить их сейчас лучше, чем обнаружить позже. Что учесть:

Анализ рисков и стоимости на Этапе 2 означает вход в разработку с открытыми глазами. Если самая рискованная часть — пользовательский алгоритм машинного обучения на устройстве, займитесь ей первой или следите за ней пристально. Если самый дорогой компонент — некий датчик, будьте осторожны с бюджетом в других местах. Ни один продукт не свободен от рисков, но проактивное планирование — то, что отличает спокойные проекты от авралов в последнюю минуту.

Ясное документирование архитектуры

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

Ключевые способы зафиксировать и донести архитектуру:

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

«Проектируй дважды, строй один раз»: экономьте время ранним планированием

В инженерии есть мантра: «проектируй дважды, строй один раз». Поймать и исправить проблемы в дизайне на бумаге гораздо дешевле, чем исправлять их в построенном продукте, — в этом вся философия Этапа 2. Передвигать прямоугольники и стрелки на диаграмме гораздо менее больно, чем перезапускать PCB или переписывать модуль firmware, потому что исходный план оказался порочным.

Используйте этот этап, чтобы свести всю команду на одну страницу рано. Архитектура мультидисциплинарна: инженеры по железу, разработчики firmware, инженеры облака/backend, продакт-менеджеры. У каждого должен быть голос в review, так что поощряйте обсуждение. Инженер облака может сказать: «Если бы устройство помечало каждое показание меткой времени перед отправкой, моя серверная сторона была бы проще» — маленькая просьба, если вы знаете о ней заранее. Дизайнер железа может заметить: «Мы используем два датчика, но третий позволил бы измерять качество воздуха — оставим место для него?» Такие озарения ведут к маленьким архитектурным поправкам или хотя бы к резервам для будущего расширения, которые никогда не всплывают, когда команды работают изолированно. Сгладить точки интерфейсов сейчас лучше, чем момент «мы это уже не можем изменить» позже.

Тщательность здесь строит уверенность. К концу Этапа 2 у вас должен быть ясный чертёж: дизайн верхнего уровня, показывающий, как вы намерены выполнить требования Этапа 1. Как архитектурный чертёж здания, он пока не выбирает цвета краски или дверные ручки — но этажи, двери, окна и планировка комнат решены. В терминах IoT: вы знаете, какие есть устройства, как они соединяются, какие данные куда текут и примерно какая технология делает работу.

С этим чертежом на руках вы можете переходить к детальному дизайну и реализации с уверенностью. Вы создали карту для IoT-путешествия, так что заблудиться гораздо менее вероятно. На Этапе 3 и далее — строя железо, пиша код — вы будете постоянно возвращаться к этой архитектуре. А когда придут изменения (они всегда приходят), обновляйте архитектурный документ, чтобы он оставался надёжным справочником.

Коротко: Этап 2, системная архитектура, — это где вы настраиваете проект на успех. Он выравнивает команду, выставляет риски рано и даёт ясный план. Вы спроектировали это — возможно, дважды, — так что теперь можете построить один раз и построить правильно. Держите чертёж близко; он будет вашей Полярной звездой на всём оставшемся пути.