Кластер из трёх узлов обслуживает 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.
вызовов API в секунду держит кластер из трёх узлов. До 600 вызовов p95 не выше 0,25 с.
вызовов в секунду держит один узел. Его предел — процессор: 93 % на 400 вызовах.
даёт переход с одного узла на три. Предел кластера — процессор узлов: в среднем 82 %, в пике до 90 % на 700 вызовах.
больше процессорного времени тратит Руксео на ту же работу, чем платформа Nuxeo без прикладного слоя.
Нагрузка подаётся ступенями по 100 вызовов в секунду. Три узла проходят ступени 300–600 с p95 от 0,14 до 0,25 с. На 700 кластер обрабатывает 96 % поданного, p95 вырастает до 2,1 с, а процессор узлов загружен в среднем на 82 %, в пике до 90 %: это предел.
Секунды, логарифмическая шкала. Линия — медиана прогонов, точки — отдельные прогоны.
Вызовов API в секунду. Пунктир — обработано всё, что подано.
| Узлов | Подано, вызовов/с | Обработано, вызовов/с | p50, мс | p95, мс | p99, мс | CPU узлов, % | CPU базы, % | CPU индекса, % | Отказов |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 300 | 300 | 45 | 203 | 335 | 68 | 14 | 13 | 0 |
| 1 | 400 | 399 | 75 | 336 | 463 | 85 | 21 | 18 | 0 |
| 3 | 300 | 300 | 35 | 143 | 162 | 24 | 11 | 13 | 0 |
| 3 | 400 | 399 | 36 | 150 | 196 | 32 | 17 | 18 | 0 |
| 3 | 500 | 499 | 45 | 200 | 336 | 44 | 27 | 22 | 0 |
| 3 | 600 | 600 | 50 | 243 | 373 | 58 | 35 | 25 | 0 |
| 3 | 700 | 669 | 1 300 | 2 077 | 2 402 | 82 | 59 | 30 | 0 |
Медианы прогонов по окну устоявшейся нагрузки: три на ступень для трёх узлов, два для одного. CPU — средняя загрузка машины за то же окно; для трёх узлов — среднее по узлам. Один узел на 400 вызовах в пике загружен на 93 %.
Три узла, 600 вызовов в секунду — рабочая точка кластера. Медианы трёх прогонов.
| Операция | p50, мс | p95, мс |
|---|---|---|
| Полнотекстовый поиск по метаданным, около 100 совпадений | 200 | 316 |
| Полнотекстовый поиск по содержимому вложений, около 100 совпадений | 200 | 288 |
| Полнотекстовый поиск по групповому признаку, около 10 000 совпадений | 103 | 262 |
| Атрибутивный поиск по полям карточки | 187 | 301 |
| Список документов папки | 94 | 235 |
| Создание документа | 46 | 71 |
| Переход к родительской папке | 19 | 43 |
| Скачивание вложения | 18 | 30 |
| Просмотр карточки документа | 15 | 24 |
| Выдача токена | 5 | 9 |
Руксео построен на платформе Nuxeo. Замер Nuxeo на том же стенде, корпусе того же объёма и тех же сценариях показывает, во что обходится прикладной слой Руксео.
| Показатель | Nuxeo | Руксео | Отношение |
|---|---|---|---|
| Процессор узла на один цикл из 10 вызовов, % | 0,90 | 2,2–2,3 | ×2,5 |
| Ёмкость трёх узлов, вызовов/с | 1 100 | 650–700 | ×0,6 |
| p95 на трёх узлах при 300 вызовах/с, мс | 61 | 143 | ×2,3 |
| Загрузка узлов при 300 вызовах/с, % | 11–12 | 24 | ×2 |
| Ёмкость одного узла, вызовов/с | 800 | 350–400 | ×0,45–0,5 |
Это оценка, приводим всю сетку и формулу. Рабочую точку берём ниже ёмкости, с запасом на пики: 600 вызовов в секунду для трёх узлов, 300 для одного.
| Действий в час на пользователя | 10 вызовов на действие | 20 вызовов | 40 вызовов |
|---|---|---|---|
| 20 | 10 800 | 5 400 | 2 700 |
| 40 | 5 400 | 2 700 | 1 350 |
| 60 | 3 600 | 1 800 | 900 |
Три узла, 600 вызовов в секунду. Для одного узла умножьте на 0,5: центральная оценка — 1 350 пользователей. Центральная оценка — 40 действий в час, то есть одно действие в полторы минуты, и 20 вызовов API на действие.
От 900 до 10 800 пользователей на одних и тех же трёх узлах. Весь разброс — в двух множителях: сколько действий в час совершает сотрудник и сколько вызовов API стоит одно действие в интерфейсе.
Нужны три числа вашего проекта: доли операций, действий в час на активного сотрудника и отношение пикового часа к среднему. С ними профиль прогоняется на стенде так же, как описано ниже.
Выдача токена, создание документа, просмотр карточки, скачивание вложения, список папки, переход к родительской папке, атрибутивный поиск и три полнотекстовых поиска. По одному вызову каждого вида, доли равные. Пять учётных записей, одна из них — администратор.
1 000 000 входящих документов с заполненными реквизитами и 50 000 с вложениями, в 2 001 папке. Узкий поисковый признак находит около 100 документов, групповой — около 10 000. Перед замерами корпус и поисковый индекс проверены на полноту.
Ступени по 100 вызовов в секунду. Разгон 60 с, затем 240 с устоявшейся нагрузки, первые 30 с не учитываются. Три прогона на ступень (на одном узле два), в зачёт медиана. Между прогонами созданные документы удаляются, очереди индексации разбираются. Первый прогон после перезапуска узлов в результаты не входит. Генератор нагрузки загружен в среднем не выше чем на 13 %, в пике на 18 %.
Медиана p95 выше 2 с, отказов больше 1 % или процессор узла выше 85 %. Ёмкость — диапазон между последней ступенью с фоновой задержкой и ступенью, где система выходит на предел.
На первом хосте узлы платформы, база данных, брокер сообщений, балансировщик и файловое хранилище. Поисковый индекс на втором. Генератор нагрузки работает вне обоих хостов.
| Роль | Машина | Программное обеспечение |
|---|---|---|
| Хост 1 | AMD EPYC 7K62, 48 ядер / 96 потоков, 320 ГБ | Proxmox VE 9 |
| Хост 2 | 2 × Intel Xeon E5-2696 v4, 44 ядра / 88 потоков, 196 ГБ | Proxmox VE 9 |
| Сеть между хостами | 1 Гбит/с | |
| Сетевые карты машин | virtio, многоочередные: 4 очереди у базы, 2 у узлов | |
| Узлы платформы, 3 шт., хост 1 | 16 vCPU, 48 ГБ, куча JVM 24 ГБ | Руксео 2025.20.0-ruxeo.1, Nuxeo 2025.20, JDK 21, Debian 13; 50 потоков на узел |
| База данных, хост 1 | 32 vCPU, 64 ГБ | PostgreSQL 16, shared_buffers 16 ГБ |
| Поисковый индекс, хост 2 | 48 vCPU, 64 ГБ, куча 16 ГБ | OpenSearch 2.19, один узел |
| Брокер сообщений, хост 1 | 4 vCPU, 8 ГБ | Apache Kafka 3.9 |
| Балансировщик, хост 1 | 4 vCPU, 4 ГБ | HAProxy 3.0 |
| Файловое хранилище, хост 1 | 4 vCPU, 8 ГБ | NFS |
| Генератор нагрузки | 8 vCPU, вне хостов | Gatling 3.11, JDK 21 |
Каждый десятый вызов создаёт документ: на 600 вызовах в секунду это 216 000 документов в час. Поиск занимает 40 % вызовов, доступ к документам равномерный, правок, версий и маршрутов нет. Смещения разнонаправлены, поэтому поправочного коэффициента не существует.
Всё снято на 1,05 млн документов, и рабочий набор целиком помещался в память базы: 99,99 % чтений из буфера. По нашей оценке, на этом стенде так будет до 2,5–3 млн документов. Что будет дальше, не измерено.
Пришлите число сотрудников, основные сценарии и пиковые часы. Разберём, какая конфигурация нужна, и где оценку стоит заменить замером.