@svtl18

Как решить проблемы с нагрузкой, или как рассчитать харак. VPS?

Добрый день.
У меня был заказ на разработку одного проекта.
Так же в этом проекте я написала АПИ для моб приложение.
Апи позволяет регистрировать пользователей, авторизовывать их, и получать информацию о пользователе.
Проект очень тесно завязан с CRM Rkeeper.
Опишу один процесс, процесс регистрации.
Моб приложение отправляет запрос на регистрацию пользователя, веб сервер в свою очередь :
1. Валидирует данные
2. Создают строку в бд (в таблице пользователей)
3. Отправляет письмо для подтверждения email
4. Обращается к CRM по АПИ - ищет по email пользователя
-- Если есть, то синхронизирует данные сайта с CRM
-- Если нету, то создает в CRM этого пользователя и синхронизирует данные.
5. Обращается к CRM по АПИ и создает карточку лояльности

Это все выполняется синхронно и без очередей.
Клиент провел нагрузочное тестирование и начал жаловаться что все плохо.
Запустили 50 потоков одновременно и выдал такой результат в мс:
Registration:42512,4408
Registration:37837,6567
Registration:40158,8063
Registration:41586,602
Registration:43232,8989
-------------------------
Registration:43027,9108
Registration:31010,2805
Registration:37531,425
Registration:34658,028
Registration:59004,4044

Я разрабатывала только бекенд часть на Laravel. Деплой делала не я. Я не DevOps и ничего в этом не понимаю.
Клиент выбрал хостера - https://hostpro.ua/
Характеристики VPS :
* ЦП - 2ядра x 2.2 Ghz
* Память - 2Gb
* HDD - 30 gb

Поставили там nginx+mysql+php7.2

Вообщем меня обвиняют, и я даже не знаю что им ответить.
Если я сама регистрируюсь, то весь процесс занимает секунд 3-5.
Я даже не знаю как провести стрес нагрузку.

Что скажете ? Где могут быть проблемы ? Может слабый или плохой VPS ? Или может плохо настроили веб сервер ?
Очевидно, что много запросов в CRM, которые по хорошему было бы кинуть в очередь. Но это нельзя делать, так как в ответ на запрос регистрации - приложение должно уже получить номер карты лояльности.

Буду рада любым советам.
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 3
BojackHorseman
@BojackHorseman Куратор тега PHP
...в творческом отпуске...
да в профайлинге все будет видно. xhprof прикрутите, еще раз запустите 50 потоков и гляньте что тупит. зачем гадать, если есть прекрасный инструмент. вот пример

5d827a5d93d13949819938.png
Ответ написан
Sanes
@Sanes
VDS надо тестировать. То, что написано в тарифе может в реальности отличаться в разы.
Ответ написан
@m0zart89
Можно сделать простую трассировку с помощью xdebug.

В начале работы скрипта добавляем, прям в начале ларавелевского index.php в папке public (сделай копию index.php для душевного спокойствия):

<?php

if (!file_exists(dirname(__DIR__)."/xdebug")) {
    mkdir(dirname(__DIR__)."/xdebug");
}
xdebug_start_trace(dirname(__DIR__)."/xdebug/".rand(1,10000));


Передаём случайное число, чтоб при включении стресс-теста при каждом обращении создавался свой файл с трассировкой, костыль, но не суть

Далее получаем файлы в корневой папке ларавеля в папке xdebug, которые имеют вид:
...
0.4393   81359120       -> drupal_alter() /Users/mike/projects/unicorns/includes/menu.inc:508
0.4395   81359264         -> is_array() /Users/mike/projects/unicorns/includes/module.inc:1000
0.4398   81359624         -> module_implements() /Users/mike/projects/unicorns/includes/module.inc:1021
...


Первая колонка - это счётчик времени по выполнению вызванной функции, т.е. например по середине выполнение функции is_array() заняло 0.003 секунды, к примеру.

Анализируем трассировку и выявляем "узкое горлышко".

Возможные варианты:
1) Тормозит API-сервер, необходимо оптимизировать связку nginx + php (маловероятно).
2) Тормозит API CRM, к которому обращается твой API (более вероятно, могут стоять ограничения на подключение и т.п.).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы