...
Розробник або адміністратор вносить зміни в код Terraform або Helm.
Зміни комітяться у GitLab-репозиторій.
GitLab CI/CD автоматично запускає пайплайн, що:
перевіряє синтаксис конфігурацій,
виконує dry-run (імітаційний запуск),
застосовує зміни в обраній інфраструктурі.
Успішне виконання пайплайну призводить до оновлення реального середовища (наприклад, Dev або Prod).
Власні сервіси, що розгортаються в Kubernetes, поділяються на два типи:
Stateless-сервіси – не зберігають стан і не мають постійних даних.
Stateful-сервіси – зберігають стан у Kubernetes Persistent Volumes (на EC2).
Сервіси можуть бути:
власної розробки (кодова база: https://gitlab.prozorro.sale/prozorro-sale/)
open-source рішеннями.
ЦБД реалізовано як мікросервісну архітектуру, де кожен сервіс виконує окрему функцію та, у разі потреби, має власну ізольовану базу даних (MongoDB). Взаємодія між сервісами відбувається всередині кластера через API-виклики між контейнерам
Kubernetes-архітектура ЦБД
Центральна база даних (ЦБД) реалізована за принципами мікросервісної архітектури, яка передбачає розділення функціональності на окремі незалежні компоненти (сервіси). Кожен сервіс:
реалізує чітко визначену функцію або бізнес-процес;
за потреби зберігання інформації — має власну окрему базу даних (MongoDB або PostgreSQL), розміщену як
Statefulкомпонент у Kubernetes;не залежить від інших сервісів з точки зору зберігання даних.
Взаємодія між сервісами відбувається всередині кластера Kubernetes, через стандартні API-запити (HTTP/REST) між контейнерами. Такий підхід забезпечує:
незалежність компонентів;
гнучке масштабування;
спрощену підтримку і супровід;
підвищену безпеку, оскільки взаємодія обмежена внутрішньою мережею кластера.
Название | Версия | Тип | Кодовая база | Назначение |
Nginx Ingress | v1.12.0 і вище | Stateless | OpenSource | API Gateway контролер |
Velero | v1.15.2 і вище | Stateless | OpenSource | Система резервного копіювання |
OpenSearch | 2.32.0 і вище | Stateful | OpenSource | Система збору логів |
VictoriaMetrics | v1.113.0 і вище | Stateful | OpenSource | Система моніторинга https://github.com/VictoriaMetrics/VictoriaMetrics |
Kyverno | v1.13.4 і вище | Stateless | OpenSource | Система керування політиками кластера |
KubeArmor | v1.5.3 і вище | Stateless | OpenSource | Система керування runtime безпекою кластера Використовується для забезпечення безпеки |
ElasticSearch | 7.17.3 і вище | Stateful | OpenSource | Система повнотекстового пошуку та індексації даних ЦБД |
archivist-databridge | v3.19.0 і вище | Stateless | Мікросервіс ЦБД, який відповідає за збереження історії використання даних по всім MongoDB | |
archivist-mongo | 4.4.29 і вище | Stateful | OpenSource | База даних MongoDB сервісу archivist |
auction-api | v3.76.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за проходження аукціонів |
auction-chronograph | v3.76.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за фонові процеси в аукціонах |
auction-databridge | v3.76.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з аукціонами |
auction-mongo | 4.4.29 і вище | Stateful | OpenSource | База данных MongoDB сервісу auction |
auth-api | v0.27.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за аутентифікацію в API |
auth-databridge | v0.27.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісами аутентифікації |
billing-api | v3.66.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за фінансові розрахунки |
billing-databridge | v3.66.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісом billing |
dictionaries-and-classifiers-api | v3.28.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за словники та класифікатори обʼєктів |
dictionaries-and-classifiers-databridge | v3.28.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісом dictionaries-and-classifiers |
document-storage-api | v3.41.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за зберігання ілюстрацій до аукціонів |
document-storage-databridge | v3.41.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісом document-storage |
document-storage-thumbnail-worker | v3.41.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за створення мініатрюр з ілюстрацій до аукціону |
document-storage-mongo | 4.4.29 і вище | Stateful | OpenSource | База данных MongoDB сервісу document-storage |
jobber-announcement-watcher | v3.36.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за зміни в ланцюжках аукціонів |
jobber-api | v3.36.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за ланцюжки аукціонів |
jobber-chronograph | v3.36.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за за фонові процеси в ланцюжках аукціонів |
jobber-databridge | v3.36.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісом jobber |
jobber-large-announcement-watcher | v3.36.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за зміни в ланцюжках аукціонів |
jobber-mirror | v3.36.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за синхронізацію майданчиків |
jobber-mongo | 4.4.29 і вище | Stateful | OpenSource | База данных MongoDB сервісу jobber |
notification-api | v3.20.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за Нотифікації (оповіщення про зміну даних) |
notification-databridge | v3.20.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісом Нотифікацій |
procedure-api | v3.128.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за бізнес процеси в аукціонах |
procedure-chronograph | v3.128.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за фонові процеси сервісу procedure |
procedure-databridge | v3.128.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісом procedure |
procedure-mirror | v3.128.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за синхронізацію майданчиків |
procedure-mongo | 4.4.29 і вище | Stateful | OpenSource | База данных MongoDB сервісу procedure |
protocol-api | v3.88.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за формування протоколів проходження аукціонів |
protocol-databridge | v3.88.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з сервісом protocol |
registry-api | v3.68.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за реєстри |
registry-databridge | v3.68.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за взаємодію інших сервісів з реестрами аукционов |
registry-mongo | 4.4.29 і вище | Stateful | OpenSource | База данных MongoDB сервісу registry |
search-api | v3.57.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за пошук по даним ЦБД |
survey-api | v3.15.0 і вище | Stateless | Власна розробка | Мікросервіс ЦБД, який відповідає за збір фідбека про проходження аукціонів |
survey-postgresql | 14 і вище | Stateful | OpenSource | База данных PostgreSQL сервісу survey |
Kubernetes GitLab
Название | Версия | Тип | Кодовая база | Назначение |
Nginx Ingress | v1.12.0 і вище | Stateless | OpenSource | API Gateway контролер |
Velero | v1.15.2 і вище | Stateless | OpenSource | Система резервного копіювання |
OpenSearch | 2.32.0 і вище | Stateful | Система збору логів | |
VictoriaMetrics | v1.113.0 і вище | Stateful | OpenSource | Система моніторинга https://github.com/VictoriaMetrics/VictoriaMetrics |
Kyverno | v1.13.4 і вище | Stateless | OpenSource | Система управління політиками кластера |
KubeArmor | v1.5.3 і вище | Stateless | OpenSource | Система керування runtime безпекою кластера використовується для забезпечення безпеки |
ElasticSearch | 7.17.3 і вище | Stateful | OpenSource | Система повнотекстового пошуку та індексації даних ЦБД |
GitLab | 17.9 і вище | Stateful | OpenSource | Система керування кодовою базою та CI/CD процесами |
PostgreSQL | 14 і вище | Stateful | OpenSource | База данных PostgreSQL для GitLab |
3. Фізична архітектура
Інфраструктура системи реалізована на основі двох незалежних кластерів Kubernetes, розгорнутих у хмарному середовищі AWS (Europe, Ірландія) в різних дата-центрах для забезпечення відмовостійкості, георезервування та безперервності бізнес-процесів.
Структура кластерів:
Кластер №1 — ЦБД (Центральна база даних)
Розташування: дата-центр
eu-west-1bПризначення: основний кластер, в якому безпосередньо розгортається Центральна база даних (ЦБД), її компоненти та вся прикладна логіка.
Характеристики: забезпечує стабільну роботу ключових сервісів, включаючи бази даних, API, бекенд-логіку тощо.
Кластер №2 — Система автоматизації та CI/CD
Розташування: дата-центр
eu-west-1cПризначення: обслуговує адміністративні процеси, включаючи деплоймент, оновлення інфраструктури, CI/CD-процеси, моніторинг та логування.
Основний сервіс: GitLab, який відповідає за реалізацію автоматичних пайплайнів, перевірку коду, розгортання застосунків через Helm/Terraform.
4. Взаємодія компонентів
Комунікація між кластерами
Для забезпечення безпечного та ефективного обміну командами та даними між двома кластерами (наприклад, під час оновлення компонентів або запуску автоматизованих сценаріїв), використовується:
...
мінімізує затримки при обміні даними;
гарантує високий рівень безпеки (ізоляція трафіку в межах AWS);
забезпечує масштабованість і простоту інтеграції нових сервісів.
Система розгорнута у хмарному середовищі та використовує наступні технології:
Контейнери (Docker, Kubernetes) – для розгортання та управління сервісами.Балансувальник навантаження (NGINX, AWS ALB) – рівномірний розподіл запитів.Системи логування та моніторингу (Elasticsearch, Kibana, Prometheus, Grafana) – для відстеження роботи системи.Автоматичне масштабування (Kubernetes HPA) – підвищення продуктивності під час пікових навантажень.
Приклад потоку запиту:
Користувач публікує обʼєкт ProcedureЗапит надходить до API Gateway, який перенаправляє його до відповідного сервісу.Якщо це участь в аукціоні, запит проходить через сервіс обробки ставок.Дані кешуються у Redis для швидкого доступу.
4. Взаємодія компонентів
Всі сервіси обмінюються даними через захищений API (REST).
Використовується шифрування трафіку через TLS 1.3.
Приклад взаємодії:
Користувач подає заявку на участь в аукціоні.
Дані перевіряються
Якщо все гаразд – користувач отримує доступ до аукціону.
Всі події логуються в централізовану систему моніторингу.
Взаємодія з API ЦБД
Взаємодія з API ЦБД відбувається за допомогою REST API запитів через VPN зʼєднання. Cipher VPN Server сервер встановлено на окремій віртуальній машині (AWS EC2) та приймає запити на підключення із інтернету. REST API запити, які надсилаютьсявсередині VPN тунелю, надсилаються на балансувальник (AWS NLB), який розміщено перед кластером ЦБД.
5. Вимоги до продуктивності та масштабованості
Час обробки запиту – не більше 500 мс.
Кількість одночасних користувачів – до 100 10 000.
Горизонтальне масштабування дозволяє автоматично додавати нові сервери.