Нагрузочное тестирование

Сколько выдерживает Руксео

Кластер из трёх узлов обслуживает 550–600 вызовов API в секунду на корпусе в 1,05 млн документов. До 500 вызовов в секунду 95 % ответов приходят быстрее 0,22 с. Ниже — как мерили, что получилось, сравнение с Nuxeo и границы, за которыми эти числа не действуют.

Замеры Руксео — 23–24 сентября 2026 года, версия 2025.20.0-ruxeo.1, сборка от 23.09.2026. Замеры Nuxeo для сравнения — 30–31 августа 2026 года на платформе 2025.19.

Главное

Четыре числа, за которые мы отвечаем

550–600

вызовов API в секунду держит кластер из трёх узлов. До 500 вызовов p95 не выше 0,22 с.

350–400

вызовов в секунду держит один узел. Его предел — процессор: 89 % на 400 вызовах.

×1,5

даёт переход с одного узла на три. Процессорная стоимость вызова на кластере выше на 5–15 %.

×2,2–2,5

больше процессорного времени тратит Руксео на ту же работу, чем платформа Nuxeo без прикладного слоя.

Задержка и пропускная способность

До 500 вызовов в секунду задержка почти не растёт

Нагрузка подаётся ступенями по 100 вызовов в секунду. Три узла проходят ступени 300–500 с p95 от 0,15 до 0,22 с. На 600 кластер обрабатывает 96 % поданного, и p95 вырастает до 1,9 с. На 700 обработано 81 %: это предел.

Задержка 95 % ответов

Секунды, логарифмическая шкала. Линия — медиана трёх прогонов, точки — отдельные прогоны.

3 узла 1 узел порог 2 с

Обработано из поданного

Вызовов API в секунду. Пунктир — обработано всё, что подано.

3 узла 1 узел вся нагрузка
УзловПодано, вызовов/сОбработано, вызовов/с p50, мсp95, мсp99, мс CPU узлов, %CPU базы, %CPU индекса, %Отказов
12002003515824444780
1300299421843166313130
1400399673014148019170
3300299351491732312130
3400399371632473117180
3500499432153524223240
36005781 1381 8722 2816036380
37005705 5137 5688 0146035430

Медианы трёх прогонов по окну устоявшейся нагрузки. CPU — средняя загрузка машины за то же окно; для трёх узлов — среднее по узлам. Один узел на 400 вызовах в пике загружен на 89 %.

По видам операций

Дольше всего отвечают поиск и список папки

Три узла, 500 вызовов в секунду — рабочая точка кластера. Медианы трёх прогонов.

Операцияp50, мсp95, мс
Полнотекстовый поиск по метаданным, около 100 совпадений184271
Полнотекстовый поиск по содержимому вложений, около 100 совпадений186253
Полнотекстовый поиск по групповому признаку, около 10 000 совпадений154235
Атрибутивный поиск по полям карточки171234
Список документов папки140204
Создание документа4061
Переход к родительской папке1740
Скачивание вложения1525
Просмотр карточки документа1419
Выдача токена57
Сравнение с Nuxeo

Прикладной слой Руксео стоит в 2,2–2,5 раза больше процессора

Руксео построен на платформе Nuxeo. Замер Nuxeo на том же стенде, корпусе того же объёма и тех же сценариях показывает, во что обходится прикладной слой Руксео.

ПоказательNuxeoРуксеоОтношение
Процессор узла на один цикл из 10 вызовов, %0,902,0–2,2×2,2–2,5
Ёмкость трёх узлов, вызовов/с1 100550–600×0,5–0,55
p95 на трёх узлах при 300 вызовах/с, мс61149×2,4
Загрузка узлов при 300 вызовах/с, %11–1223×2
Ёмкость одного узла, вызовов/с800350–400×0,45–0,5

Три узла в обоих замерах работали в одинаковой конфигурации.

Пересчёт в пользователей

Три узла — около 2 250 активных пользователей

Это оценка, приводим всю сетку и формулу. Рабочую точку берём ниже ёмкости, с запасом на пики: 500 вызовов в секунду для трёх узлов, 300 для одного.

