[NJet-user] NJet 2.0发布了

单雷 shanlei在tmlake.com
星期五 十二月 29 10:31:53 CST 2023


 

NJet2.0整个开发周期历时半年,共实现了21项新功能,增强功能23项,修复bug31项,开发了配套工具4项,适配了欧拉及CloudOS操作系统。在开发过程中,NJet2.0采用快速迭代的方式,共推送7次小版本,积极响应社区及企业需求。在此,也感谢在开放原子基金会框架下达成的合作与交流,感谢来自于浪潮、招商银行、工商银行的需求输入以及测试反馈。

相比NJet1.0, NJet2.0对前期实现的基础框架做了大幅优化,在CoPilot框架方面,优化了CoPilot的监督机制,允许NJet reload时,CoPilot不重启,以保证NJet事件总线的稳定性;同时,可以为CoPilot根据职能配置不同的权限,使得CoPilot可以具备网络、内核等系统级别的能力;最后是把CoPilot接入统一的事件总线,使得CoPilot的实现天然具备了动态配置、和其他模块、CoPilot的交互能力。根据这个框架,2.0对1.0实现的CoPilots:ctrl、HA、broker都进行了加固,并实现了lua vm,高权限执行框架,配置沙箱等能力,满足了上层功能,尤其是KIC方面的需要。

配置沙箱是NJet2.0开发的主要特性之一,所有的动态配置,都经过配置沙箱的验证,再应用的NJet中,从而极大的的提高了NJet本身的稳定性,保证不会因新配置的缺陷影响到NJet的数据面的稳定性及执行效率。

NJet中的外部接口,采用了openapi标准协议。为了减轻协议服务端实现的开发难度,避免人为的错误对系统稳定性的影响,NJet2.0开发了对应的jsonschema2c的代码生成工具,利用schema描述业务校验标准,并生成对应的c代码,并对1.0阶段实现的所有接口做了改造,进一步提高了NJet的稳定性。

在动态能力这块,NJet2.0继续根据上层应用的需要或合作伙伴的反馈,对模块进行动态化改造,优化了动态证书管理,使其可以同时动态配置RSA/ECC/国密证书,并修复了1.0存在的证书管理的幂等性问题。Map指令也实现了动态化,以便应用到KIC中,实现NJet KIC最重要的特性,应用间的配置隔离;此外,动态TCP流量劫持为KIC实现通用TCP协议代理的支持提供了保障。随着动态location可以配置复杂的表达式路由,可以覆盖企业关键需要的灰度场景,并在sidecar/KIC等内部得到了广泛利用,现在可以说NJet的动态location能力在2.0已经进入成熟阶段。相比较而言,2.0才开始实现的动态virtual server能力,还需要更多的时间进行验证和增强。

新协议也是NJet2.0开发的重点内容。在本周期内,NJet主要实现了HTTP3的 server能力,以及ftp协议的代理能力。依赖于底层的动态tcp流量劫持,NJet实现了pasv ftp/sftp支持,可以动态在proxy部署的机器上开关ftp数据传输的端口,保证安全的基础上,实现了灵活的负载均衡。

HTTP3是2.0开发的重点,在协议的解析上,这块主要是继承于NGINX,虽然NJet是来源于NGINX1.23分支,但HTTP3的代码一直跟踪,并及时合并到NJet,目前合并到1.25.3。NJet在HTTP3的工作主要是做动态化改造,既在HTTP3协议的情况下,NJet也可以做动态维护证书,添加virtual server。另外则是适配国密、安全加固的改造,在国密标准在HTTP3上尚未出台的情况下,基于rfc8998,HTTP3/国密已经通过,当然,由于缺乏相关的客户端和浏览器支持,在本阶段,NJet也改造了相应的client及工具:xquic(支持rfc8998),curl(http3),http3性能测试工具等等

在丰富生态方面,NJet继续稳步推进。一是适配不同的操作系统,尤其是国产化的操作系统,这块在前面有提及。二是扩展了系统集成,目前除prometheus对外的指标输出外,也可以通过SNMP协议,向外输出指标,尤其值得提及的是,这块就利用到了前面描述的CoPilot:lua vm。通过和前端ADC设备的集成,NJet解除了单点的性能限制,可以通过sharding机制,水平扩展,应对企业更高的业务需要。在2.0阶段,NJet实现了和云科通名湖设备及F5设备的适配,而CoPilot机制,使得NJet具备了在现场,由运维工程师对接其他设备的能力。三是落实NJet的应用部署形态,NJet的全景视图是成为云计算领域的基础,落实到目前的广泛应用的k8s集群及服务网格,就是sidecar/kic/应用容器。在1.0阶段,sidecar已经发布,而伴随2.0的,则是NJet KIC,其详细功能不在此赘述,大家可以参考其独立的发布文档。除了KIC外,2.0新特性之一的应用加速,则是NJet脱离DC,应用到边缘计算节点的尝试。其利用cache特性,并通过动态location按需构建需要缓存的内容,主动推送内容到cache,实现“预热”,保证了边缘节点对应用内容的访问,维持一致的高速体验。

安全,也是NJet2.0的实现一直强调的点。一是强化系统安全,避免NJet自身成为短板。在2.0代码开发周期中,强化了安全开发,在对外的api接口中,实现了ACL的访问控制,并可以根据读写进行更细力度的权限划分;而在和外部系统集成时,统一使用TLS/HTTPS,也避免明文存储认证信息;优化了事件总线,尽量暴露出本机/unix socket的通讯接口,而不是外界可以访问的tcp端口。二是实现业务安全,通过引入并发连接限制、并发请求限制、RPS限制,NJet可以减缓DOS/DDOS对NJet以及所代理的后端业务的冲击,保证服务的可持续性;并且通过HA+sharding特性,平滑应对正常业务波动的需求。针对频发的Web类安全威胁,NJet在2.0阶段也引入了modsecurity,并对其做了动态化改造,从而可以在某威胁暴露出来时,临时动态打开进行安全加固,并在应用修复完成时及时关闭以避免影响性能。

除上述功能介绍外,NJet在2.0中还实现了两个优秀的“企业”特性: 一是集群上的同步,在1.0中,NJet实现了基本的集群构建能力,在2.0中进一步实现了配置和状态的同步,无论是HA的主备间,还是MA的多节点间,对活跃节点上的配置操作,可以及时反馈到其他节点上,从而避免了在故障转移,集群扩容新增加节点等情况下的人工操作,减少了业务中断的时间。二是尝试引入了智能化,因为一个系统的资源需求是随时间弹性变化的,按最高需求估算大多数情况下存在极大的浪费,而不按照最大估算配置则会存在故障,进而形成雪崩。NJet会尝试根据业务的负荷情况,按需申请资源,并在不需要时及时释放。

NJet2.0代码及centos,ubuntu发行版已经推送gitee,欢迎大家试用。



关于邮件列表 NJet-user 的更多信息