NGINX Unit:一个能跑八种语言的轻量服务器

NGINX 家族有个叫 Unit 的项目,做的事情跟 nginx 本身不太一样。它是一个通用 Web 应用服务器,能同时干两件事:托管静态资源,跑八种语言写的应用代码。

正文顶部截图

支持的语言包括 Python、PHP、Node.js、Ruby、Go、Java、Perl、WebAssembly。每种语言的应用跑在独立进程里,用 JSON REST API 做配置管理,改完立刻生效,不用重启服务。

解决了什么问题

传统部署方式下,不同语言的应用需要各自的运行环境。Python 用 gunicorn,Node 用 pm2,PHP 用 php-fpm,每个都得单独配置和维护。Unit 把这些统一了,一套配置管所有语言的应用。

配置通过 Unix socket 或 TCP 发送 JSON 就行,支持热更新,切流量不用中断服务。Docker 也做了适配,官方有镜像,pull 下来挂载代码目录就能跑。

实际用起来怎么样

安装不复杂。macOS 一行 brew 命令搞定,Debian/Ubuntu 用 apt,Fedora 用 yum,都有官方包。

管理工具有个叫 unitctl 的命令行工具。用 unitctl edit 可以交互式编辑配置,保存后自动生效,不用手动重启进程。

拿 Python 举个例子。写一个最简单的 wsgi.py:

def application(environ, start_response):
    start_response("200 OK", [("Content-Type", "text/plain")])
    return (b"Hello, Python on Unit!")

用 unitctl 配好 listener 指向这个应用,curl 一下就能看到返回。PHP 也类似,写个 index.php,通过 API PUT 一下配置就行。

Unit 还提供 OpenAPI 规范文件,方便跟已有的运维工具集成。对于有自动化需求的团队,这点比较友好。

一个需要知道的事

这个项目已经归档了。仓库状态标注为 unsupported,不会再有新功能开发,安全漏洞也不会有人修补。

代码还能用,clone 下来编译就能跑。但如果是生产环境长期使用,需要自己评估风险。做实验或者短期跑服务没问题。

README区域截图

它的设计思路有什么参考价值

Unit 的多进程异步架构把应用隔离在独立进程里,一个崩了不影响其他的。REST API 驱动配置的方式,比传统改配置文件重启要灵活得多。

对于想统一多语言部署方案的团队,Unit 的思路值得看看。即使不直接拿来用,它对 Web 应用服务器这件事的设计理解,也能带来一些启发。

路值得看看。即使不直接拿来用,它对 Web 应用服务器这件事的设计理解,也能带来一些启发。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