美文网首页我爱编程Nginx
Nginx Unit发布,微服务利器!

Nginx Unit发布,微服务利器!

作者: 程序员精进 | 来源:发表于2018-05-21 23:12 被阅读1574次

该文章首发于我的微信公众号:程序员精进 ,欢迎关注订阅。

摘要:NGINX, Inc.公司发布了全新动态Web和应用服务器 Nginx Unit 1.0,轻量动态且支持多语言及版本。本文将介绍下Nginx Unit是什么,分析下它的作用以及它会给市场带来怎样的变化。注:目前Nginx Unit刚发布了第一个正式大版本,因此不建议在生产环境直接采用,建议在内网环境或边缘业务上进行测试评估。本文约3000字,预计阅读时间5分钟。

keywords: Nginx Unit, application server, polyglot, microservices, service mesh

关键字:Nginx Unit、应用服务器、多语言支持、微服务、Service Mesh

Nginx Unit Get Stared

什么是Nginx Unit?

Nginx Unit 1.0是NGINX, Inc.公司在2018年4月12日正式发布的动态Web及应用服务器,Nginx Unit首先定位是应用服务器,也就是application server,对应竞品是unicorn、Tomcat、Passenger等一众动态语言的应用服务器。

Nginx Unit 1.0目前支持的特性有:

  • 多语言多版本支持
  • 通过REST API动态管理应用(JSON格式),无配置文件
  • 配置变更无需重载、不中断服务
  • 独立运行或适配微服务架构均可

多语言多版本支持

Nginx Unit can run different languages and language versions in one server

最令人兴奋的点是Nginx Unit直接支持多语言(Polyglot),并且支持同一语言的不同版本,目前微服务架构盛行,一大特征便是多语言支持,之前可能支持的方式便是不同语言运行在各自的应用服务器下,再通过Nginx进行反向代理,来实现多语言支持,现在可以通过Nginx Unit来直接做应用服务器,而不需要再引入原先的应用服务器,精简了部署架构,目前Nginx Unix支持的语言情况如下:

语言 支持版本
PHP PHP 5, 7
Python Python 2.6, 2.7, 3
Golang Go 1.6 及更新版本
Perl Perl 5.12 及更新版本
Ruby Ruby 2.0 及更新版本
Java 计划支持
JavaScript/Node.js 计划支持

从上表可以看到,主流的动态语言已经支持了5种,另外计划中支持的Java和Node.js也是很让人期待的发布。

动态管理应用

Architecture of a simple WordPress application

上图是使用Nginx + Nginx Unit来部署PHP应用的一个典型架构,通过Nginx来做Web服务器(负责静态文件和反向代理服务等),Nginx Unit做应用服务器,这样我们能快速了解Nginx和Nginx Unit的定位区别,Nginx Unit更专注在应用服务器这里。

服务器动态管理能力也是Nginx Unit的亮点,通过Control REST API进行管理,例如对应用的增删改查(JSON格式),在进行管理时,Nginx Unit不需要重载配置,也不会中断服务,这个跟Nginx Unit的架构设计相关,它在设计之初就为动态能力为核心,本文后面会简单介绍Nginx Unit的架构,在此我们先看看Nginx Unit的应用配置管理。

Nginx Unit里面的应用需要配置application和listner两个字段才能提供应用服务,以下是一个最简单的应用服务配置:

{
    "listeners": {
        "*:8300": {
            "application": "blogs"
        }
    },

    "applications": {
        "blogs": {
            "type": "php",
            "processes": 20,
            "root": "/www/blogs/scripts",
            "index": "index.php"
        }
    }
}

上面我们定义了一个名为blogs的应用,运行语言是PHP,另外定义了一个监听器,监听在8300端口来提供blogs应用服务,将该配置保存在json文件中,然后通过访问Control API进行应用服务添加,示例如下:

# curl -X PUT -d @/path/to/blogs.json  \
       --unix-socket /path/to/control.unit.sock http://localhost/config/

我们也可以通过如下命令来调用Control API来查看目前的配置:

