下一代云原生应用引擎OpenNJet体验

前言

作为一名技术人员,我们应时刻保持对行业动态的关注,今天我们就来体验一下号称下一代云原生应用引擎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的功能远不止于此,还支持更多的应用场景,我将会在后续的使用中逐步发掘体验。


这是一个从 https://juejin.cn/post/7368313344711393307 下的原始话题分离的讨论话题