Опубликован сервер приложений NGINX Unit 1.31.0, в рамках которого развивается решение для обеспечения запуска web-приложений на различных языках программирования (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js, WebAssembly и Java). Под управлением NGINX Unit может одновременно выполняться несколько приложений на разных языках программирования, параметры запуска которых можно изменять динамически без необходимости правки файлов конфигурации и перезапуска. Код написан на языке Си и распространяется под лицензией Apache 2.0. С особенностями NGINX Unit можно познакомиться в анонсе первого выпуска...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=59699
> Добавлен экспериментальный модуль для выполнения на стороне сервера приложений, скомпилированных в универсальный промежуточный код WebAssembly, который может запускаться в любых ОС и при использовании JIT демонстрирует производительность, близкую к нативному коду.Они изобрели CGI?
Нет, они изобрели Tomcat для вон тех вышеперечисленных. Жаль, что в современном вебе это всё крайне устарело и нужно только для поддержки легаси.
go, php и nodejs крайне устарели в вебе?
попробовал nginx unit -- не зашло. Начнем с того, что в нем нет и половины возможностей обычного нгинкса.
Это не замена nginx. А замена бекенда, вроде uwsgi, php-fpm. Производительность в разы лучше
Можете привести примеры и ссылки для php-fpm? Очень интересно про разы лучше
Шок контент https://habr.com/ru/articles/588785/
> Шок контент https://habr.com/ru/articles/588785/Спасибо
Лучше SCGI?
> демонстрирует производительность, близкую к нативному коду.Т.е. раза в 4 хуже, проверено.
Я так до сих пор и не понял смысл этого NGINX Unit'а. Зачем он нужен? Что он делает?
Позволяет запуск web-приложений на различных языках программирования (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js, WebAssembly и Java).Ваш КО.
> Что он делает?NGINX Unit - это такой сервер приложений.
Сервер приложений - это программа, которая управляет рабочими процессами других приложений с целью их публикации и доставки до пользователей.
Вот допустим у вас есть приложение (в подавляющем большинстве случаев это веб-приложение), которое принимает запросы по сети и шлёт в ответ какой-то динамический контент (HTML, XML, JSON, итд). Само приложение написано на каком-то языке программирования. Вопрос: вы как его будете публиковать?
Сам по себе веб-сервер nginx, каким бы он не был быстрым, уступает полноценным серверам приложений вроде Apache и IIS в том, что он просто веб-сервер и прокси, но не сервер приложений. Если вы когда-нибудь поднимали сайтик хотя бы на localhost, вы знаете, что nginx не управляет вашим приложением, он прицепляется к php-fpm или к другому серверу приложений, реализующему интерфейс FastCGI. За FastCGI API находится демон, который порождает рабочие процессы интерпретатора. Каждый рабочий процесс - это процесс в операционной системе, куда перенаправляются запросы клиента.
HTTP (web server) <-FastCGI API-> Application Daemon (worker1, worker2, worker3)В зависимости от языка приложения Application Daemon для nginx может быть разным, но то что важно понимать: nginx понятия не имеет о том как работает приложение, не контролирует ресурсы ОС, многопроцессность, многопоточность. Nginx не понимает, какой pipeline обработки запросов внутри приложения. Nginx не может создать новые экземпляры рабочих процессов. Не понимает, что он может быть частью кластеризированного приложения.
Всё что я написал выше умееют другие сервера приложений.
- Apache полностью контролирует свои модули Apache portable runtime (APR)
- IIS контролирует не только ISAPI-модули, но также .NET, и некоторые другие (вроде nodejs), которые либо просто поддерживаются через сторонние модули, либо из коробки.
Кроме того, есть Java EE, она же Jakarta EE, которая стандартизирует сервера приложений Java сервелеты и прочее. Apache Tomcat, Red Hat JBoss (Wildfly) их много. Ruby on Rails, опять же... ей нужен сервер приложений PassengerИменно сервера приложений бывают нужны для крупных проектов в ентерпрайзе. Вы можете поставить Apache HTTPD или IIS и никогда не пользоваться этими функциями, просто потому что не видели крупного приложения. Или возможно, вы поставили приложение которое притянуло готовый Tomcat/JBoss, но сами сервлеты вы не писали и не публиковали.
В общем, NGINX Unit - это ответ от NGINX, потому что основной сервер nginx на самом деле глуп и не умеет ничего такого.
Вот только есть пара проблемок:
Разработчики NGINX Unit люди странные, не понятно кто им ставит задачи.
Например, в их сервере приложений, который живёт отдельно от nginx и использоваться вне корпоративной среды не будет, нету:
- Поддержки ASP.NET Core, хотя, казалось бы, в нее встроен Kestrel и не обязательно заниматься реализовывать In-Process Pipelineб как это было во времена .NET Framework.
- Нет поддержки HTTP/2. Вы спросите почему? А вот идите нафиг, вот почему. Вы хотели использовать gRPC в своих приложениях? Хотели пользоваться бинарным дуплексным обменом данными с другим приложением? А вот нефиг! Лучшее что мы можем предложить - это SOAP поверх HTTP/1.1
- Нет поддержки современного серверного железа.
Это вообще всеобщая беда, которая делает IIS незаменимым в ентерпрайзе. Многопроцессорные конфигурации или однопроцессорные Xeon Scalable с несколькими узлами NUMA не поддерживаются не только в NGINX Unit, но и в самом nginx и тем более в Apache HTTPD.> Я так до сих пор и не понял смысл этого NGINX Unit'а. Зачем он нужен?
Вот на этот вопрос и я бы хотел получить ответ от самих разработчиков без всякой иронии. В чем сакральный смысл запихивать КЛИЕНТСКИЙ код на WebAssembly внутрь сервера, типа в стиле бинарный формат же есть, значит мы можем исполнять...
Они понимают, что WebAssembly - это байткод который придуман специально для интерпретации MV*-фронтенда в браузере без требования к JavaScript?..
При этом у них ни gRPC, ни .NET, ни HTTP/2, ни железа. Там люди думают, как ProtoBuf засунуть в QUIC и стандартизировать формат метаданных (Netflix придумывает новый формат дуплексных RPC), а они фигней какой-то занимаются.
> Вот на этот вопрос и я бы хотел получить ответ от самих разработчиков без всякой иронии. В чем сакральный смысл запихивать КЛИЕНТСКИЙ код на WebAssembly внутрь сервера, типа в стиле бинарный формат же есть, значит мы можем исполнять...Можно Rust в WebAssembly например перегнать (собственно в этом и была основная задумка). Примеры тут лежат: https://github.com/nginx/unit-wasm
Помогает унифицировать запуск приложений на разных языках, жаль нету и близко всего функционала иначе можно было бы внедрить в панели хостинга.
> "response_headers" для добавления, удаления или изменения HTTP-заголовков.вот этого мне не хватало 2 года назад, чтобы выкинуть apache.
> промежуточный код WebAssembly, который может запускаться
> в любых ОС и при использовании JIT демонстрирует производительность,
> близкую к нативному коду.А что мешает просто использовать нативный код сразу?
не ищите в этос смысл. просто все хотят вайти а работы для всех нету
Это не для тех, кто пишет код. Это для админов, которым нужно запустить и поддерживать работоспособность зоопарка из PHP, Python, Java, WabAssembly и другого кода, который работает у разработчика на localhost'e, а надо, чтобы работало на сервере. А разработчик:
-- Я ниче переделывать не буду - жрите, что дают. И вообще, уйду я от вас...
-- Не-не-не-не, мы все запустим, админ - иди развлекайся. А ты, может, реализуешь вон тот тикет.
-- Да вы чё, у меня обед, да и пятница уже. Во вторник посмотрю...У взрослых людей с большой кучей кода повсеместно используется Кубернатес, остальные чухаются с вот такими вот поделками, чтобы ну хоть как-то...
> У взрослых людей с большой кучей кода повсеместно используется Кубернатескоторый настолько волшебный, что превращает кучу кода в веб-сервер одним пыщь-пыщь.
ой, нет, там опять внутри nginx, кто бы мог подумать и было ли ему чем.
> А что мешает просто использовать нативный код сразу?Версионность
Ты попробуй используй от вин 95 системные библиотеки от операционки (не программы) в вин 2000 и что то пойдет туда же ошибка x0c000003 stop кондишен
> Ты попробуй используй от вин 95 системные библиотеки от операционки
> (не программы) в вин 2000 и что то пойдет туда же ошибка x0c000003 stop кондишенСобрать прогу от Win95, да и даже от Win2000 под вот именно вебассембли - еще очень сильно ухитриться надо, для начала.
А можно пользоваться опенсорсом - и опенсорсными операционками - и не иметь дурацких проблем на ровном месте.
Есть исходники винды, её библиотек и программ. Ещё можно сделать эмулятор на js который сразу выполняет функции винды.Вообще интересно было бы скомпилировать IE6 таким образом, а потом запустить браузерный движок в браузере и открыть им эту самую страницу. Ведь некоторые сайты открываются в новых браузерах неправильно. Подключаем js файл c IE6 и всё работает.