Результаты нагрузочного тестирования

Нагрузочное тестирование 10 000 пользователей, 1 час

Нагрузочное тестирование производилось с помощью jmeter. Релиз Citeck 2024.5. K8S.

Ошибкой выполнения запроса считается превышение времени ответа в 10 секунд или код, отличный от 200. Каждый тред использует отдельного пользователя в системе.

Изначально система имеет следующие данные:

  • 10 000 пользователей

  • 10 000 000 контрактов

Сценарий тестирования

Сценарий повторяет реальные запросы, которые возникают при работе пользователя.

Состав сценариев и распределение нагрузки:

  • логин в систему и просмотр главной страницы с загрузкой меню, дашборда, информации о пользователе (20%);

  • просмотр журнала контрактов (30%);

  • переход на страницу просмотра контракта с загрузкой всех виджетов: информация о контракте, действия, задачи, комментарии, связи, история версий и т.д. (30%);

  • просмотр журнала активных задач (30%);

  • создание документов (20%);

  • старт процессов по документам (10%);

  • выполнение задач по процессу (50%).

Параметры нагрузки

Название

Значение

Количество пользователей

10 000

Initial delay, sec

0

Ramp up, sec

180

Hold load, sec

3 600

Ramp down, sec

180

Ресурсы кластера и сервисов

5 * (16 CPU, 32 RAM) nodes — микросервисы Citeck (x2 gateway), postgresql.

Gateway

Ресурсы пода:

resources:
    limits:
        memory: 12Gi
    requests:
        cpu: "8"
        memory: 12Gi

Конфигурация сервиса:

-Xmx10G -Xms10G

ECOS_WEBAPP_DATA_SOURCES_MAIN_XA_AWARE_MAX_POOL_SIZE: 800
ECOS_WEBAPP_DATA_SOURCES_MAIN_XA_AWARE_INITIAL_SIZE: 800
SERVER_TOMCAT_MAX_THREADS: 6000
ECOS_WEBAPP_WEB_CLIENT_MAXREQUESTS: 500
ECOS_WEBAPP_WEB_CLIENT_MAXREQUESTSPERHOST: 500

Model

Ресурсы пода:

resources:
    limits:
        memory: 13Gi
    requests:
        cpu: "14"
        memory: 13Gi

Конфигурация сервиса:

-Xmx10G -Xms10G

ECOS_WEBAPP_DATA_SOURCES_MAIN_XA_AWARE_MAX_POOL_SIZE: 800
ECOS_WEBAPP_DATA_SOURCES_MAIN_XA_AWARE_INITIAL_SIZE: 800
SERVER_TOMCAT_MAX_THREADS: 6000
ECOS_WEBAPP_WEB_CLIENT_MAXREQUESTS: 500
ECOS_WEBAPP_WEB_CLIENT_MAXREQUESTSPERHOST: 500

Process

Ресурсы пода:

resources:
    limits:
        memory: 6Gi
    requests:
        cpu: "6"
        memory: 6Gi

Конфигурация сервиса:

-Xmx4G -Xms4G

ECOS_WEBAPP_DATA_SOURCES_EPROC_MAX_POOL_SIZE: 100
ECOS_WEBAPP_DATA_SOURCES_EPROC_INITIAL_SIZE: 100
ECOS_WEBAPP_DATA_SOURCES_CAMUNDA_MAX_POOL_SIZE: 800
ECOS_WEBAPP_DATA_SOURCES_CAMUNDA_INITIAL_SIZE: 800

ECOS_PROCESS_BPMN_ELEMENTS_MUTATION_PROCESSOR_CONSUMER_COUNT: 8
ECOS_PROCESS_BPMN_KPI_MUTATION_PROCESSOR_CONSUMER_COUNT: 2
ECOS_PROCESS_BPMN_ASYNC_START_PROCESS_CONSUMER_COUNT: 2

SERVER_TOMCAT_MAX_THREADS: 1000
ECOS_WEBAPP_WEB_CLIENT_MAXREQUESTS: 200
ECOS_WEBAPP_WEB_CLIENT_MAXREQUESTSPERHOST: 200

UiServ

Ресурсы пода:

resources:
    limits:
        memory: 6Gi
    requests:
        cpu: "7"
        memory: 6Gi

Конфигурация сервиса:

-Xmx3G -Xms3G

ECOS_WEBAPP_DATA_SOURCES_MAIN_MAX_POOL_SIZE: 300
ECOS_WEBAPP_DATA_SOURCES_MAIN_INITIAL_SIZE: 300
SERVER_TOMCAT_MAX_THREADS: 2000

PostgreSQL

Ресурсы пода:

resources:
    limits:
        memory: 30Gi
    requests:
        cpu: "15"
        memory: 30Gi

Конфигурация сервиса:

max_connections = 7000
max_prepared_transactions = 7000
shared_buffers = 8GB
effective_cache_size = 15GB

work_mem = 6MB

max_worker_processes = 15
max_parallel_maintenance_workers = 4
max_parallel_workers_per_gather = 4
max_parallel_workers = 15

max_wal_size = 3GB
min_wal_size = 80MB

Другие сервисы имели рекомендуемые параметры по умолчанию.

Результаты

