文章目录
- 前言
- OpenNJet 介绍
- OpenNJet VS NGINX
- OpenNJet 安装
- OpenNJet 动态配置体验
- 动态location
- 动态黑名单
- 动态灰度发布
- 体验感受
前言
作为一名技术人员,我们应时刻保持对行业动态的关注,今天我们就来体验一下号称下一代云原生应用引擎OpenNJet。
OpenNJet 介绍
OpenNJet是以NGINX为基础,进行派生并独立演进的云原生应用引擎。
它具备环境感知、安全控制、加速优化等能力,并可以利用动态加载机制实现不同的产品形态,如API网关、消息代理、入口/出口控制器、边车、负载均衡和WAF等。
此外,OpenNJet还拥有NGINX不具备的东西向通信、透明流量劫持、熔断、遥测以及故障注入、链路追踪、蓝绿发布等新功能特性。
OpenNJet VS NGINX
NGINX主要的优点是高性能,但其缺乏动态配置能力。为了解决这一问题,OpenNJet在NGINX的架构上进行了扩充,解决了配置变更动态生效的关键问题。
不仅如此,对于应用引擎可观测性的需求,比如性能指标、日志数据以及注入跟踪信息的采集,OpenNJet利用Copilot framwork隔离了业务处理及配置变更和指标采集,避免了遥测对性能的影响。
通过 NGINX 架构和 OpenNJet 架构可以直观的看出两者的关系。
OpenNJet 安装
本文基于centos发行版进行安装,安装命令如下:
下载njet2.1.0版本
wget https://gitee.com/njet-rd/njet/releases/download/v2.1.0/njet-2.1.0-1.el7.x86\_64.rpm
#通过yum进行本地安装
yum localinstall ./njet-2.1.0-1.el7.x86\_64.rpm
#启动njet
systemctl start njet |
还有更多的安装方式,大家可以自行选择。比如:
二进制安装
安装发行版
源码安装
命令执行成功后,通过{ip}:8080进行访问,看到如下图的界面,表示安装成功。
OpenNJet 动态配置体验
OpenNJet 支持通过 swagger 页面实现对各功能opentapi的访问,比如健康检查、动态黑名单配置、动态access log 配置、动态 location 配置、动态 upstream api 配置等一切可以配置的操作。
swagger 页面在OpenNJet启动后,通过 {ip}:8081/doc/swagger/ 进行访问。如下界面
动态location
在OpenNJet中,动态location允许用户实时地调整或添加网络路径和相关的配置,从而定义哪些请求应该被路由到哪些后端服务,或者如何对特定的请求进行特殊处理。
可以通过 OpenNJe t的 swagger 页面动态添加、删除 location 模块。
执行以上的接口后,就可以通过浏览器访问/clb了。
动态黑名单
OpenNJet的动态黑名单功能允许用户实时地添加、更新或删除黑名单条目,从而有效地阻止或限制特定的IP地址对资源的访问。
依然可以通过swagger进行这一操作。
通过 swagger 可以看到,此时 OpenNJet 中没有添加任何的黑白名单。
此时通过swagger的动态黑名单配置,将我的ip设置拒绝访问
再次访问{ip}:8080,就会发现被禁止访问。
动态灰度发布
在应用的新版本测试发布过程中,经常需要先使用部分选定的账号进行验证,待验证完成后,再逐步将业务流量切换到新版本。
可以通过动态 split clients 配置和动态 location 配置实现动态灰度发布。
动态添加 split clients
设置两组 upstream: backendA , backendB , 并通过 split_clients 指令使用 header 中的 uid 值做为流量配比,并设置 80% 的流量将指向后端 backendA, 20% 的流量将指向后端 backendB。
动态添加 location
通过动态配置添加一个 location , location 中设置所有的 1xxxx uid 将访问到 backendB。
当测试完成后,可以动 删除 location,并逐步调整将分流比例直至 100%,从而实现灰度发布。
体验感受
OpenNJet的动态加载机制确实带来了很大的便利。不重启进程的情况下进行配置的实时更新,使得应用的部署和升级变得更加灵活和高效。这一特性对于需要频繁变更配置的场景来说,无疑是一个巨大的优势。
当然,OpenNJet的功能远不止于此,还支持更多的应用场景,我将会在后续的使用中逐步发掘体验。