Announcing NGINX Unit 1.0
Today, April 12th, marks a significant milestone in the development of NGINX Unit, our dynamic web and application server. Approximately 6 months after its first public release, we’re now happy to state that NGINX Unit is production-ready. NGINX Unit is our new open source initiative led by Igor Sysoev, creator of the original NGINX, which is now used by more than 409 million websites.
“I set out to make an application server which will be remotely dynamically configured, and capable to switch dynamically from one language or application version to another.” explains Igor. “Dynamic configuration and switching, I saw as being certainly the main problem. People want to reconfigure servers without interrupting client processing.”
NGINX Unit is dynamically configured using a REST API; there is no set configuration file. All configuration changes happen directly in memory. There are no process reloads or service interruptions required for configuration changes to take effect.
“The dynamic switching requires that we can run different languages and language versions in one server,” continues Igor.
As of the 1.0 release, NGINX Unit supports Go, Perl, PHP, Python, and Ruby on the same server. Multiple language versions are also supported, so you can, for instance, run applications written for PHP 5 and PHP 7 on the same server. Support for additional languages, including Java, is planned in future releases of NGINX Unit.
Note: We have an additional blog post on how to configure NGINX, NGINX Unit, and WordPress to work together.
Igor studied at Moscow State Technical University, which was a pioneer in the Russian space program, and the April 12th date has a special significance. “This is the anniversary of the first manned spaceflight in history, made by Yuri Gagarin. The first public version of NGINX was released on the anniversary of the Sputnik launch [4th October 2004], and NGINX 1.0 was launched on April 12th, 2011.”
What is NGINX Unit?
NGINX Unit is a dynamic web and application server, suitable for both standalone applications and distributed microservice application architectures. It launches and scales application processes on demand, executing each application instance in its own secure sandbox.
NGINX Unit manages and routes all incoming network transactions to the application through a separate “router” process, so it can rapidly implement configuration changes without interrupting service.
“The configuration is in JSON format, so users can edit it manually, and it’s very suitable for scripting. We hope to add capabilities to NGINX Controller and NGINX Amplify to work with Unit configuration too,” explains Igor.
The Unit configuration process is described in the Unit documentation.
“Now Unit can run Python, PHP, Ruby, Perl and Go – five languages. For example, during our beta, one of our users used Unit to run a number of different PHP platform versions on a single host,” says Igor.
Unit’s ability to run multiple language runtimes is based on its internal separation between the router process, which terminates incoming HTTP requests, and groups of application processes, which implement the application runtime and execute application code.
The router process is persistent – it never restarts – meaning that configuration updates can be implemented seamlessly, without any interruption in service. Application processes are deployed within their own sandbox (with Linux control group, or cgroup, support in development), so that Unit can provide secure isolation for user code.
What’s Next for NGINX Unit Development?
Now that we have the 1.0 release, the next milestone for the Unit engineering team is concerned with HTTP maturity, serving static content, and additional language support.
“We plan to add SSL and HTTP/2 capabilities in Unit,” says Igor. “Also, we plan to support routing in configurations; currently, we have direct mapping from one listen port to one application. We plan to add routing using URI and hostnames, etc.”
“In addition, we want to add more language support to Unit. We are completing the Ruby implementation, and next we will consider Node.js and Java. Java will be added in a Tomcat-compatible fashion.”
The end goal for NGINX Unit is to create an open-source platform for distributed, polyglot applications which can run application code securely, reliably, and with the best possible performance. The platform will self-manage, with capabilities such as autoscaling to meet SLAs within resource constraints, and service discovery and internal load balancing to make it easy to create a service mesh.
NGINX Unit and the NGINX Application Platform
An NGINX Unit platform will typically be delivered with a front-end tier of NGINX or NGINX Plus reverse proxies to provide ingress control, edge load balancing, and security. The joint platform (NGINX Unit and NGINX/NGINX Plus) would then be managed fully using NGINX Controller, which will monitor, configure, and control the entire platform.
Together, these three components – NGINX Plus, NGINX Unit, and NGINX Controller – make up the NGINX Application Platform. The NGINX Application Platform is a product suite that delivers load balancing, caching, API management, a WAF, and application serving, with rich management and control planes that simplify the tasks of operating monolithic, microservice, and transitional applications.
Getting started with NGINX Unit
Unit is free and open source. Please see our installation instructions to get started. We have prebuilt packages for most operating systems, including Ubuntu and Red Hat. We also have a Docker container available on Docker Hub.
The source code is available in our Mercurial repository and mirrored to GitHub. The code is available under the Apache 2.0 license. You can compile Unit yourself on most popular Linux and Unix systems.
If you have any questions, please use the GitHub issues board or the NGINX Unit mailing list. We’d love to hear how you are using Unit, and we welcome code contributions too.
We’re also happy to extend technical support for NGINX Unit to NGINX Plus customers with Professional or Enterprise support contracts. Please refer to the support terms for details of the support services we can offer.
The post Announcing NGINX Unit 1.0 appeared first on NGINX.
Source: Announcing NGINX Unit 1.0