OpenNJet 3.0版本正式发布!

146 阅读6分钟

NGINX 向云原生演进,All in OpenNJet


OpenNJet 应用引擎是高性能、轻量级的WEB应用与代理软件。作为云原生服务网格的数据平面,OpenNJet具备动态配置加载、主动式健康检测、集群高可用、声明式API等多种强大功能。通过CoPliot副驾驶服务框架,在隔离控制面和数据面的情况下实现了高可扩展性。NJet应用引擎助力企业实现云原生技术的平滑升级并大幅降低IT运营成本。

我们正式发布了3.0版本,持续在应用引擎动态化的规划路线中稳步前进,本阶段重点完成了动态代理转发、动态共享内存、动态证书吊销列表、动态header控制等能力。

除此之外,OpenNJet一大关键优化是支持大配置量的动态配置,还新增了动态协议识别、集群多主支持、API管理、对消息类协议的支持等关键能力。在应用引擎方面,真正做到了动态化。

点击 Gitee3.0 即可获取最新版本,也可以立即前往“njet.org.cn”官网进行下载与使用。

亮点汇总

  • 动态共享内存: 解决了关键的资源分配无法应对业务弹性变化的关键痛点;
  • 动态代理转发:可以通过API直接切换后端的集群,为蓝绿发布提供了另外的技术途径。结合"动态表达式location" 实现灰度引流测试,在测试完成后,通过动态代理转发实现蓝绿切换,OpenNJet为企业关键业务无中断滚动升级,提供完备的解决方案;
  • 动态证书吊销列表: 是动态SSL证书,动态国密的后续,补齐了动态SSL安全缺失的一环。结合本次发布对SSL基础库的更新(升级到铜锁8.4,使用OpenSSL 3.x ),OpenNJet 3.0不仅实现了SSL的完全动态化,也为后续的新的算法(比如抗量子)支持打下了基础;
  • 动态header能力: 使OpenNJet可以动态设置对客户端的返回,在CORS控制、作为应用服务器等方面使用广泛。

支持大配置量的动态配置

OpenNJet 3.0的另一项关键优化是支持大配置量的动态配置。在同合作伙伴的交流中,均提到实际生产环境中的配置项为10M级别,证书的吊销列表等业务数据,甚至可以达到GB的规模。OpenNJet 3.0基于自研的底层同步协议,使得单一节点可以快速处理大配置量数据,同时集群内的不同节点也能够及时更新。

动态协议识别

动态协议识别是3.0最重要的安全特性之一。在2.0推出后,其可动态配置的通用TCP/UDP代理以及对PROXY_PROCOCOL2的支持,吸引到了一些非HTTP协议的用户,也因此提出了使用中的一些问题,最关键的需要是避免互联网环境对暴露出的公网可访问端口的冲击。

为应对这类威胁,OpenNJet 3.0实现了协议识别+端口快速关闭技术,可以过滤掉非法的客户端访问。鉴于私有的TCP/UDP协议千差万别,OpenNJet 3.0 引入了即时编译技术(JIT),可以在现场配置类似C语言的脚本,实现对特定协议类型的解析,既保留了对协议分析的高性能,又极大地增强了配置的灵活性。

此外,安全方面的加强还包括数据隐藏和防刷。前者可以在记录访问日志时过滤掉敏感信息,后者则可以根据规则自动完成机器人校验,防止脚本工具对资源的冲击。

集群多主支持

集群多主支持是3.0的关键能力。在OpenNJet 1.x、2.x阶段,OpenNJet虽然提供了集群能力,但集群的构建仍需部分手工配置,尤其是在节点变更的情况下,OpenNJet 3.0则完全实现了集群的自动构建。并且,无论通过动态配置接口访问哪个节点,集群内部的所有节点都会得到更新。

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的支持。

后者,也是由OpenNJet的合作伙伴在开发中,OpenNJet则专注实现对特定语言的支持。我们首选支持Python,目前已经实现了对Python WSGI的规范支持,基于OpenNJet的底层异步IO,OpenNJet实现的Python WSGI服务器,相比目前市面的Python 应用服务器有近10倍的性能提升。


NJet 应用引擎通过内核重构实现了独特的运行时动态配置加载能力,是新一代高性能 Web 应用引擎。NJet 拥有高性能数据面处理能力,将集群、高可用、主动健康检查、声明式 API 等多种辅助功能,通过 NJet 独特的副驾驶 CoPilot 服务框架调度,从而方便功能扩展,隔离管理 / 控制功能对数据面的影响,NJet 应用引擎性能超过 CNCF 推荐 Envoy 应用引擎的三倍。官网 邮件组