Помимо аппаратного обеспечения, что влияет на производительность с точки зрения количества одновременно работающих пользователей?

Я разрабатываю API и хочу (конечно) оптимизировать производительность с точки зрения количества одновременно работающих пользователей.

Я провел несколько тестов с использованием Blitz (мое приложение на Appfog, PHP, 512MB, 1 экземпляр) в соответствии с этими тестами, мой API может обрабатывать 11 одновременных пользователей, прежде чем время отклика станет слишком высоким (>1000 мс).

Для меня это удивительно мало. Я могу добавить больше оперативной памяти и экземпляров для улучшения результатов, но я подозреваю, что мой код может быть умнее.

Я провел несколько тестов, всегда с одним и тем же оборудованием. Результатом является число одновременных пользователей до превышения времени отклика более 1000 мс.

  • Используя мой реальный API (с db-запросами) -> 11 пользователей
  • Использование скрипта, который просто выводит текст (минимальная обработка) -> 40 пользователей
  • Использование скрипта с функцией sleep(2) для имитации длительного времени отклика -> 52 пользователя (до превышения (2000 + 1000 мс)
  • Использование сценария с интенсивным использованием памяти (сборка данных с помощью цикла for): 95 пользователей

Я действительно не вижу никакой корреляции в результатах (каждый тест был проведен много раз с похожими результатами). Чем больше обработки для скрипта - тем больше одновременных пользователей?

Что это влияет на количество одновременных пользователей (кроме конфигурации оборудования)?

1 ответ

Решение

Обычно есть два аспекта, о которых вы должны подумать:

  • узкие места, такие как базы данных или внешние API. Вы медленный как самый медленный компонент

  • ищите блокировки, которые превращают ваш параллельный код в последовательный. Смотрите: закон Амдаля

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

Другие вопросы по тегам