В ходе нагрузки было сгенерировано 20 447 914 запросов, из них 221 запрос (0.00 %) завершился с ошибками или превысил лимит времени выполнения.

../../_images/015.png

Достигнутые показатели

  • Среднее время отклика — 21.88 мс

  • Медиана — 6 мс

  • 90% всех запросов обрабатывались менее чем за 18 мс

  • 95% всех запросов обрабатывались менее чем за 34 мс

  • 99% всех запросов обрабатывались менее чем за 73 мс

Время ответа / Время

../../_images/024.png

../../_images/02_1.png

Активные потоки / Время

../../_images/02_2.png

Запросов в секунду

../../_images/02_3.png

Самые высоконагруженные запросы:

../../_images/032.png

Нагрузка сервисов в пике:

  1. Model — 10 CPU (11.5 Gb RAM)

  2. PostgreSQL — 9 CPU (27.2 Gb RAM)

  3. UiServ — 7.5 CPU (4.3 Gb RAM)

  4. Gateway — 6 CPU (9 Gb RAM) per instance

  5. Process — 3 CPU (5 Gb RAM)

Графики CPU, RAM pods

../../_images/041.png

../../_images/051.png

Нагрузочное тестирование с минимальными рекомендуемыми ресурсами, 1000 пользователей, 1 час

Нагрузочное тестирование производилось с помощью jmeter. Релиз Citeck 2024.5. K8S.

Ошибкой выполнения запроса считается превышение времени ответа в 10 секунд или код, отличный от 200. Каждый тред использует отдельного пользователя в системе.

Изначально система имеет следующие данные:

  • 1 000 пользователей

  • 10 000 000 контрактов

Сценарий тестирования

Сценарий повторяет реальные запросы, которые возникают при работе пользователя.

Состав сценариев и распределение нагрузки:

  • логин в систему и просмотр главной страницы с загрузкой меню, дашборда, информации о пользователе (20%);

  • просмотр журнала контрактов (30%);

  • переход на страницу просмотра контракта с загрузкой всех виджетов: информация о контракте, действия, задачи, комментарии, связи, история версий и т.д. (30%);

  • просмотр журнала активных задач (30%);

  • создание документов (20%);

  • старт процессов по документам (10%);

  • выполнение задач по процессу (50%).

Параметры нагрузки

Название

Значение

Количество пользователей

1 000

Initial delay, sec

0

Ramp up, sec

180

Hold load, sec

3 600

Ramp down, sec

180

Ресурсы кластера и сервисов

16 CPU, 32 RAM node — микросервисы ECOS, PostgreSQL.

Gateway

Ресурсы пода:

resources:
    limits:
        cpu: "2"
        memory: 1Gi
    requests:
        cpu: "2"
        memory: 1Gi

Конфигурация сервиса:

-Xmx256m -Xms256m

Model

Ресурсы пода:

resources:
    limits:
        cpu: "2"
        memory: 1Gi
    requests:
        cpu: "2"
        memory: 1Gi

Конфигурация сервиса:

-Xmx256m -Xms256m

Process

Ресурсы пода:

resources:
    limits:
        cpu: "1"
        memory: 4Gi
    requests:
        cpu: "1"
        memory: 4Gi

Конфигурация сервиса:

-Xmx2G -Xms2G

UiServ

Ресурсы пода:

resources:
    limits:
        cpu: "1"
        memory: 1Gi
    requests:
        cpu: "1"
        memory: 1Gi

Конфигурация сервиса:

-Xmx256m -Xms256m

PostgreSQL

Ресурсы пода:

resources:
    limits:
        cpu: "2"
        memory: 2Gi
    requests:
        cpu: "2"
        memory: 2Gi

Конфигурация сервиса:

max_connections = 7000
max_prepared_transactions = 7000
shared_buffers = 250M
effective_cache_size = 1GB

work_mem = 4MB

max_worker_processes = 2
max_parallel_maintenance_workers = 2
max_parallel_workers_per_gather = 2
max_parallel_workers = 2

max_wal_size = 3GB
min_wal_size = 80MB

Другие сервисы имели рекомендуемые параметры по умолчанию.

Результаты

В ходе нагрузки было сгенерировано 2 043 398 запросов, из них 1 запрос (0.00 %) завершился с ошибками или превысил лимит времени выполнения.

../../_images/062.png

Достигнутые показатели

  • Среднее время отклика — 6.88 мс

  • Медиана — 6 мс

  • 90% всех запросов обрабатывались менее чем за 16 мс

  • 95% всех запросов обрабатывались менее чем за 25 мс

  • 99% всех запросов обрабатывались менее чем за 47 мс

Время ответа / Время

../../_images/072.png

../../_images/07_1.png

Активные потоки / Время

../../_images/07_2.png

Запросов в секунду

../../_images/07_3.png

Самые высоконагруженные запросы:

../../_images/082.png

Нагрузка сервисов в пике:

  1. Model — 1.5 CPU (700 Mb RAM)

  2. PostgreSQL — 1 CPU (1.7 Gb RAM)

  3. UiServ — 0.8 CPU (850 Mb RAM)

  4. Gateway — 1.3 CPU (750 Mb RAM)

  5. Process — 0.5 CPU (2.8 Gb RAM)