Все мы знаем про такую полезную штуку в архитектуре приложений как модульность. А веб-дизайнеры знают имя Брэда Фроста, создателя атомарной концепции дизайна на основе идеи русских матрешек увеличивающихся размеров, которые помещаются одна в другую.
При этом, наряду с плюсами, у модульности программных компонентов есть и свой минус — модульность архитектуры не гарантия ее эффективности, и вся конструкция может быть весьма хаотичной. А это, в свою очередь, затрудняет кастомизацию приложения на стороне команд у крупных клиентов и интеграторов, — они теряют время на то, чтобы просто понять, что за модули в приложении, куда и на какой уровень можно поставить свои кастомизированные компоненты.
Почему бы не соединить обе концепции, — модульность и атомарность, — в одну при разработке приложений, упорядочив модульность в виде атомарной био-подобной структуры? По сути, для команды Virto DevLabs эта идея лежала на виду, и надо было только начать использовать ее при разработке приложений.
Хотя Virto Atomic Architecture™ описывает архитектуру open-source платформы электронной коммерции Virto Commerce на основе .NET, но идею атомарной био-подобной архитектуры можно использовать для любых сложных приложений, где есть необходимость глубокой кастомизации на стороне клиентов, используя ограниченный набор компонентов.
Virto Atomic Architecture™ работает согласно такой концепции: самые мелкие программные компоненты (атомы) включаются в более крупные (молекулы), которые, в свою очередь, включаются в еще более крупные (клетки). На четвертом и последнем уровне увеличения появляются условные «организмы», которые состоят из набора клеток.
Примеры паттернов, фреймворков и модулей, используемых в архитектуре приложения, можно посмотреть на странице Virto Commerce Atomic Architecture In Actions.
Таким образом, имея ограниченный набор компонентов, можно в результате их различных комбинаций разработать решение, которое соответствует уникальности бизнеса электронной коммерции у клиента (или в иной рыночной нише).
Наглядно о Virto Atomic Architecture™
Virto Atomic Architecture ™ — это абстрактная модель, которая помогает рассматривать приложение электронной коммерции как в целом, так и как совокупность модулей одновременно. С точки зрения команды разработчиков Virto DevLabs, логика атомарной модели помогает создавать и поддерживать решения, в т.ч. развертывать более качественную и согласованную архитектуру e-commerce у клиентов быстрее. А где, как не в торговле, «Время — деньги».
В Virto Atomic Architecture™ представлены пять уровней:
Атомы
Молекулы
Клетки
Организмы
Облако в дата-центре (среда обитания организмов)
Сравнивая программные модули с атомами, молекулами, клетками и организмами, архитектура решения превращается в композицию самодостаточных модулей, соединенных вместе.
Основная концепция Virto Atomic Architecture™ основана на представлении о структуре приложения электронной коммерции, в которой мельчайшие компоненты (атомы) включены внутрь более крупных элементов (клеток), которые включены в еще более крупные молекулы, и, на последнем этапе расширения, они, в свою очередь, включены в еще более крупные организмы. Организмы представляют собой готовые к запуску приложения электронной коммерции для развертывания в облаке (Microsoft Azure, AWS или другом) в качестве своей среды обитания.
Среди преимуществ, направленных на повышение производительности команд разработки и кастомизации решения — возможность повторного использования и перекомпоновки программного обеспечения, а также в совместной работе трех сторон — Virto в качестве вендора, партнера по внедрению (интегратора) и ИТ-команды заказчика.
Отслеживаемость экземпляров компонентов на любом уровне также дает набор преимуществ, чтобы снизить стоимость владения платформой e-commerce на протяжении всего ее жизненного цикла.
Подробнее о Virto Atomic Architecture™
Сравнивая программные компоненты разного уровня с атомами, молекулами, клетками и организмами, мы можем представить архитектуру решения как композицию самодостаточных модулей, соединенных вместе.
Теперь давайте углубимся в структуру реальной платформы электронной коммерции, состоящей из пяти уровней атомарного дизайна. Мы продолжим этот пост рассказом о каждом уровне архитектуры Virto Commerce.
Уровень атомов в Virto Atomic Architecture™
Атомы — это основные элементы в структуре приложения, обеспечивающие такие функции как модульность, подход «API First», безопасность, события, фоновые задания и другие. С помощью атомов можно составлять более крупные элементы, условно называемые молекулами.
Правила использования атомов для разработчиков и партнеров:
Каждый компонент уровня атомов не должен состоять из других, более мелких компонентов / использует только собственные элементы или компоненты, специфичные для платформы.
Отсутствие прямого доступа в коде к более высокому уровню.
Напрямую не реализуется бизнес-логика для конкретного приложения.
Уровень молекул в Virto Atomic Architecture™
Второй уровень Virto Atomic Architecture™ — это молекулярный уровень. Будучи собранными вместе для получения различных функциональных возможностей, эти условные молекулы состоят из условных атомов.
Молекула — это группа атомов и бизнес-функций, которые работают вместе в соответствии с принципом единой ответственности. Обычно молекула имеет API для связи с другими молекулами и базу данных в качестве постоянного хранилища. Примером молекулы может быть каталог, цены, товарные запасы, поиск, шина событий, веб-хуки и другие.
В рамках платформы электронной коммерции любую молекулу можно представить как программный модуль.
Для некоторых молекул применяется принцип единственной ответственности (single responsibility principle). Примеры:
Каталог — отвечает за таксономию каталога, продукты, вариации и отношения между продуктами.
Цена — несет ответственность только за оценку стоимости продукта.
Webhooks — отвечает за захват событий и их доставку сторонним подписчикам.
Поиск — отвечает за абстракции полнотекстового поиска, указанные выше, с использованием таких систем, как Elasticsearch, Azure Search и др.
На уровне молекул сторонние команды могут создавать свои собственные молекулы, например, создавать компоненты динамической цены, учета лояльности и т. д.
Правила использования молекул:
Создана из одного или нескольких атомов.
Создана по принципу единственной ответственности.
Построена по архитектуре Headless c API и событиями для коммуникации с другими молекулами.
Имеет собственное частное постоянное хранилище.
Поддерживает расширяемость (внедрение, переопределение) из других клеток.
Не имеет прямого доступа к компонентам более высокого уровня.
Уровень клеток в Virto Atomic Architecture™
Когда молекулы помещаются в контекст функционального взаимодействия, такой как цифровой каталог, они становятся «клетками». Термин «клетки» включает атомы и молекулы, необходимые для получения желаемой функциональности.
Клетки — это набор молекул, которые объединены функциональным контекстом в один пакет для реализации полного сценария. Клетки спроектированы как масштабируемые блоки; — разработчики вендора и сторонние команды могут создавать новые экземпляры клеток, поэтому каждая клетка является высокодоступным, высокопроизводительным и изолированным контейнером.
Партнер-интегратор, работающий с Virto Atomic Architecture™ на уровне клеток, фокусируется на агрегировании и оркестровке для реализации бизнес-сценариев с различными клетками.
Примерами ячеек электронной торговли могут быть цифровой каталог, заказ, корзина, профиль пользователя, маркетинг и т. д.
Цифровой каталог — для большинства решений электронной коммерции цифровой каталог должен объединять каталог, цену, инвентарь, поиск и другие ячейки как единое целое и представлять его как API для клиентского приложения.
Заказ — это полнофункциональный компонент заказа с инвентаризацией, налогами, обработкой платежей и т. д. Эта клетка готова для интеграции с ERP через API и программное обеспечение интеграции (middleware). Обычно заказ содержит либо веб-хуки, либо шину событий для упреждающих уведомлений между пакетами.
Virto DevLabs создает предопределенные программные пакеты, комбинируя и собирая вместе модули уровня клеток. Пакеты могут быть расширены или повторно собраны партнером-интегратором или клиентом для создания клиентских пакетов, содержащих модули от Virto, партнера или разработанные самим клиентом.
Как работает сборка пользовательских пакетов? По сути, создается файл конфигурации и указывается, какие модули нужно включить в эти пакеты. Затем предоставляемый заказчикам и партнерам инструментарий от Virto предварительно упакует и подготовит пакеты для локальной разработки, чтобы отлаживать, устранять неполадки, компилировать, а также создавать пакет для развертывания в производственной среде.
Пакеты могут запускаться на локальном компьютере, что упрощает их разработку, или они могут быть развернуты в облаке изначально или после выполнения проверки QA на локальном компьютере.
Сколько клеток / пакетов возможно?
Virto Atomic Architecture™ не ограничивает создание любого количества пакетов вендором или партнером. Рассмотрим несколько различных подходов, которые помогают контролировать число пакетов:
Ориентация на бизнес. Разработчики могут иметь дело с разными требованиями от бизнес-подразделений компании и постоянно их реализовывать.
Снижение затрат. Используются только необходимые модули уровня молекул и клеток, а все ненужные удаляются.
Производительность и масштабируемость. Можно быстро увеличивать или уменьшать масштаб молекул в соответствии с рыночной ситуацией, обеспечивая гибкость при изменении потребностей бизнеса.
Эффективность совместной работы. Разные молекулы обслуживаются разными командами, и они могут предоставлять новые функции и обновления независимо друг от друга.
Правила использования клеток:
Это сложный модуль, состоящий из нескольких молекул.
Поддерживается масштабируемость и наличие нескольких экземпляров клеток, работающих независимо.
Клетки упакованы, развернуты и работают как изолированный контейнер в облаке.
Клетки могут запускаться на локальном компьютере (локально).
Используется внутренняя шина событий для связи внутри клетки.
Используются асинхронные события, такие как веб-хуки, для внешних коммуникаций.
Бизнес-логика реализуется для конкретного приложения.
У клетки есть собственный бэк-офис / интерфейс администратора.
Клетка не имеет прямого доступа к другим клеткам.
Уровень абстракции «организмы»
Четвертый верхний уровень Virto Atomic Architecture™ — это аналог организмов. Это уровень готовых программных решений, который объединяет клиентские приложения (веб, мобильные устройства, др.), пакеты, интеграции и сторонние сервисы (ERP, PIM). Обычно организм — это абстракция того, как решение видят бизнес и конечный пользователь.
Организмы (решения) на самом деле реализуют бизнес-ценности и, в частности, клиентские приложения. Решения могут включать дополнительные сторонние сервисы. Решение для электронной коммерции включает в себя интерфейсные службы (также называемые «Head, или головой» в терминологии архитектуры программного обеспечения) и необходимые интеграции, которые действительно работают вовне.
Все элементы в организме используют API для связи и могут быть развернуты, масштабированы и поддержаны независимо.
Облако как среда обитания организмов
Все полнофункциональные решения (организмы) в Virto Atomic Architecture™ живут в облаке. Когда у вас есть решение, готовое к работе, его можно развернуть в облачной среде.
«Бест практиз» состоит в том, что вы можете сначала протестировать решения локально, а лишь затем развернуть их в облаке — организмы являются cloud-ready.
Тренд состоит в том, что компании, как правило, нацелены на размещение приложений e-commerce в облаке. В то же время, некоторые из крупнейших клиентов Virto ввиду характера их бизнеса предпочитают развертывать платформу локально, обеспечивая ИТ-инфраструктуру on-premises.
Свойства Virto Atomic Architecture™
Объясняя Virto Atomic Architecture™, команда Virto DevLabs отмечает ключевые принципы, которые позволяют получить компонуемую, гибкую, управляемую, настраиваемую и легко обновляемую архитектуру электронной коммерции (или иного многокомпонентного приложения), которая хорошо адаптируется к требованиям рынка.
- Построение открытой экосистемы со стороны вендора
Команда разработчиков платформы электронной коммерции создает свои атомы, молекулы, клетки и, наконец, организмы. Соответственно, все эти элементы представляют собой приложения электронной коммерции (более или менее самостоятельные) внутри шеринг-подобной экосистемы, в которой могут повторно использоваться такие элементы как клетки и молекулы.
- Совместимость
Совместимость начинается на уровне мельчайших компонентов (атомов) и объединяет их для создания более крупных компонентов (молекул), которые сами объединяются в еще более крупные компоненты (клетки), составляющие приложения (организмы). В результате получается легко компонуемая система с большим количеством компонентов, которые разработчики могут выбирать и собирать в различных комбинациях для удовлетворения конкретных бизнес-требований онлайн-торговли или иных отраслей бизнеса.
- Органичная эволюция системы
Элементы каждого уровня можно обновлять, улучшать и развивать. Изменение функциональности компонентов помогает органично адаптировать их к новым рыночным условиям и требованиям бизнеса. Как и в мире живых существ, наиболее жизнеспособные и эффективные компоненты выбираются путем естественного отбора (нежизнеспособные удаляются) и получают приоритет в экосистеме приложений.
- Производительность / масштабируемость
Управление ресурсами и возможность увеличивать и уменьшать нагрузку на торговую платформу позволяет контролировать затраты и масштабировать бизнес по мере его роста.
Компоненты являются масштабируемыми, то есть расширяемыми. Платформа способна использовать необходимое количество компонентов для работы по запросу. Например, система заказов может быть расширена независимо от системы каталогов, и оба вида таких компонентов могут масштабироваться независимо.
- Совместная разработка
Внедрение платформы Virto Commerce — результат усилий Virto, партнеров-интеграторов и ИТ-команд клиентов. Это означает разделение ответственности между командами при сохранении управляемости процессов разработки, настройки и поддержки платформы. Совместная ответственность также означает высокую степень доверия с простыми и понятными правилами взаимодействия между командами.
Преимущества Virto Atomic Architecture™ как они видятся команде Virto
У каждой команды разработчиков — свой опыт, в котором кроме успехов есть и элементы, скажем так, гемора. И вот когда негативные факторы в архитектуре приложения устраняются (или почти устраняются), то можно говорить о преимуществах, которые позволяют разработчикам вести проект эффективнее, а клиентам — снизить стоимость владения платформой на протяжении всего жизненного цикла.
Возможно, хабровцы скажут — у вас свойства и преимущества тут повторяются, — но одно с другим связано, не так ли...)
- Возможность сочетать компоненты
Атомарная архитектура подсказывает, какие компоненты можно использовать повторно, и как их можно смешивать и сочетать с другими атомами, молекулами, клетками и организмами.
- Простое составление справочника по архитектуре
Если e-commerce решение создано в соответствии с принципами Virto Atomic Architecture™, это означает, что все ранее созданные атомы, молекулы и ячейки могут служить в качестве справочного документа по архитектуре (architecture reference document). Также вы можете контролировать зависимости между компонентами.
- Легко понятная архитектура решения
Подход Virto Atomic Architecture™ позволяет новым членам команды и партнерам понять архитектуру решения быстрее и проще. Существенным преимуществом является то, что вы можете подробно изучить архитектуру решения на разных уровнях, от микро до макро.
- Эффективная командная работа
Легко проверить, какие компоненты используются для разных частей решения. Это сокращает написание дублирующего кода и позволяет точнее контролировать зависимости.
- Быстрая разработка и адаптация
Принципы Virto Atomic Architecture™ упрощают понимание кода новыми членами команды разработчиков. Это верно не только во время создания модулей, но и в будущем, когда решение будет рассматриваться для референса или небольших изменений.
- Более легкие обновления и перекомпоновка решения
Поскольку в любой момент времени изменяется только один атом, молекула или организм, легко гарантировать, что любые обновления компонента распространяются на все другие экземпляры на сайте. Точно так же можно легко удалить ненужные компоненты.
- Прослеживаемые экземпляры компонентов
Возможность отслеживать использование определенных компонентов в платформе электронной коммерции позволяет четче управлять ими. Если что-то нужно обновить или удалить, вы точно знаете, куда идти и что менять.
- Отсутствие блокировки на стороне вендора
Наконец, еще одно преимущество конкретно у Virto — это отсутствие блокировки изменений в коде со стороны вендора, при кастомизации можно заменить любую часть функциональности либо внутренней части, либо настраиваемой функциональности. Virto не использует блокировку, которая часто встречается в облачной среде.
Резюмируя сказанное о Virto Atomic Architecture™
Атомарный био-подобный подход к архитектуре приложений в электронной коммерции способствует инновациям, потому что вы действительно можете создавать новые решения, используя и собирая уже существующие модули.
Например, разработчики в Virto Commerce довольно часто делают так пилоты и демо-версии для новых клиентов — берутся модули, интегрируются в пакет Virto, а затем демонстрируются с учетом индивидуального внешнего вида. Так одновременно показывается, как система может работать и как она может быть кастомизирована под клиента.
Большим преимуществом является замена существующих приложений в платформе на клиентские или сторонние приложения с рынка (имеющие интеграцию по API). Например, предположим, что у клиента очень сложный сценарий B2B, который система ценообразования платформы Virto не поддерживает по умолчанию. В этом случае клиент фактически напишет свой собственный модуль ценообразования, а затем заменит или расширит тот, что есть в Virto.
Дисклеймер: Если вы хотите узнать больше об использовании атомарного дизайна Брэда Фроста для пользовательского интерфейса, посетите его веб-сайт
https://atomicdesign.bradfrost.com.
Хочу поблагодарить автора оригинала Олега Жука за помощь в работе над этим постом. Будут вопросы по архитектуре Virto Atomic Architecture™ статьи — пишите в комментариях, спасибо что делитесь мнением.