| Table of Contents |
|---|
1. Загальний опис архітектури
Система АТ "Прозорро.Продажі" є розподіленою інформаційною системою, яка забезпечує проведення електронних аукціонів у форматі відкритих торгів.
Архітектура побудована за принципом мікросервісного підходу, що дозволяє забезпечити гнучкість, масштабованість і високу доступність.
Всі компоненти розгорнуті в хмарному середовищі (AWS)
Взаємодія між компонентами здійснюється через REST API
Забезпечується авторизація та аутентифікація через OAuth 2.0
Всі аукціонні процеси логуються для контролю прозорості та аналітики
2. Логічна архітектура
Система складається з декількох рівнів:
| Рівень | Компоненти | Опис |
|---|---|---|
| Користувацький рівень | Адмінка, Модуль аукціонів | Інтерфейс для користувачів аукціону (учасники, адміністратори, майданчики) |
| Шлюз API | API Gateway | Єдина точка входу для клієнтів та зовнішніх систем |
| Мікросервіси |
| Кожен сервіс відповідає за окремий функціонал |
| База даних | PostgreSQL, Redis (кешування) | Зберігання всіх даних аукціонів, користувачів, ставок |
| Зовнішні інтеграції | Державні реєстри | ЄДРАТО |
3. Фізична архітектура
Система розгорнута у хмарному середовищі та використовує наступні технології:
Контейнери (Docker, Kubernetes) – для розгортання та управління сервісами.
Балансувальник навантаження (NGINX, AWS ALB) – рівномірний розподіл запитів.
Системи логування та моніторингу (Elasticsearch, Kibana, Prometheus, Grafana) – для відстеження роботи системи.
Автоматичне масштабування (Kubernetes HPA) – підвищення продуктивності під час пікових навантажень.
Приклад потоку запиту:
Користувач публікує обʼєкт Procedure
Запит надходить до API Gateway, який перенаправляє його до відповідного сервісу.
Якщо це участь в аукціоні, запит проходить через сервіс обробки ставок.
Дані кешуються у Redis для швидкого доступу.
4. Взаємодія компонентів
Всі сервіси обмінюються даними через захищений API (REST).
Використовується шифрування трафіку через TLS 1.3.
Приклад взаємодії:
ЦБД являє собою Core API систему, яка не має інтерфейсу для взаємодії з інтернет-користувачем. З системою взаємодіють сайти (площадки/майданчики) способом надсилання REST API запитів через VPN зʼєднання.
Інфраструктура ЦБД базується на платформі оркестрації Kubernetes.
З метою уникнення залежності від зовнішніх постачальників послуг (Cloud provider), всі компоненти системи, включно з базами даних, розгортаються всередині кластера Kubernetes і зберігають інформацію всередині цього ж кластера.
Такий підхід дозволяє розгорнути систему в мінімальні терміни на будь-якому хмарному провайдері (AWS, Google, Azure, Digital Ocean). Основною вимогою є лише підтримка роботи з Kubernetes.
1.1. Структура
2. Логічна архітектура
Інфраструктура як код (Infrastructure as Code, IaC)
Усі операції, пов’язані з розгортанням інфраструктури, оновленням програмного забезпечення та адміністративними задачами, реалізуються відповідно до підходу Infrastructure as Code (IaC) — «інфраструктура як код». Це сучасний метод управління інфраструктурою, який дозволяє автоматизувати створення, зміну та підтримку обчислювальних ресурсів за допомогою коду, що зберігається в системі контролю версій.
Переваги підходу IaC:
Автоматизація процесів розгортання та оновлення, що значно знижує ризик людської помилки;
Відтворюваність середовищ: однакові конфігурації можна розгортати в різних середовищах (Dev, Stage, Prod) без змін;
Масштабованість: інфраструктура легко масштабується через зміну параметрів у коді;
Контроль змін: усі зміни фіксуються в git-репозиторіях, що дозволяє відслідковувати історію, робити рев’ю та швидко відкотитись до стабільної версії при потребі.
Технології, які використовуються:
Terraform (v1.11.1)
Використовується для створення та управління ресурсами хмарної інфраструктури, включаючи розгортання Kubernetes-кластера. Завдяки декларативному синтаксису дозволяє легко описати архітектуру середовища та керувати залежностями між компонентами.Helm (v3.17.1)
Використовується для розгортання та оновлення застосунків всередині Kubernetes-кластера. Helm Charts дозволяють шаблонізувати конфігурації та централізовано керувати версіями застосунків, що спрощує CI/CD-процеси.GitLab CI/CD
Усі дії з розгортання та оновлення виконуються автоматично через пайплайни в GitLab. Після коміту змін у репозиторій запускається відповідний пайплайн, який проходить усі етапи — від валідації коду до розгортання в обране середовище. Це забезпечує повну автоматизацію без необхідності втручання людини.
Як це працює на практиці:
Розробник або адміністратор вносить зміни в код 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 VPC Peering — це захищене з'єднання між віртуальними приватними мережами (VPC), що дозволяє кластерам обмінюватися даними напряму без використання публічного інтернету.
Такий підхід:
мінімізує затримки при обміні даними;
гарантує високий рівень безпеки (ізоляція трафіку в межах AWS);
забезпечує масштабованість і простоту інтеграції нових сервісів.
Взаємодія з API ЦБД
Взаємодія з API ЦБД відбувається за допомогою REST API запитів через VPN зʼєднання. Cipher VPN Server сервер встановлено на окремій віртуальній машині (AWS EC2) та приймає запити на підключення із інтернету. REST API запити, які надсилаютьсявсередині VPN тунелю, надсилаються на балансувальник (AWS NLB), який розміщено перед кластером ЦБД
...
Користувач подає заявку на участь в аукціоні.
...
Дані перевіряються
...
Якщо все гаразд – користувач отримує доступ до аукціону.
...
.
5. Вимоги до продуктивності та масштабованості
Час обробки запиту – не більше 500 мс.
Кількість одночасних користувачів – до 100 10 000.
Горизонтальне масштабування дозволяє автоматично додавати нові сервери.
6. Карта сервісів
...