пользователей = вызовов в секунду × 3600 / (действий в час × вызовов на действие)
Действий в час на пользователя10 вызовов на действие20 вызовов40 вызовов
209 0004 5002 250
404 5002 2501 125
603 0001 500750

Три узла, 500 вызовов в секунду. Для одного узла умножьте на 0,6: центральная оценка — 1 350 пользователей. Центральная оценка — 40 действий в час, то есть одно действие в полторы минуты, и 20 вызовов API на действие.

Разброс больше чем в десять раз

От 750 до 9 000 пользователей на одних и тех же трёх узлах. Весь разброс — в двух множителях: сколько действий в час совершает сотрудник и сколько вызовов API стоит одно действие в интерфейсе.

Как превратить оценку в замер

Нужны три числа вашего проекта: доли операций, действий в час на активного сотрудника и отношение пикового часа к среднему. С ними профиль прогоняется на стенде так же, как описано ниже.

Методика

Как мерили

Цикл из десяти вызовов

Выдача токена, создание документа, просмотр карточки, скачивание вложения, список папки, переход к родительской папке, атрибутивный поиск и три полнотекстовых поиска. По одному вызову каждого вида, доли равные. Пять учётных записей, одна из них — администратор.

Корпус 1,05 млн документов

1 000 000 входящих документов с заполненными реквизитами и 50 000 с вложениями, в 2 001 папке. Узкий поисковый признак находит около 100 документов, групповой — около 10 000. Перед замерами корпус и поисковый индекс проверены на полноту.

Лестница нагрузки

Ступени по 100 вызовов в секунду. Разгон 60 с, затем 240 с устоявшейся нагрузки, первые 30 с не учитываются. Три прогона на ступень, в зачёт медиана. Между прогонами созданные документы удаляются, очереди индексации разбираются. Первый прогон после перезапуска узлов в результаты не входит. Генератор нагрузки загружен не выше чем на 13 %.

Когда лестница останавливается

Медиана p95 выше 2 с, отказов больше 1 % или процессор узла выше 85 %. Ёмкость — диапазон между последней ступенью с фоновой задержкой и ступенью, где система выходит на предел.

Стенд

Два физических хоста и генератор снаружи

На первом хосте только узлы платформы и база. Поисковый индекс и брокер сообщений стоят на втором, остальные служебные машины вынесены с первого. Генератор нагрузки работает вне обоих хостов.

РольМашинаПрограммное обеспечение
Хост 1AMD EPYC 7K62, 48 ядер / 96 потоков, 320 ГБProxmox VE 9
Хост 22 × Intel Xeon E5-2696 v4, 44 ядра / 88 потоков, 196 ГБProxmox VE 9
Сеть между хостами1 Гбит/с
Узлы платформы, 3 шт., хост 116 vCPU, 48 ГБ, куча JVM 24 ГБРуксео 2025.20.0-ruxeo.1, Nuxeo 2025.20, JDK 21, Debian 13; 50 потоков на узел
База данных, хост 132 vCPU, 64 ГБPostgreSQL 16, shared_buffers 16 ГБ
Поисковый индекс, хост 248 vCPU, 64 ГБ, куча 16 ГБOpenSearch 2.19, один узел
Брокер сообщений, хост 24 vCPU, 8 ГБApache Kafka 3.9
Балансировщик4 vCPU, 4 ГБHAProxy 3.0
Файловое хранилище4 vCPU, 8 ГБNFS
Генератор нагрузки8 vCPU, вне хостовGatling 3.11, JDK 21
Честные границы

Где эти числа перестают работать

Профиль синтетический

Каждый десятый вызов создаёт документ: на 500 вызовах в секунду это 180 000 документов в час. Поиск занимает 40 % вызовов, доступ к документам равномерный, правок, версий и маршрутов нет. Смещения разнонаправлены, поэтому поправочного коэффициента не существует.

Один объём корпуса

Всё снято на 1,05 млн документов, и рабочий набор целиком помещался в память базы: 99,99 % чтений из буфера. По нашей оценке, на этом стенде так будет до 2,5–3 млн документов. Что будет дальше, не измерено.

Прикинем нагрузку вашего проекта

Пришлите число сотрудников, основные сценарии и пиковые часы. Разберём, какая конфигурация нужна, и где оценку стоит заменить замером.