Сколько экземпляров Tornado и сколько рабочих процессов Nginx

Предположим, я запускаю веб-приложение с помощью Tornado и запускаю его за Nginx в качестве балансировщика нагрузки. Расскажите мне рекомендации для некоторых вещей.

1. Если я запускаю службу в экземпляре AWS EC2, сколько рабочих процессов NGINX следует запускать для данного x количество VCPU для любого конкретного экземпляра. Допустим, я работаю на экземпляре EC2 с 2 VCPU, тогда сколько рабочих процессов мне нужно запустить? Было бы лучше, если бы я знал общее правило для этого. Кроме того, при каких условиях я должен увеличить число рабочих против общего правила?

2. Теперь, когда я установил Nginx в качестве балансировщика нагрузки, все сводится к моему приложению Tornado. Итак, сколько экземпляров Tornado следует запустить при x числе VCPU в экземпляре EC2? Как упоминалось в документе, хорошо иметь 1 экземпляр на процессор, но является ли это наилучшим условием? Если да, то в каком сценарии я должен искать увеличение количество экземпляров на процессор? Если нет, то какое правило лучше?

ПРИМЕЧАНИЕ. Я запускаю экземпляры через Supervisord в качестве программы управления процессами.

3. Теперь, если мое приложение выполняет много асинхронных вызовов к базе данных MySQL и серверу MongooseIM, все они работают на тот же хост, следует ли изменить количество экземпляров Tornado на процессор? Если да, то каково правило? Если нет, то какова наилучшая практика?


person Anirban Roy Das    schedule 14.02.2016    source источник


Ответы (1)


  1. Если вы запускаете nginx на отдельном компьютере, вы должны предоставить ему столько рабочих процессов, сколько у вас есть процессоров. Если вы используете его на той же машине, что и Tornado, то вы, вероятно, захотите дать ему меньше (может быть, всего один). Но здесь лучше быть слишком большим, чем слишком низким, поэтому, если вы не уверены, можно использовать количество процессоров. Вам понадобится больше воркеров nginx, если вы используете TLS (особенно с более сильными настройками безопасности) или обслуживаете много статических файлов, и меньше, если это просто прокси для Tornado.

  2. Один экземпляр Tornado на процессор — лучшая отправная точка. Вы можете уменьшить это число, если ваше приложение много работает с потоками или если на том же компьютере выполняются другие вещи, и вы можете увеличить его, если вы выполняете какие-либо синхронные вызовы базы данных/сети без потоков.

  3. Пока ваши вызовы базы данных являются асинхронными, они не влияют на количество процессов Tornado, которые вы должны запустить.

person Ben Darnell    schedule 14.02.2016
comment
Для пункта №. 1. Итак, если я запускаю Nginx отдельно на машине, нет. процессоров - мой лучший выбор. И если я запускаю его одновременно с другими программами, такими как Tornado, MySQL, например, то уменьшение числа — хороший вариант. Так это потому, что нужно отдать другим программам долю процессоров вместо того, чтобы отдать большую часть рабочим Nginx? Это причина? - person Anirban Roy Das; 15.02.2016
comment
Кроме того, в соответствии с тем, что вы упомянули об увеличении нет. воркеров nginx при использовании TLS. А что, если я скажу, что отдаю статические файлы через nginx, а динамическое содержимое храню через Tornado. Повсюду через TLS, https, а также включает bcrypt с интенсивным использованием процессора для хеширования паролей. Так как насчет нет. рабочих nginx и нет. экземпляров Tornado сейчас? Каково правило? Не говоря уже о 2 процессорах, а также о 4 процессорах, а затем скажите мне, что для общего x нет. процессоров. - person Anirban Roy Das; 15.02.2016
comment
Правил нет; единственный способ определить, какое разделение подходит для вашего приложения, — это провести собственное нагрузочное тестирование. - person Ben Darnell; 15.02.2016