Помимо аппаратного обеспечения, что влияет на производительность с точки зрения количества одновременно работающих пользователей?
Я разрабатываю API и хочу (конечно) оптимизировать производительность с точки зрения количества одновременно работающих пользователей.
Я провел несколько тестов с использованием Blitz (мое приложение на Appfog, PHP, 512MB, 1 экземпляр) в соответствии с этими тестами, мой API может обрабатывать 11 одновременных пользователей, прежде чем время отклика станет слишком высоким (>1000 мс).
Для меня это удивительно мало. Я могу добавить больше оперативной памяти и экземпляров для улучшения результатов, но я подозреваю, что мой код может быть умнее.
Я провел несколько тестов, всегда с одним и тем же оборудованием. Результатом является число одновременных пользователей до превышения времени отклика более 1000 мс.
- Используя мой реальный API (с db-запросами) -> 11 пользователей
- Использование скрипта, который просто выводит текст (минимальная обработка) -> 40 пользователей
- Использование скрипта с функцией sleep(2) для имитации длительного времени отклика -> 52 пользователя (до превышения (2000 + 1000 мс)
- Использование сценария с интенсивным использованием памяти (сборка данных с помощью цикла for): 95 пользователей
Я действительно не вижу никакой корреляции в результатах (каждый тест был проведен много раз с похожими результатами). Чем больше обработки для скрипта - тем больше одновременных пользователей?
Что это влияет на количество одновременных пользователей (кроме конфигурации оборудования)?
1 ответ
Обычно есть два аспекта, о которых вы должны подумать:
узкие места, такие как базы данных или внешние API. Вы медленный как самый медленный компонент
ищите блокировки, которые превращают ваш параллельный код в последовательный. Смотрите: закон Амдаля
Второй момент связан с первым. База данных или все, что вы используете в своем коде, может быть внутренне синхронизировано или не справляться с параллелизмом.