OpenNJet 3.0 版本正式发布!
OpenNJet 应用引擎是高性能、轻量级的 WEB 应用与代理软件。作为云原生服务网格的数据平面,OpenNJet 具备动态配置加载、主动式健康检测、集群高可用、声明式 API 等多种强大功能。通过 CoPliot 副驾驶服务框架,在隔离控制面和数据面的情况下实现了高可扩展性。NJet 应用引擎助力企业实现云原生技术的平滑升级并大幅降低 IT 运营成本。
我们正式发布了 3.0 版本,持续在应用引擎动态化的规划路线中稳步前进,本阶段重点完成了动态代理转发、动态共享内存、动态证书吊销列表、动态 header 控制等能力。
除此之外,OpenNJet 一大关键优化是支持大配置量的动态配置,还新增了动态协议识别、集群多主支持、API 管理、对消息类协议的支持等关键能力。 在应用引擎方面,真正做到了动态化。
点击 Gitee3.0 即可获取最新版本,也可以立即前往 “ https://njet.org.cn/ ” 官网进行下载与使用。
亮点汇总
动态共享内存: 解决了关键的资源分配无法应对业务弹性变化的关键痛点;
动态代理转发 :可以通过 API 直接切换后端的集群,为蓝绿发布提供了另外的技术途径。结合 "动态表达式 location" 实现灰度引流测试,在测试完成后,通过动态代理转发实现蓝绿切换,OpenNJet 为企业关键业务无中断滚动升级,提供完备的解决方案;
动态证书吊销列表: 是动态 SSL 证书,动态国密的后续,补齐了动态 SSL 安全缺失的一环。结合本次发布对 SSL 基础库的更新(升级到铜锁 8.4,使用 OpenSSL 3.x ),OpenNJet 3.0 不仅实现了 SSL 的完全动态化,也为后续的新的算法(比如抗量子)支持打下了基础;
动态 header 能力: 使 OpenNJet 可以动态设置对客户端的返回,在 CORS 控制、作为应用服务器等方面使用广泛。
支持大配置量的动态配置
![](https://static001.geekbang.org/infoq/37/376cc102fb694b05f9207a10d8476606.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
OpenNJet 3.0 的另一项关键优化是支持大配置量的动态配置。在同合作伙伴的交流中,均提到实际生产环境中的配置项为 10M 级别,证书的吊销列表等业务数据,甚至可以达到 GB 的规模。OpenNJet 3.0 基于自研的底层同步协议,使得单一节点可以快速处理大配置量数据,同时集群内的不同节点也能够及时更新。
动态协议识别
动态协议识别是 3.0 最重要的安全特性之一。在 2.0 推出后,其可动态配置的通用 TCP/UDP 代理以及对 PROXY_PROCOCOL2 的支持,吸引到了一些非 HTTP 协议的用户,也因此提出了使用中的一些问题,最关键的需要是避免互联网环境对暴露出的公网可访问端口的冲击。
![](https://static001.geekbang.org/infoq/e9/e96b63478dd700ec295e1e4ec376d0e1.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
为应对这类威胁,OpenNJet 3.0 实现了协议识别 + 端口快速关闭技术,可以过滤掉非法的客户端访问。鉴于私有的 TCP/UDP 协议千差万别,OpenNJet 3.0 引入了即时编译技术(JIT), 可以在现场配置类似 C 语言的脚本,实现对特定协议类型的解析,既保留了对协议分析的高性能,又极大地增强了配置的灵活性。
此外,安全方面的加强还包括数据隐藏和防刷。前者可以在记录访问日志时过滤掉敏感信息,后者则可以根据规则自动完成机器人校验,防止脚本工具对资源的冲击。
集群多主支持
集群多主支持是 3.0 的关键能力。在 OpenNJet 1.x、2.x 阶段,OpenNJet 虽然提供了集群能力,但集群的构建仍需部分手工配置,尤其是在节点变更的情况下,OpenNJet 3.0 则完全实现了集群的自动构建。并且,无论通过动态配置接口访问哪个节点,集群内部的所有节点都会得到更新。
![](https://static001.geekbang.org/infoq/0e/0e8ed7fa6db076488ff7e65b89a1e6c5.png)
API 管理
API 管理能力是 OpenNJet 3.0 重要的功能点。目前实现的 API 管理,从 OpenAPI 文档导入到用户、角色管理,实现了细粒度的认证授权,把权限认证汇聚到网关层面,大大简化了应用开发的复杂度。
对消息类协议的支持
对消息类协议的支持也是 3.0 发力的重点。在消息类应用的使用模型中,Client 需要同所有的 Broker 建立连接,这种模式比较适合企业内网,出于安全考虑,不太适合客户端位于互联网的情况,如果互联网需要访问内部网络的消息 Broker,一种方案是通过代理,一种方案是进行协议转换。
OpenNJet 的目标是都支持,前者由 OpenNJet 的合作伙伴在进行开发中,后者由 3.0 提供。目前实现了 HTTP2MQTT、HTTP2Kafka,使得无需特定的客户端,就可以把消息发送到相应的 Broker 中。
应用服务器近 10 倍的性能提升
去年 5 月份,我们曾在《应用引擎白皮书》中描绘了应用引擎在云原生环境出入口网关、边车、应用服务器的规划,伴随 OpenNJet 1.0, 边车实现落地,OpenNJet KIC 伴随 2.0 发布,在 3.0 阶段,应用服务器也将推出。
由于应用服务器需要考虑不同的语言实现,所以有两种技术路线,一种是为不同的语言实现特定的服务器,另一种是把不同语言的实现,转换为 WASM,应用服务器仅仅实现对 WASM 的支持。
![](https://static001.geekbang.org/infoq/88/883926ce846f6f54c898dcb48e6f7ad8.png)
后者,也是由 OpenNJet 的合作伙伴在开发中,OpenNJet 则专注实现对特定语言的支持。我们首选支持 Python,目前已经实现了对 Python WSGI 的规范支持,基于 OpenNJet 的底层异步 IO,OpenNJet 实现的 Python WSGI 服务器,相比目前市面的 Python 应用服务器有近 10 倍 的性能提升。
NJet 应用引擎通过内核重构实现了独特的运行时 动态配置加载 能力,是 新一代高性能 Web 应用引擎 。NJet 拥有高性能数据面处理能力,将集群、高可用、主动健康检查、声明式 API 等多种辅助功能,通过 NJet 独特的副驾驶 CoPilot 服务框架调度,从而方便功能扩展,隔离管理 / 控制功能对数据面的影响,NJet 应用引擎性能超过 CNCF 推荐 Envoy 应用引擎的三倍。
评论