# curl --unix-socket /path/to/control.unit.sock http://localhost/config/
# API返回示例如下
{
    "listeners": {
        "*:8300": {
            "application": "blogs"
        }
    },

    "applications": {
        "blogs": {
            "type": "php",
            "user": "nobody",
            "group": "nobody",
            "root": "/www/blogs/scripts",
            "index": "index.php"
        }
    }
}

这样使用JSON格式、通过Control REST API进行应用服务管理的方式,使得可以很方便地将基于Nginx Unit的应用服务发布管理融合到持续发布流程中,都不需要对Nginx Unit进行重载或中断服务。

Nginx Unit的架构

Nginx Unit Architecture

如上图所示,Nginx Unit的进程如下:

  • 主进程:唯一进程,负责创建路由、应用进程;
  • 路由进程:唯一进程,负责所有出入网络请求的处理,可以快速实施配置变更而不中断服务。另外这个进程是持久的,不会重启;
  • 控制器进程:唯一进程,负责接收处理通过管理API过来的配置请求,并且将配置下发给主进程和路由进程;
  • 应用进程:每个进程部署在各自沙盒环境中,保证安全隔离,应用进程数量是动态变化的。

Nginx Unit支持按需扩展进程,每个进程都运行在自己的沙箱环境中,这样应用进程才能够在同一个Nginx Unit里面支持多语言多版本的应用了。

Nginx Unit的未来

从官方介绍中可以得知,接下来Nginx Unit会支持Java和Node.js,这样Nginx Unit就将目前主流Web编程语言都支持了;另外计划支持HTTPS和HTTP/2协议,以及通过URI和主机名进行路由等特性。不难看出这里NGINX, Inc公司的野心,想将Nginx Unit打造成为多语言多版本支持、简易管理及可靠度高的应用服务器,来更好支持微服务、Service Mesh架构。

NGINX Unit and the NGINX Application Platform

目前Nginx Unit刚发布1.0版本,各个语言的支持情况还不会特别完善,例如一些框架在Nginx Unit下运行可能会有问题,抑或是性能表现还需要观察,但总体而言,Nginx Unit还是值得尝试的新应用服务器,从Nginx的生态版本可以看到它的定位还是很清晰的,就是来取代之前各语言的应用服务器,因此我也会持续关注Nginx Unit,最新的技术进展和体会也会持续更新,欢迎关注。

欢迎关注我的微信公众号:程序员精进

相关文章

  • Nginx Unit发布,微服务利器!

    该文章首发于我的微信公众号:程序员精进 ,欢迎关注订阅。 摘要:NGINX, Inc.公司发布了全新动态Web和应...

  • Nginx Unit 1.2 + Go / Python 微服务

    1.简介 Nginx Unit是一个面向微服务架构的、依托Nginx、支持多语言的动态Web应用服务器。在2018...

  • Nginx配置多文件

    在日常工作中Nginx可谓是Web开发人员的利器了; Nginx可以做负载均衡,url重写,ip拦截,静态资源服务...

  • 服务限流

    保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流可是Nginx接入层面的限流,也可以是服务层面的限流。 ...

  • centos 7.2 nginx 开机启动

    nginx vim /lib/systemd/system/nginx.service [Unit] Descri...

  • 限流算法

    前言 保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流包括Nginx层面的限流以及业务代码逻辑上的限流。...

  • nginx - 灰度发布

    灰度发布大概原理以及nginx配置 1. 服务器划分 2.【反向代理主机】nginx.conf 1. nginx....

  • 经典面试题——让你设计一个限流的系统怎么做?

    保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流系统是当前很多系统都需要考虑的场景。首先在Nginx层面...

  • Nginx-基础学习

    虽然在用Nginx发布前端的服务,但是一直没有系统的学习一下Nginx,这篇文章记录对于Nginx基础的学习。 目...

  • CentOS通过yum安装Nginx

    直接通过命令安装 启动 nginx 服务 停止 nginx 服务 重启 nginx 服务 Nginx默认目录 ng...

网友评论

    本文标题:Nginx Unit发布,微服务利器!

    本文链接:https://www.haomeiwen.com/subject/wxdcjftx.html