Какое соотношение процессов и потоков должно быть на моем веб-сервере?

Если я запускаю приложение Ruby, поддерживаемое веб-сервером, таким как Puma, который позволяет комбинировать процессы и потоки, какое количество каждого я должен использовать? Предполагая, что мой код, конечно, потокобезопасен (и я использую реализацию Ruby, которая поддерживает собственные потоки). Конечно, я не прошу конкретных цифр, а просто общие соотношения, которые теоретически работают лучше, чем другие.

Если потоки намного быстрее, потому что они используют мало памяти, то не должен ли я использовать только потоки? Но опять же, я слышал, что лучше всего использовать гибридные модели (комбинации потоков и процессов). Я также слышал, что я должен сопоставить количество процессов с количеством ядер; это правда?


person janko-m    schedule 05.02.2015    source источник


Ответы (1)


Вероятно, это не то, что вы хотите услышать, но: Это зависит от обстоятельств. Я думаю, что даже давать пропорции довольно сложно. Есть много переменных, которые могут влиять на производительность (HW, вероятно, самая большая: оперативная память, количество ядер и т. д.).

Я столкнулся с «похожим вопросом», когда я хотел узнать, какое количество unicorn worker (работников приложений) и воркеров nginx будет лучшим для моего приложения (и какое влияние окажет кэширование).

Лучший способ, который я нашел для ответа на такой вопрос, — запустить несколько тестов. Вот более или менее то, что я сделал:

Я написал скрипт, который запускал скачку Apache (ab) 3 раза на несколько URL-адресов, которые я хотел проверить.

function run_apache_bench() {
  ab -n $N -c $C -g "results/${ID}/root_${1}.tsv"  url1
  ab -n $N -c $C -g "results/${ID}/index_${1}.tsv" url2
  ab -n $N -c $C -g "results/${ID}/show_${1}.tsv" url3
}

На разных контейнерах докера с разным количеством воркеров. (На идентичном оборудовании, которое использовалось в производстве.) Затем я построил результаты с помощью gnuplot и получил что-то вроде этого:

Пример с 2 воркерами unicorn и 1 воркером nginx:

введите здесь описание изображения

Пример с 4 воркерами unicorn и 4 воркерами nginx:

введите здесь описание изображения

Бонусный пример: вот резкое улучшение производительности с включением «кэширования матрешки» :)

введите здесь описание изображения

Но я хочу указать на некоторые ошибки:

  • Я не измерял использование памяти
  • Скамья Apache не «запускает» запросы javascript/css (активы), что означает, что я просто измерял рендеринг html.
  • Было непросто настроить тесты (автоматизировать создание контейнеров и т. д.).

Надеюсь, это поможет вам.

person wpp    schedule 05.02.2015