前言
YoMo 是一个开源编程框架,为边缘计算领域的低时延流式数据处理而打造,它底层基于 HTTP 3.0 的核心通信层 IETF QUIC 协议通信,以 Functional Reactive Programming 为编程范式,方便开发者构建可靠、安全的时序型数据的实时计算应用,并针对5G和WiFi-6场景优化,释放实时计算价值。git
Y3是一种YoMo Codec的Golang实现,它描述了一个快速和低CPU损耗的编解码器,专一于边缘计算和流处理。查看 explainer 获取更多信息,了解更多与YoMo组合的方式。github
CluingOS 是一款以 Kubernetes 为内核的云原生超融合工业物联平台,它的架构能够很是方便地使第三方应用与云原生生态组件进行集成、整合和安装,支持云原生应用在多云与多集群的统一分发和运维管理。。golang
在这个案例里,咱们结合了YoMo+Y3的低延时流式处理与CluingOS分布式部署的特性,展示出如何开发部署一套高效的工业数据收集应用系统,体验从边缘端收集传感器数据,低延时高效地跨越2000多千米地传输到云端进行数据流式处理的全过程,基于这个案例你能够照葫芦画瓢地开发出知足自已需求的应用场景。web
述语
- xxx-source:表示一个数据源收集程序,能直接接收MQTT协议的数据。
- xxx-zipper:表示一个工做流和控制平面。
- xxx-flow:表示一个工做流单元,用于实际的业务逻辑处理,被zipper调度。
- xxx-sink:表示一个数据的传送目的地,本案例为一个消费数据的WebSocket服务,被zipper调度。
- xxx-web:表示一个展现实时传感数据的Web服务。
架构
从图中的案例可见,区分了边缘端和云端两个独立的服务区域,其中边缘端位于上海,云端位于广州,距离相隔2000多千米,咱们能够在最后的测试中看到其低延时的流式处理为数据的收集和处理提供了使人惊喜的优化。另外,CluingOS超融合工业物联平台的容器化分布式部署能高效地部署调试咱们的应用,真香!下面简单介绍一下各个模块和服务:sql
传感器
震动传感器,薄膜按键传感器docker
-
震动传感器。用于产生震动相关的原始数据,通过Lora接收器转为MQTT协议的数据,数据格式以下:数据库
-
TOPIC:shake/20210627_cluing/S07编程
-
Payload:json
{ // 租户数据库实例 "tenantId": "20210627_cluing", // 采集设备终端DEVEUI "devEui": "0850533277387820", // 采集原始数据 "data": "CwcMys+69Iks0As4YS4N6A==", // 采集数据时间 "createDate": 1624937248919, // 采集温度 "temperature": 75, // Z轴振动强度 "vertical": 81, //X轴振动强度 "transverse": 53 }
-
-
薄膜按键传感器。用于产生按键相关的原始数据,通过Loar接收器转为MQTT协议的数据,数据格式以下:安全
-
TOPIC:shake/20210627_cluing/S05
-
Payload:
{ // 租户数据库实例 "tenantId": "20210627_cluing", // 采集设备终端DEVEUI "devEui": "393235307d377504", // 采集原始数据 "data": "AAAQ5gAAAQIIAA==", // 采集数据时间 "createDate": 1624937248919, // 按键设备按键值 "key": "0800" }
-
5G CPE 一体机
Lora接收器,转发引擎,shake-source,shake-web
5G CPE 一体机
是部署在边缘端的一个网关设备,它能够接收传感器的数据并转换为MQTT协议的数据,咱们的YoMo边缘端的接收器shake-source就是部署在这个网关设备上,它的一大特点是能够接受CluingOS超融合工业物联平台的容器部署和资源调度,这样即便你在相隔千里的地方也很容易的分发应用到这个网关设备上,并不须要远程登陆进行操做哦。
- Lora接收器是网关的默认服务。能够接收各类各样的传感器的监控数据,并转换为MQTT协议,不一样设备的数据能够分配置不一样的主题易于管理,上节中的震动传感器和薄膜按键传感器的数据就被转换为定义所示的数据格式了。
- 转发引擎是网关的默认服务。能够把MQTT的数据转发给不一样的MQTT Broker服务,固然也包括咱们案例中的shake-source。
- shake-source数据源。基于YoMo框架开发的数据源接收服务,它的做用是把MQTT协议的数据转换为Y3数据格式并以QUIC的方式传输到云端的shake-zipper工做流引擎。
- shake-web数据展现。这是一个展现两种传感器的实时数据的展现Web服务,主要是消费shake-sink提供的WebSocket数据,同时也能够展现一个完整的RTT往返时延的实时性。
SaaS服务
shake-zipper,shake-flow,shake-sink,HOMEY呼美事件精益化管理系统
这是一套完整的云端服务,其中的容器化部署也是受到了CluingOS的调度和管理,只须要以不一样的用户登陆CluingOS就能够切换管理在边缘端或者在云端的服务。
- shake-zipper工做流引擎。经过编排(workflow.yaml)能够调度多个flow和sink,让它们以流的方式把业务逻辑串联起来,以知足复杂的需求。与之相连的全部通讯和编解码均以QUIC+Y3进行,提供可靠实时的流式处理,全程体验流式编程的乐趣。
- shake-flow逻辑处理单元。在这个案体中,处理单元把从source传输过来的数据解码为Topic和Playload后分别处理震动传感器和薄膜按键传感器两种设备的数据,而且达到必定的阀值后调用HOMEY呼美管理系统进行警报或者下发控制边缘端设备的控制指令。
- shake-sink数据输出单元。在这个案例中并无输出到数据库,而是经过搭建一个WebSocket服务器,把实时的传感器数据输出给任意的网页进行展现消费。这里的数据是做为shake-web的数据源进行展现。
- HOMEY呼美管理系统。呼美系统接收到shake-flow的事件通知后会发出警报信息或者下发控制指令到边缘端控制某些设备实施某种操做。但在这个案例中,咱们会把在呼美系统接收到事件通知的时间点用来做为延时的统计终点,分析咱们基于YoMo+Y3的低延时确实获得很大的优化。
CluingOS超融合工业物联平台
以不一样用户登陆能够切换对边缘端服务或者云端服务的部署和管理
CluingOS提供工业物联网大数据智能平台服务及容器化、订阅式、微服务架构的“现场协同+流程管控+数据智能”的端到端一体化透明工厂系统,支持私有云、公有云或混合云的多种方式、分布式部署实施。
代码
项目yomo-cluing-shake提供了全套的源代码,下表提供了每一个模块的简要说明,供感兴趣的朋友查看,参照这个案体的代码,能够轻松开发出类拟场景的案例。
模块 | 地址 | 本地运行 | 说明 |
---|---|---|---|
zipper | zipper | make debug_zipper |
编排本案例的工做流和数据流向 |
flow | flow | make debug_flow |
对传感器数据进行预处理和警报 |
sink | sink | make debug_sink |
提供WebSocket服务用于数据展现 |
source | source | make debug_source |
收集MQTT消息格式的传感器数据 |
emitter | emitter | make debug_emitter |
模拟产生震动和按键数据 |
web | web | make debug_web |
消费WebSocket服务展现传感器数据 |
quic-mqtt | yomo-source-mqtt-starter | 开发xxx-source的通用组件 |
容器化部署
经过下载上节的项目代码能够快速地本地运行,体验YoMo开发的乐趣,同时咱们提供了各个模块对应的Dockerfile文件用于打包对应的镜像,而且上传到hub.dockder.com,供CluingOS进行部署。
模块 | Dockerfile | 镜像地址 | 最新版本 |
---|---|---|---|
zipper | Dockerfile.zipper | shake-zipper | yomorun/shake-zipper:latest |
flow | Dockerfile.flow | shake-flow | yomorun/shake-flow:latest |
sink | Dockerfile.sink | shake-sink | yomorun/shake-sink:latest |
source | Dockerfile.source | noise-source | yomorun/shake-source:latest |
emitter | Dockerfile.emitter | shake-emitter | yomorun/shake-emitter:latest |
web | Dockerfile.web | shake-web | yomorun/shake-web:latest |
quic-mqtt | yomorun/quic-mqtt | yomorun/quic-mqtt:latest |
yomorun/quic-mqtt:latest 是打包xxx-source的基础镜像,能够快速打包自定义代码,但本案例中能够暂时忽略。
CluingOS部署
经过不一样的用户登陆
CluingOS工业超融合系统
能够分别管理边缘端和云端的容器。
部署云端服务
用户A部署zipper/flow/sink服务到云机器。
-
建立自定义应用。
建立一个自制应用shake-cloud,用于管理云端的服务。
-
建立服务。
进入shake-cloud应用的控制台,选择添加服务,选择无状态服务,则进入建立服务的流程。
-
基本信息:指定服务的名称为shake-sink
-
容器镜像:
- 添加容器镜像:选择从DockerHub中搜索shake-sink
- 端口设置:指定容器暴露的服务端口,例如:8000
- 环境变量:例如
SHAKE_ZIPPER_ADDR=shake-zipper.yomo-cluing-shake:9000
,这里的shake-zipper.yomo-cluing-shake
则时建立shake-zipper后得到的zipper在内部DNS名。
-
挂载存储和高级设置:在这个案例中都不须要设置。
-
编辑外网访问:选择NodePort的访问方式,获取获得对外暴露端口号30095
-
-
服务列表
至此,分别建立了zipper/flow/sink的服务。
部署边缘端服务
用户B部署source/web服务到边缘的5GCPE一体机。
部署方式与部署云端服务
相同,先建立一个shake-edge应用,而后在应用中建立对应的无状态服务,得到服务列表:
接入传感器展现效果
转发引擎把MQTT的消息转发到shake-souce服务。
为了接入传感器数据,只须要修改转发引擎的转发地址为shake-source服务的地址端口,便可经过shake-web展现收到的实时数据。
效果对比
为了与传统http上报数据进行时延对比,设计测试用例进行效果对比。
本次与yomo集成均采用真实环境进行,全部相关应用组件所有采用CluingOS进行容器化部署和安装,场景覆盖了云-边-端的应用。除了验证yomo的加速效果,还将yomo集成整合进了凌犀平台体系(CluingOS/AIOT/MOM),如下主要介绍yomo的加速测试效果。
实际场景
从测试架构图可见,使用两组测试进行对比:
QUIC+Y3通道
如图中橙色流程所示,数据传输路径为:
HTTP通道
如图中绿色流程所示,数据传输路径为:
环境说明
- 5G CPE一体机放置在上海金桥办公室。
- MOM智造运营管理系统部署在广州腾讯云。
- 测试时延链路为上海金桥办公室至广州腾讯云这段网络。
测试方法
- 准备传感器A(3932353062376611)和传感器B(0850533277387820)。
- 传感器A走传统HTTP协议、传感器B走QUIC+Y3协议。
- 每一个传感器传输600条记录,求出平均时延。
计算公式
select device_sn,(timeCount/count)*1000 agv,count from( select device_sn,sum(unix_timestamp(end_time) -unix_timestamp(begin_time)) as timeCount, count(id) as count from sdm_device_logs_copy2 GROUP BY device_sn ) t
测试结论
序号 | 协议类型 | 设备编码 | 平均时延(毫秒) | 测试记录数 |
---|---|---|---|---|
1 | HTTP | 传感器A(3932353062376611) | 100.268333(ms) | 600 |
2 | QUIC+Y3 | 传感器B(0850533277387820) | 33.493333(ms) | 600 |
从采集样本中利用计算公式,求得每一个传感器传输600条数据的平均时延,能够看出HTTP协议平均时延为100.26毫秒,QUIC+Y3协议平均时延只有33.49毫秒,具备很是明显的加速效果。
结束语
近年来,新一代信息技术发展日新月异,互联网由消费领域向工业领域加速拓展。从数字产业化方面来看,工业互联网想要向更大范围、更深程度和更高水平发展,亟需新的技术、产品和解决方案。YoMo 开源编程框架可以大幅提高从边端到云端的传输效率,提高实时性和得到低延时的优点,同时全新的流式计算和编程范式给开发者一个全新的开发体验,更天然更高效地开发出流式计算的应用。借助凌犀的CluingOS超融合工业物联平台能够快速方便地把容器服务部署在边缘端和云端,实现服务治理能力的大幅提高。