百度-baetyl

它可以提供临时的离线低延迟计算服务,包括设备连接,消息路由,远程同步,功能计算,视频捕获,AI推理,状态报告,配置ota等。

baetyl-function-python27 模块的设计思想与 baetyl-function-python36 模块相同,但是两者的函数运行时不同。baetyl-function-python27 所使用的函数运行时基于 Python2.7 版本,并提供基于 Python2.7 pyyamlprotobuf3grpcio

 

baetyl-function-python36 提供 Python 函数与 百度云-函数计算 CFC 类似,用户通过编写的自己的函数来处理消息,可进行消息的过滤、转换和转发等,使用非常灵活。该模块可作为 GRPC 服务单独启动,也可以为函数管理模块提供函数运行实例。所使用的函数运行时基于 Python3.6 版本。

 

baetyl-function-node85 模块的设计思想与 baetyl-function-python36 模块相同,为 Baetyl 提供 Node8.5 运行时环境,用户可以编写 javascript 脚本来处理消息,同样支持 JSON 格式也可以是二进制形式的数据,

 

主程序作为 Baetyl 系统的核心,负责管理所有存储卷和服务,内置运行引擎系统,对外提供 RESTful API 和命令行。

引擎系统 负责服务的存储卷映射,实例启停、守护等,对服务操作做了抽象,可以实现不同的服务运行模式。根据设备能力的不同,可选择不同的运行模式来启动服务。目前支持Docker 容器模式和 Native 进程模式,后续还会支持 k3s 容器模式。

RESTful APIBaetyl 主程序会暴露一组 RESTful API,采用 HTTP/1。在 Linux 系统下默认采用 Unix Domain Socket,固定地址为 /var/run/baetyl.sock;其他环境采用TCP,默认地址为 tcp://127.0.0.1:50050。目前接口的认证方式采用简单的动态 Token 的方式,主程序在启动服务时会为每个服务动态生成一个 Token,将服务名和 Token 以环境变量的方式传入服务的实例,实例读取后放入请求的 Header 中发给主程序即可。

 

Header 名称如下:

x- openedge -username :账号名称,即服务名称
x- openedge -password :账号密码,即动态 Token

下面是目前提供的接口:

GET /v1/system/inspect 获取系统信息和状态
PUT /v1/system/update 更新系统和服务
GET /v1/ports/available 获取宿主机的空闲端口
PUT /v1/services/{ serviceName }/instances/{ instanceName }/start 动态启动某个服务的一个实例
PUT /v1/services/{ serviceName }/instances/{ instanceName }/stop 动态停止某个服务的某个实例
PUT /v1/services/{ serviceName }/instances/{ instanceName }/report 报告服务实例的自定义状态信息
开发者可以参考该模块实现自己的 Agent 模块来对接自己的云平台
baetyl-hub  简称 Hub 是一个单机版的消息订阅和发布中心,采用 MQTT3.1.1 协议,可在低带宽、不可靠网络中提供可靠的消息传输服务。其作为 Baetyl 系统的消息中间件,为所有服务提供消息驱动的互联能力。
baetyl-remote- mqtt  又称远程 MQTT 通讯模块,可桥接两个 MQTT Server 进行消息同步。目前支持配置多路消息转发,可配置多个 Remote Hub 同时进行消息同步 .
Master 有点像 k8s 中的 apiserver

函数管理模块负责管理所有函数实例和消息路由规则,支持自动扩容和缩容。

如上图示,这里 Baetyl 的本地 Hub 与远程云端 Hub 平台之间通过 Baetyl 远程 MQTT 通讯模块实现消息的转发、同步。进一步地,通过在两端接入 MQTT Client 即可实现 端云协同式 的消息转发与传递。