Структура платформы

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

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

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

В крупной инсталляции разные серверы платформы могут иметь разные роли. Серверы связаны между собой с помощью распределенной архитектуры, а также могут быть разделены на несколько шин (например, "edge" и "облако"). Распределенная архитектура позволяет серверам обмениваться частями единых моделей данных, фактически реализуя структуру распределенного приложения.

Серверы AggreGate взаимодействуют с устройствами, управляют ими, конфигурируют, а также собирают потоки данных и событий. Специфичные для устройств данные всегда нормализуются, т.е. преобразуются в формат единой модели данных AggreGate. Нормализация происходит либо на стороне устройства с помощью программного/аппаратного агента, либо на стороне сервера через драйвер устройства.

Драйверы также используются для доступа к структурированным источникам данных, таким как сторонние системы. Пакеты платформы включают множество драйверов для стандартных коммуникационных протоколов, такх как HTTP, MQTT, SNMP или Modbus.

Каждый сервер обеспечен различными хранилищами, которые хранят настройки, события, а также бинарные данные в NoSQL, реляционных и других базах данных.

В AggreGate, нет формальной разницы между серверами разработки, тестирования и производства. Любой сервер может выступать в роли интегрированной среды разработки и предлагать инструменты для low-code разработки, внедрения, отладки и DevOps. Их практическая доступность ограничена функциями безопасности и контроля доступа платформы.

Платформа предоставляет две независимые системы проектирования UI (интерфейса пользователя): браузерный конструктор Web UI и кроссплатформенный десктопный конструктор приложений.

Оба виды интерфейсов могут использоваться для администрирования и настройки платформы, а также содержат различные визуальные редакторы для low-code разработки драйверов, процессов, инструментальных панелей и других компонентов приложений.

Монолит vs микросервисы

AggreGate  имеет сервис-ориентированную архитектуру (SOA), спроектированную для поддержки разработки приложений на базе микросервисов.

У AggreGate Server очень компактное ядро, и в рамках подхода к созданию микросервисов каждый сервер запускает лишь единственный "первичный" плагин, которые предлагает отдельный сервис в рамках основного приложения. Множество серверов соединены между собой через распределенную архитектуру или классические методы, такие как HTTP/REST или брокер сообщений.

В то же время, решения малого и среднего масштаба могут использовать способность AggreGate Server запускать множество плагинов. Развертывание всех плагинов на одном сервере соответствует схеме монолитного приложения. Несмотря на очевидные недостатки такого подхода, он позволяет быстрее создавать приложения и выводить их на рынок.

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