Назад | Перейти на главную страницу

uWSGI Режим виртуального хоста с сенсорной перезагрузкой

Пока я экспериментировал с uWSGI для замены большого количества беспорядочного серверного кода, который создает и настраивает приложения Python wsgi под контролем. Я запускаю сразу десятки таких небольших проектов (Django, Flask, другие).

В настоящее время я работаю Виртуальный хост mode, и я разрешаю NGINX вызывать приложения по своему желанию. Однако, похоже, функция перезагрузки «касание-перезагрузка» предназначена для определенного файла.

Есть ли способ использовать «сенсорную перезагрузку» для мониторинга работающего модуля, указав его для каждого сайта или автоматически? Или есть способ разрешить настройку сенсорной перезагрузки для каждого приложения?

Я также посмотрел на император mode, который, кажется, мог бы быть немного менее замечательной заменой, но я не уверен, что мой вариант использования приведет к появлению десятков, если не сотен процессов. Мне нравится режим виртуального хоста, потому что он, по сути, разделяет пул рабочих со всеми приложениями, мне это кажется наиболее эффективным.

Текущие конфигурации:

uWSGI

<uwsgi>
    <vhost-host/>
    <master/>
    <gid>www-data</gid>
    <uid>www-data</uid>
    <catch-exceptions/>
    <socket>/var/tmp/uwsgi.sock</socket>
    <chmod-socket/>
    <idle>300</idle>
    <processes>6</processes>
    <no-orphans/>
    <enable-threads/>
    <reload-mercy>5</reload-mercy>
    <threads>10</threads>
    <no-default-app/>
    <touch-reload/>
    <!-- <reload-on-rss>128</reload-on-rss> Reload at 128MB of RSS (memory usage) -->
</uwsgi>

Обновить:

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

Я пытаюсь позволить редко используемым приложениям не занимать ресурсы, а часто используемым приложениям требуется больше ресурсов. Я пытаюсь сделать это, поддерживая развертывание хостинга таким же простым, как PHP-FPM. Виртуальный режим достигает этого, но, похоже, выключает всех рабочих только после того, как все приложения простаивают, что бесполезно, если какое-либо приложение получает постоянный поток трафика. Я бы хотел, чтобы меня исправили по этому поводу, если это неправда.

Обратной стороной использования режима императора является то, что мне придется создавать файлы сокетов и файлы конфигурации для каждого приложения (черт возьми!). Я все же хотел бы знать, возможно ли реализовать перезагрузку для каждого приложения, как упоминалось выше.

вы должны спросить об этом в официальном списке рассылки, все ваши утверждения верны, поэтому вам следует попытаться попросить улучшить список.

Если вы запускаете несколько приложений, вы, вероятно, захотите emperor режим, который заменил vhost режим для большинства случаев использования (включая то, что вы описываете).

Для динамического масштабирования рабочих мест во всех приложениях у вас есть несколько вариантов.

Наверное, самый простой uWSGI's cheaper подсистема. Он предоставляет очень детализированные элементы управления для установки минимального и максимального количества рабочих для каждого приложения, а также принудительное применение глобального ограничения памяти для всех приложений (так что у вас не будет полного взрыва, если все приложения резко увеличиваются одновременно).

Если вам нужен единый пул рабочих, которые используются во всех приложениях (вместо того, чтобы вращать рабочих вверх / вниз для каждого приложения), то чуть более сложным решением будет Emperor + Broodlord + Zergs. Лучше всего начать с официальных документов по режиму Broodlord: http://uwsgi-docs.readthedocs.org/en/latest/Broodlord.html