·
Какую нагрузку держит Versola на один узел и сколько это стоит
Замер в Yandex Cloud Казахстан: один узел 8 vCPU с одним pod auth и одним pod edge выдерживает около 2 350 шагов в секунду, три узла — около 4 680. Пропускная способность, задержки, накладные расходы edge, CPU, нагрузка на БД и стоимость в месяц в долларах.
Нам нужна была одна цифра, которую можно показать техническому директору: сколько узлов требует заданная нагрузка и сколько это стоит в месяц. В статье эта цифра и способ, которым мы ее получили.
Коротко: на сборке 0.7 один узел 8 vCPU с одним pod auth и одним pod edge держит около 2 350 шагов в секунду в пределах заданных задержек. Три таких узла — около 4 680. Цена этой емкости в Yandex Cloud Казахстан в пересчете на доллары приведена ниже. «Шаг» — один запрос пользовательского сценария: бизнес-вызов через edge, обновление токена, обмен кода, шаг входа или выход.
* Прайс-лист Yandex Cloud Казахстан, с НДС, пересчет по курсу 1 $ = 450 ₸. Цены приблизительные и могут меняться.
Что мы измеряли
Стенд — кластер Kubernetes в зоне kz1-a. Узлы: 8 vCPU, 16 ГБ RAM, Intel Ice Lake. Базы данных — управляемый PostgreSQL: одна для auth и central, одна для edge. Генератор нагрузки на отдельных узлах гоняет миллион зарегистрированных пользователей через полный набор сценариев: вход по OTP, паролю или passkey, обновление токена, обмен кода, step-up, бизнес-вызовы через edge к upstream API и выход.
Две детали важны для чтения результатов.
- Upstream API — заглушка, а коды OTP фиктивные, поэтому цифры описывают работу самой Versola, а не SMS-шлюза или настоящего бизнес-сервиса. Проверка пароля — настоящий Argon2.
- Pod одинаковы на каждом узле: каждый pod
authиedgeзапрашивает 2 CPU, не имеет лимита CPU и лимит памяти 1 ГиБ (heap JVM 512 МиБ). На узле ровно один podauthи один podedge, поэтому добавление узла добавляет целую пару.
Нагрузка растет ступенями. Каждая ступень: 1 минута прогрева, 4 минуты разгона и 6 минут плато, цифры взяты с плато. Ступень проходит, если доля сбоев ниже 2% и задержки в пределах порогов (p99 обновления токена меньше 250 мс, p99 бизнес-вызова меньше 300 мс). Сбойная ступень повторяется один раз. «Без сбоев» — последняя пройденная ступень.
Емкость по числу узлов
| Узлов | Без сбоев, шагов/с | На узел | Доля от линейного | p99 обновления токена | p99 обмена кода |
|---|---|---|---|---|---|
| 1 | 2 352 | 2 352 | 100% | 44 мс | 54 мс |
| 2 | 3 639 | 1 819 | 77% | 27 мс | 32 мс |
| 3 | 4 679 | 1 560 | 66% | 26 мс | 29 мс |
Емкость растет не по прямой. Колонку «доля от линейного» стоит читать с поправкой на лестницу: нагрузка росла крупными шагами, поэтому последняя чистая ступень — нижняя граница. На ступень выше установки на два и три узла не рухнули. Они продолжали обслуживать 4 260 шагов/с (два узла, 90% от линейного) и 5 630 шагов/с (три узла, 80%) с долей сбоев менее 0,1%, но с p99 от 2,7 до 3,4 секунды, то есть вне порога.
Из чего состояла нагрузка
В секунду на одном узле, на чистой ступени:
| Тип шага | В секунду | Доля |
|---|---|---|
| Бизнес-вызовы через edge | 1 052 | 55% |
| Обновления токена | 454 | 24% |
| Вход: authorize, телефон, challenge, PAR | 243 | 13% |
| Обмены кода авторизации | 46 | 2% |
| Ввод OTP | 40 | 2% |
| Выходы | 33 | 2% |
| Проверки passkey | 24 | 1% |
| Проверки пароля (Argon2) | 12 | 1% |
На двух и трех узлах доли сохраняются. Отношение обновлений токена к обменам кода равно 10, это верхняя граница целевого профиля (5–10 обновлений на один обмен кода).
Работа между двумя сервисами делится так, на одном узле:
| Сервис | Запросов в секунду | Что обрабатывает |
|---|---|---|
edge | 1 554 | проксирование ресурсов 989, эндпоинты мобильных приложений 508, сессии и выход 18, прочее 38 |
auth | 980 | обновление токена 421, вход (authorize, PAR, challenge) 322, userinfo 157, обмен кода 62, прочее 19 |
Один бизнес-вызов — один запрос к edge и, у части вызовов, дополнительный запрос userinfo или refresh к auth, поэтому на одни и те же шаги два сервиса видят разное число запросов. На трех узлах: 3 133 запроса в секунду на edge и 1 967 на auth.
Задержки и накладные расходы edge
Накладные расходы edge — то, что edge добавляет к проксируемому вызову сам, не считая времени ожидания upstream. Их измеряет гистограмма proxy-overhead самого edge.
| 1 узел | 2 узла | 3 узла | |
|---|---|---|---|
| Накладные расходы edge, p50 | 2,0 мс | 1,8 мс | 1,7 мс |
| Накладные расходы edge, p99 | 23,5 мс | 18,2 мс | 11,0 мс |
| p99 обновления токена | 44 мс | 27 мс | 26 мс |
| p99 обмена кода | 54 мс | 32 мс | 29 мс |
| p99 проверки пароля (Argon2) | 155 мс | 111 мс | 108 мс |
| p99 проверки passkey | 61 мс | 47 мс | 44 мс |
На одном узле p99 выше, потому что этот прогон был ближе всего к своему пределу.
Ресурсы
На трех узлах, на чистой ступени:
- CPU: 2,1 ядра на 1 000 шагов/с в сумме,
auth1,01 иedge1,14. Поды достигают пика 5,3 и 5,9 ядра из 24 доступных, то есть на этой нагрузке 53% кластера не занято. - Память: пик 870 МиБ на pod
authи 775 МиБ на podedgeпри лимите 1 ГиБ. Сборка мусора занимает 1,5–1,6% времени. - База данных: база
authобрабатывает 7 347 транзакций в секунду и пишет 648 КиБ/с WAL. Приложение использует в среднем 7 соединений с базой, на пике 15.
Почему мы считаем в узлах, а не в pod
У pod auth и edge есть CPU request, но нет CPU limit, поэтому под нагрузкой pod забирает столько ядер, сколько свободно на узле. В прошлых прогонах один pod auth доходил до 7,4 из 7,9 доступных ядер. Потолок — это CPU узла, который делят его auth, edge и системные pod. Добавление pod на уже занятый узел ничего не дает, а добавление узла добавляет целую пару.
Сколько это стоит
Цены — прайс-лист Yandex Cloud Казахстан, с НДС, в месяц, пересчет по курсу 1 $ = 450 ₸. Они приблизительные и могут меняться.
| Статья | $ в месяц* |
|---|---|
| Мастер Kubernetes (зональный, 2 vCPU / 8 ГБ) и его публичный IP | $100 |
PostgreSQL для auth и central (c3-c8-m16, 150 ГБ SSD) | $306 |
PostgreSQL для edge (c3-c4-m8, 50 ГБ SSD) | $147 |
| Фиксированная часть | $553 |
| Один рабочий узел (8 vCPU, 16 ГБ RAM, 64 ГБ SSD) | $188 |
| Узлов | Планируемая нагрузка, шагов/с | $ в месяц* | $ за 1 000 планируемых шагов/с* |
|---|---|---|---|
| 1 | 1 647 | $741 | $450 |
| 2 | 2 547 | $928 | $364 |
| 3 | 3 275 | $1 116 | $341 |
Стоимость за 1 000 шагов/с — это месячный итог, деленный на планируемую нагрузку, а она равна 70% от чистой цифры. С ростом числа узлов стоимость падает, потому что фиксированную часть делят больше узлов. Рост стоит $114* в месяц за каждые следующие 1 000 планируемых шагов/с: это еще один узел, $188*, деленный на планируемую нагрузку одного узла. Считаются только узлы. Базы данных в этом тесте не росли и не нагружались выше примерно 4 000 шагов в секунду.
Цены взяты из публичного каталога Yandex Cloud Казахстан (список SKU биллинга, выгружен 16.10.2026) и применены к реальной конфигурации стенда: vCPU, RAM и диск каждого узла и хоста базы данных, 730 часов в месяц. Не учтены: сетевой балансировщик перед ingress (около $11* в месяц), исходящий трафик, дополнительное хранилище резервных копий и техподдержка.