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

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

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

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

Главное

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

650–700

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

350–400

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

×1,8

даёт переход с одного узла на три. Предел кластера — процессор узлов: в среднем 82 %, в пике до 90 % на 700 вызовах.

×2,5

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

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

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

Нагрузка подаётся ступенями по 100 вызовов в секунду. Три узла проходят ступени 300–600 с p95 от 0,14 до 0,25 с. На 700 кластер обрабатывает 96 % поданного, p95 вырастает до 2,1 с, а процессор узлов загружен в среднем на 82 %, в пике до 90 %: это предел.

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

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

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

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

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

3 узла 1 узел вся нагрузка
УзловПодано, вызовов/сОбработано, вызовов/с p50, мсp95, мсp99, мс CPU узлов, %CPU базы, %CPU индекса, %Отказов
1300300452033356814130
1400399753364638521180
3300300351431622411130
3400399361501963217180
3500499452003364427220
3600600502433735835250
37006691 3002 0772 4028259300

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

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

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

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

Операцияp50, мсp95, мс
Полнотекстовый поиск по метаданным, около 100 совпадений200316
Полнотекстовый поиск по содержимому вложений, около 100 совпадений200288
Полнотекстовый поиск по групповому признаку, около 10 000 совпадений103262
Атрибутивный поиск по полям карточки187301
Список документов папки94235
Создание документа4671
Переход к родительской папке1943
Скачивание вложения1830
Просмотр карточки документа1524
Выдача токена59
Сравнение с Nuxeo

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

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

ПоказательNuxeoРуксеоОтношение
Процессор узла на один цикл из 10 вызовов, %0,902,2–2,3×2,5
Ёмкость трёх узлов, вызовов/с1 100650–700×0,6
p95 на трёх узлах при 300 вызовах/с, мс61143×2,3
Загрузка узлов при 300 вызовах/с, %11–1224×2
Ёмкость одного узла, вызовов/с800350–400×0,45–0,5
Пересчёт в пользователей

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

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

пользователей = вызовов в секунду × 3600 / (действий в час × вызовов на действие)
Действий в час на пользователя10 вызовов на действие20 вызовов40 вызовов
2010 8005 4002 700
405 4002 7001 350
603 6001 800900

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

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

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

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

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

Методика

Как мерили

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

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

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

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

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

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

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

Медиана 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 Гбит/с
Сетевые карты машинvirtio, многоочередные: 4 очереди у базы, 2 у узлов
Узлы платформы, 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, один узел
Брокер сообщений, хост 14 vCPU, 8 ГБApache Kafka 3.9
Балансировщик, хост 14 vCPU, 4 ГБHAProxy 3.0
Файловое хранилище, хост 14 vCPU, 8 ГБNFS
Генератор нагрузки8 vCPU, вне хостовGatling 3.11, JDK 21
Честные границы

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

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

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

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

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

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

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