我们是 OpenResty/NGINX 的重度使用者,产品是基于 OpenResty 开发的,其中包括木马云查杀、终端通信、用户认证以及各种复杂的业务逻辑。
在这个过程中,遇到了很多 OpenResty 的使用问题,去年的时候,我们在 Github 上面写了《OpenResty 最佳实践》,把遇到的坑写下来。同时我们也逐渐遇到一些 NGINX 自身的限制。
NGINX 开源版本的参数都需要通过配置文件来修改,然后 reload 才能生效,没法做到实时和动态调整。为了解决这些问题,让 NGINX 更加灵活,有不少开源项目都借助 OpenResty 来让 NGINX 变得更好用,比如 VeryNginx 和 Orange。
而更多不熟悉 OpenResty 的开发者,就会寻找 NGINX 世界之外的解决方案,比如和 consul 配合来实现动态 upstream。
NGINX 的开源版本只有一个非常简单的 http_stub_status_module
模块,提供 5、6 个监控数据。你想知道更详细的数据?只能自己修改源码,或者用 SystemTap 工具链探测一下。
对于业务 API 的统计,现有方案大都类似 ngxtop
:打开 NGINX 的访问日志,后台程序来进行分析。即使把访问日志丢到远端,避免磁盘压力,也会造成性能的下降,或者因为网络的问题丢失数据,而且,这些方案都是有延时的。
而详细的实时的监控和统计数据,我觉得是业务决策的关键数据,没有完备数据支撑的开发和运维,如同盲人摸象,无法了解到业务的实时健康状况,更谈不上动态调整 NGINX 的各种参数和规则了。
收费的 NGINX Plus 版本可以部分的解决上面几个问题,它提供有限的动态调整 API,并内置了近百个监控数据。当然价格有点儿贵,每年每台服务器 1999 刀起步。
现在,我们开源出来一个小项目 Mio(https://github.com/iresty/Mio),
它短期对标的是 NGINX Plus,Mio
100% 兼容 NGINX Plus 的 API,并新增三类 summary API, 提供非常详细的实时统计和监控数据。长期目标希望通过这些数据,能够为拦截恶意访问、流量限速限流、定位业务代码bug等方面,提供有用的建议。