Увидел свет сервер приложений NGINX Unit 0.3

Доступен третий публичный выпуск сервера приложений NGINX Unit, в рамках которого развивается решение для обеспечения запуска web-приложений на различных языках программирования. Проект пока находится на стадии бета-тестирования и не рекомендован для промышленного использования. Код написан на языке Си и распространяется под лицензией Apache 2.0.

Под управлением NGINX Unit может одновременно выполняться несколько приложений на разных языках программирования, в том числе могут сочетаться разные версии языков (например, PHP 5 и PHP 7, Python 2.7 и Python 3.4). В настоящий момент поддерживаются Python, PHP и Go, а на будущее запланирована поддержка JavaScript/Node.js, Java и Ruby. NGINX Unit может обслуживать отдачу динамического контента как самостоятельно, так и работать в тандеме с http-сервером nginx, который в этом случае выступает в роли балансировщика, кэша или сервера для отдачи статического контента.

NGINX Unit предоставляет возможность динамического изменения параметров запуска приложений через специальный RESTful JSON API, без необходимости правки файлов конфигурации и перезапуска (ответ на потребность пользователей nginx в возможностях ».htaccess»). Доступ к API может быть организован через UNIX domain socket или TCP, что позволяет управлять работой сервера приложений удалённо и централизовано. Изменение настроек не приводит к перезапуску рабочих процессов — меняются только содержимое структур в памяти, что сводит к минимуму накладные расходы и позволяет менять параметры с любой интенсивностью.

0_1508487083.png

Работу NGINX Unit обеспечивает несколько взаимодействующих процессов: процесс управления конфигурацией, основной процесс для запуска обработчиков web-приложений и многопоточный процесс для маршрутизации вызовов, транслирующий внешние запросы к web-приложениям. Процесс маршрутизации в свою очередь состоит из координатора запросов и рабочих нитей, которые принимают запросы клиентов, направляют их web-приложениям и возвращают ответ. Каждая рабочая нить может работать в асинхронном режиме и обслуживать тысячи одновременных соединений. С правами root выполняется только главный управляющий процесс, а все остальные обработчики запускаются под отдельными непривилегированными пользователями.

Изменения в новой версии:

  • Добавлена опция «limits.requests» для ограничения числа запросов к web-приложению (после выполнения заданного числа запросов обработчик завершает свою работу);
  • Добавлена опция «limits.timeout» для задания таймаута выполнения web-приложения, без учёта времени запуска и нахождения в очереди;
  • С целью минимизации задержек проведена оптимизация кода обработки запросов к web-приложениям;
  • Добавлена поддержка HTTP-соединений в режиме keep-alive;
  • Для настройки виртуальных окружений Python добавлена опция «home»;
  • Для Python добавлена возможность создания обработчиков выхода при помощи модуля atexit;
  • Усовершенствован модуль для языка Go, который переименован в «nginx/unit».

© OpenNet