【闭门会议实录】手把手教你如何开发一个Copilot!

176 阅读3分钟

之前的课程已经了解了Copilot架构,作为NJet的重要组成部分,今天主要分享我们已经实现的Copilot以及如何开发一个Copilot。可以文档参考Copilot开发指南

NJet 是个多进程序,有一个master和多个Worker进程。NJet 做的重要扩展是通过 Copilot 的方式来运行很多服务以及控制面程序。如果用默认的安装运行起来,它一般会有一个结构,Master 进程起多个worker,然后根据配的help 的Copilot 进程起N个Copilot。还有一个特殊的进程,是昨天说到的配置沙箱了,它其实是特殊的 privilege agent。

今天主要看Copilot ,它要实现动态配置功能,主要是有一个 broker 以及作为一个消息的中间件,也就是指消息的服务端来负责收发消息。我们还实现了重要的control控制面,对外提供的API,比如 Restful 的 HTTP API集成了界面通过OpenAPI发送实际是通过 control 来发送。

Copilot 进程受 Master 进程管理,它收到信号之后,Copilot的进程也会相应地进行 Reload 或者 Stop 的操作。但是有一些Copilot可能不想通过Master Reload 的时候,也有一个接口,然后通过返回不同的 true false来决定是否 Reload 。

我们稍微看一下,比如正常启动了这么多进程,可以reload 的时候Master 进程是不变的但worker 会变,然后 Copilot根据情况可以看到Master 不变,Worker 变了。 NQTT 进程没有变,一是因为指定它reload 的时候不处理, control 进程也是进行reload。因为broker需要静态配置完之后,改的时候重启,所以它不处理 reload 信号。以上是对Copilot的概述。

如何启动一个Copilot?

接下来讲解如何启动一个Copilot?我们实现了一个 help 指令,通过 help 指定动态模块的名字,然后再给定一个配置,因为不同的Copilot可能需要的配置都是不一样的。如果想通过这个代码搜索到对应的实现,可以通过实现扩展的指令helper,然后在 c 里面查找,就可以跳到具体实现的模块。

这里是通过 rpm 装或者build C install 默认出来的,配置基本上会默认加载这两个 Copilot 进程。 HA 是注释掉的,因为 HA 在大部分场景下,特别是本地开发的场景下是不需要的,这里展示给大家的就是默认的配置 文件,用 helper 指令加载 control 的Copilot broker,然后指定配置文件默认文件是空。接下来broker可以看到helper 指定接受2-3 个参数,一个是名字,一个是模块具体的位置,还有配置文件。helper 指令 config file 可以是空,因为有一些Copilot指定默认的配置。

broker 是很重要的Copilot,主要实现消息的服务端,它内部用标准的 MQTT 协议和客户端进行通讯。上午只讲broker配置相关的内容,broker其他方面的内容包括消息以及事件在下午进行详细描述。

以上文字实录均来源于手把手讲解课程,二者结合食用更佳!

未完待续······


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