Программная архитектура
Программная архитектура Атомкод включает следующие компоненты:
- 
Среда выполнения (см. следующий рисунок): вычислительное окружение, необходимое для выполнения разработанного на базе Атомкод приложения и доступное во время его выполнения.  Программная архитектура Атомкод: среда выполнения 
- 
Среда разработки: комплекс программных средств, например, редакторов, трансляторов, инструментов сборки для разработки приложений на базе Атомкод. Среда разработки и ее связь со средой выполнения в Атомкод показаны на следующем рисунке.  Программная архитектура Атомкод: среда разработки и среда выполнения 
Атомкод и приложения на базе Атомкод состоят из клиентской части, разработанной на JavaScript и выполняющейся в браузере, и серверной части. Клиентская и серверная части взаимодействуют через пограничный шлюз на базе Nginx. Шлюз фильтрует потоки данных между клиентами и сервером, а также маршрутизирует запросы и балансиру ет нагрузку между микросервисами.
Атомкод включает следующие микросервисы:
- 
Сервис пользовательского интерфейса динамически формирует пользовательский интерфейс клиента на основе метаданных компонентов интерфейса, а также типов запросов и типов данных. 
- 
Сервис аутентификации аутентифицирует пользователей, используя локальную базу данных пользователей, а также доверенные внешние поставщики аутентификации по протоколам OAuth2 и Active Directory. 
- 
Сервис авторизации контролирует права доступа к объектам и функциям Атомкод. Контроль прав доступа к компонентам пользовательского интерфейса, клиентские запросы к серверу Атомкод, межсервисные коммуникации внутри Атомкод, доступ к файлам и данным требуют предварительной настройки. Возможно расширение точек контроля прав доступа к любому компоненту Атомкод. 
- 
Сервис аудита обеспечивает ведение и хранение журналов событий безопасности в Атомкод. Список событий безопасности и точек их генерации является расширяемым. 
- 
Сервис доступа к хранилищу данных выступает в роли слоя абстракции между объектной моделью бизнес-данных, используемой в Атомкод, и физическим реляционным хранилищем данных в PostgreSQL или Postgres Pro. Для доступа к данным в Атомкод используется протокол GraphQL. Хранилище файлов обеспечивает загрузку, хранение и выгрузку файлов любых типов и размеров. Протокол доступа к хранилищу файлов совместим с протоколом Amazon S3. 
- 
Сервис BPMS координирует исполнение бизнес-процессов. Ядро сервиса BPMS основано на программном обеспечении с открытом кодом Camunda и дополнено разработанными для Атомкод механизмами контроля прав доступа и исполнения процессов и их шагов. 
- 
Сервисы диагностики централизованно собирают, обрабатывают и хранят следующие диагностические данные: - журнал событий;
- журнал трассировки;
- метрики.
 Для хранения и обработки данных диагностики используется программное обеспечение с открытым кодом из стеков Grafana и Elasticsearch. Для сбора и передачи диагностических данных используются открытые стандарты OpenTelemetry, которые позволяют перенаправить диагностические данные во внешние по отношению к Атомкод сервисы хранения и обработки диагностической информации. 
- 
Сервисы серверной части Атомкод выполняются в среде ОС Linux с использованием контейнерной виртуализации на базе Docker и Docker Swarm. Использование контейнеров позволяет делать следующее: - развертывать Атомкод в физических и виртуальных средах;
- обновлять и заменять отдельные компоненты и сервисы, не затрагивая остальные компоненты Атомкод;
- масштабировать Атомкод горизонтально на несколько физических или виртуальных серверов.
 
Для коммуникации между сервисами Атомкод используются следующие протоколы:
- HTTP и REST: для синхронных взаимодействий.
- WebSocket и SignalR: для синхронных и асинхронных двунаправленных взаимодействий.
- RabbitMQ: программный брокер сообщений для работы с очередями сообщений в сценариях асинхронного взаимодействия и событийной модели.
Для коммуникации между клиентами и сервером Атомкод используются следующие протоколы:
- HTTP и REST: для синхронных взаимодействий.
- WebSocket и SignalR: для синхронных и асинхронных двунаправленных взаимодействий, а также реализации событийной модели и отправки уведомлений.