Приведенные технологические требования и рекомендуемый для применения в разработке технологический стек направлены на реализацию архитектурных требований к разработке современных цифровых продуктов.
Рекомендуемый стек состоит из наиболее популярных в индустрии инструментов, открытых и/или имеющих альтернативу в Едином реестре российского ПО. Это означает, что данный стек является наиболее зрелым с точки зрения надежности, безопасности применяемых технологий, требований к импортозамещению и наличия на рынке труда специалистов, способных поддерживать и развивать цифровой продукт.
01.КОНТЕЙНЕРИЗАЦИЯ
Цифровой продукт поставляется в виде цифровых образов и развертывается для исполнения в контейнеры
Цифровой продукт поддерживает масштабируемость путем работы одновременно нескольких экземпляров контейнеров
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
Docker/Cri-o-образы
Kubernetes — среда управления контейнерами
Helm — система управления приложениями на Kubernetes
Аналоги
02.ИНФРАСТРУКТУРА КАК КОД
Развертывание любой инфраструктуры и окружения, необходимых для функционирования цифрового продукта, автоматизировано с помощью скриптов, которые можно реиспользовать для других стендов.
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
Ansible — инструмент управления развертыванием
Terraform — система управления инфраструктурой
Аналоги
03.БАЗЫ ДАННЫХ
Для общих задач хранения данных и доступа к ним используются реляционные СУБД
Для специфических задач (кэширования, операций в памяти, построения поисковых полнотекстовых систем, хранения данных логов и мониторинга) используются специальные базы данных
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
PostgreSQL — реляционная СУБД
Apache Ignite/Tarantool — вычисления в памяти (in-memory)
Hazelcast/Infinispan — кэш
Elasticsearch — поиск, логи операций
ClickHouse — аналитика
Аналоги
04.СЕРВИСЫ BACKEND
У цифрового продукта должна присутствовать ярко выраженная backend-часть, реализующая логику приложения и взаимодействие с данными
Backend-часть цифрового продукта реализуется в виде одного или нескольких слабосвязанных сервисов, реализованных на одном из языков программирования из технологического стека
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
Java (Spring Framework) — сервисы backend
Go — высоконагруженные сервисы
Python — сервисы чат-ботов и нейросетей
05.ВЗАИМОДЕЙСТВИЕ ЧЕРЕЗ УНИФИЦИРОВАННЫЕ ПРОТОКОЛЫ
Сервисы/микросервисы backend взаимодействуют друг с другом по протоколам, независимым от конкретной реализации сервиса:
синхронно — через документированный API;
асинхронно — через брокера сообщений.
Асинхронное взаимодействие (event-driven подход) наиболее предпочтительно, так как устраняет излишнюю связанность сервисов друг с другом
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
REST, gRPC, SOAP — стандартные подходы к проектированию синхронных API
AMQP — протокол асинхронного взаимодействия
Kafka, Rabbit, Active MQ — брокеры сообщений
Swagger (OpenAPI) — формат описания контрактов API
06.ПРОЦЕССНЫЙ ПОДХОД
Сложные вариативные бизнес-процессы и операции следует реализовывать с помощью BPM-процессов
Каждый экземпляр процесса должен быть наблюдаем, управляем, иметь точки остановки и отката
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
Сamunda BPM
N8N
Аналоги
07.НАСТРАИВАЕМАЯ ЗАЩИЩЕННАЯ МАРШРУТИЗАЦИЯ ВЫЗОВОВ
Сервисы цифрового продукта должны поддерживать работу через защищенные шлюзы (API Gateway) при взаимодействии с UI, внешними системами или друг с другом
На каждом из шлюзов (API Gateway) может быть настроена собственная политика доступа к сервисам, маршрутизации и балансировки
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
Kubernetes/Spring/Consul — маршрутизация, API Gateway
Nginx — балансировщики
08.ВИЗУАЛЬНЫЙ ИНТЕРФЕЙС (FRONTEND)
Визуальная часть цифрового продукта (UI) должна быть реализована на основе тонкого клиента для браузера и/или приложений для мобильных устройств (это снижает затраты на установку и актуализацию версий UI цифрового продукта у пользователей)
UI поддерживает адаптивность — корректное отображение на устройствах различных размеров
UI цифрового продукта должен уметь «встраиваться» (например, по технологии виджетов) в другое (главное) приложение
Цифровой продукт в некоторых случаях должен позволять встраивать в свой UI виджеты других цифровых продуктов
Визуальный интерфейс цифрового продукта в разумных пределах поддерживает кастомизацию, например, смену тем
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
TypeScript — язык программирования
Angular/React — фреймворки
Kotlin — приложения Andriod
Swift — приложения iOS и аналоги
09.ВЗАИМОДЕЙСТВИЕ ВИЗУАЛЬНОГО ИНТЕРФЕЙСА С СЕРВЕРНОЙ ЧАСТЬЮ
Визуальная часть цифрового продукта (UI) должна взаимодействовать с серверной частью (backend) по технологии «тонких каналов», с поддержкой сжатия трафика, кеширования, работы в нестабильных сетевых условиях
Взаимодействие должно осуществляться по защищенным протоколам, исключающим искажение или подмену трафика
Количество запросов к серверу должно быть минимизировано — доступ к различным объектам, сервисам, необходимым для отображения в интерфейсе, должен агрегироваться в специальных API-методах на стороне сервера
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
Nginx и аналоги — балансировка, маршрутизация, кэширование ресурсов
Инструменты API Gateway, специальный интерфейсные API-методы — проксирование и агрегирование запросов
Протокол HTTPS и аналоги — защита трафика
Технологии SPA и AJAX — экономия объема трафика
10.ЛОГИРОВАНИЕ, ДИАГНОСТИКА, ТРАССИРОВКА ОПЕРАЦИЙ
Цифровой продукт должен обеспечивать сбор логов, диагностических метрик, показателей «здоровья» работы сервисов и бизнес-операций
Должна быть возможность предоставления и хранения этой информации в централизованных, отдельно масштабируемых хранилищах
РЕКОМЕНДУЕМЫЕ ИНСТРУМЕНТЫ:
Fluentbit/logstash — сборщик логов
Elasticsearch, Prometheus — хранилища логов и метрик