Архитектура коробочных решений S2ERP
Каждое коробочное решение S2ERP состоит из набора следующих технологий:
- Операционная система Debian
- Контейнерный оркестратор Docker Swarm.
Используется для управления контейнерами с основным сервисом (S2ERP), а также его вспомогательными компонентами: чатом, телефонией и другими дополнительными микросервисами. Каждый сервис запускается в своем контейнере, что обеспечивает изоляцию и упрощает масштабирование. - СУБД PostgreSQL.
Используется в качестве основной СУБД для хранения данных. PostgreSQL поднят с использованием Patroni, что позволяет добавлять дополнительные серверы с PostgreSQL в случае необходимости обеспечивать репликацию и отказоустойчивое функционирование. - In-memory БД Redis.
Используется для хранения данных (в основном, хранятся очереди Sidekiq) в оперативной памяти, что обеспечивает быстрый доступ к ним. - Брокер сообщений Kafka.
Используется для обмена сообщениями между сервисами S2ERP. - Полнотекстовый поиск ElasticSearch.
Используется для организации полнотекстового поиска в S2ERP. - Хранилище файлов S3.
Используется для хранения различных бинарных данных (документов, файлов, вложений и т.п.).
Коробочное решение может быть развернуто на одном или нескольких серверах, в зависимости от требований к производительности и отказоустойчивости. Docker Swarm обеспечивает автоматическое масштабирование и балансировку нагрузки между контейнерами, что позволяет эффективнее использовать ресурсы серверов.
Обновление коробочных версий
Обновление компонентов S2ERP, как правило, происходит без необходимости контроля за этим процессом и выглядит следующим образом:
- Разработчики выпускают релиз какого-либо компонента (или самой S2ERP) для конкретной коробки путем запуска специального pipeline в инфраструктуре S2.
- В конце pipeline "получается" docker-образ, который загружается в docker-репозиторий S2. Сам docker-репозиторий расположен на стороне S2 (т.е. все образы всех коробок хранятся у нас) и у каждой отдельной коробки есть доступ только к СВОЕМУ namespace внутри этого репозитория. Т.е. никакая коробка не может получить доступ к образам других коробок. Сами образы никаких конфиденциальных данных не содержат.
- Каждый час в "коробке" запускается скрипт, который автоматически "накатывает" последний доступный образ для каждого компонента S2ERP, а также запускает новые компоненты (если это необходимо для конкретной коробки).
Обновление операционной системы
Коробочная версия S2ERP разворачивается на базе ОС Debian 11.
Системные администраторы компании S2 осуществляют только ПЕРВОНАЧАЛЬНУЮ установку и настройку операционной системы и некоторых требуемых для функционирования пакетов. При первоначальной настройке сервера коробки создается специальный системный пользователь s2support (с UID/GID = 744), "под которым" работают все сервисы S2ERP.
Дальнейшая поддержка установленных пакетов операционной системы в актуальном состоянии должна осуществляться системными администраторами клиента.
Как правило, для этого достаточно периодически (например, раз в месяц) выполнять следующую последовательность команд (под пользователем root):
apt-get update apt-get upgrade
Важное примечание:
Обновлять версию (релиз) самой ОС (т.е. запускать команду apt-get full-upgrade) без запроса в службу поддержки S2 НЕ РЕКОМЕНДУЕТСЯ, т.к. это может привести к частичной неработоспособности коробочной S2ERP.
Если при выполнении команды apt-get upgrade в списке обновляемых пакетов будут такие пакеты, как:
- docker-*
- containerd.io
- haproxy
- postgresql-*
- redis-server
то нужно учесть, что их обновление приведет к небольшому downtime (~ 3-7 минут) системы на время перезапуска обновляемых сервисов. Т.е. в случае наличия данных пакетов в списке на обновление, рекомендуется предупредить об обновлении пользователей коробочной S2ERP.