Я новичок в сочетании apache и django и, откровенно говоря, довольно наивен в отношении того, как обрабатывается многопоточность. В частности, я работаю на сервере Windows, поэтому я знаю, что MPM основан только на потоках.
У меня есть приложение, которое обслуживает страницы веб-сайта, и другое приложение, которое выполняет фоновый процесс с интенсивным использованием ЦП, который происходит время от времени и занимает около 30 секунд. Я беспокоюсь, что могу столкнуться с проблемами производительности и у меня возникнет несколько вопросов, надеюсь, они также помогут другим ...
Спасибо
Для общего чтения см .:
Как apache распределяет параллельные запросы между потоками?
Для многопоточной конфигурации существует пул предварительно созданных потоков. Когда поступает новый запрос, он передается для обработки одному из доступных потоков в пуле. Когда закончите, поток возвращается в пул.
Как apache распределяет одновременные запросы между процессорами?
Это не так, если поток выполняется в любой конкретный момент времени, это определяется операционной системой. Потоки не привязаны к конкретному процессору Apache, поэтому выполнение может перемещаться.
Создает ли каждый запрос отдельный поток?
Для веб-запросов, обрабатываемых Apache, ответ отрицательный.
Могу ли я вручную указать определенное приложение для запуска на отдельном процессоре?
Есть способы, которыми вы можете установить привязку к процессору для привязки процессов к процессорам, но то, как вы это делаете, зависит от системы. Насколько мне известно, сам Apache не предоставляет какого-либо механизма настройки для этого.
Как несколько потоков читают / записывают в одну и ту же базу данных?
Осторожно. Обычно обо всем этом заботится процесс сервера базы данных, поэтому вам не о чем беспокоиться. В клиенте вам необходимо убедиться, что каждый поток использует свое собственное соединение с базой данных, создавая одно для каждого запроса, или у вас есть пул соединений с базой данных, а потоки захватывают соединение из пула, когда это необходимо, и возвращают его, когда сделано.
Обратите внимание, что это предполагает базу данных, доступ к которой осуществляется через серверный процесс. Если вы используете базу данных на основе файловой системы, то клиентская библиотека базы данных должна гарантировать безопасность многопоточного доступа.
Что произойдет, если у меня будет несколько таких машин, например, работающих на EC2 и имеющих более одного экземпляра? Как распределяются запросы?
Для распределения запросов вам понадобится какой-то внешний балансировщик нагрузки. Это может быть правильный балансировщик нагрузки, или вы можете использовать интерфейс nginx в качестве прокси.