前言
这个例子描述 YoMo 在工业互联网数据采集中的应用,以收集噪声传感器的数据为例,涉及数据收集/处理/工作流/数据展示的全过程,为了便于体验运行效果,还会对其进行容器化,并通过docker快速部署体验版。
述语
- xxx-source: 表示一个数据源收集程序
- xxx-zipper: 表示一个工作流和控制平面
- xxx-flow: 表示一个工作流单元,用于实际的业务逻辑处理,被zipper调度。
- xxx-sink: 表示一个数据的传送目的地,一般落地数据库或者传递给下一级代理,被zipper调度。
架构
从图中可见,区分了边缘端和云端两个独立区域,区域之间是通过弱网或者互联网连接,这里简单介绍一下各个服务:
- 边缘端部署了传感器设备(Noise)和数据收集网关(ZLAN),网关会定时向设备请求状态数据,并转换为MQTT协议数据发送给noise-source收集器,source起到转换编码并与YoMo工作流引擎zipper建立连接的作用。关于传感器设备和数据收集网关的硬件选购和配置可以参与这篇文章:https://yomo.run/zh/aiot。
- 对于不想购买硬件设备的开发者,这里也提供了一个noise-emitter模拟器用来产生噪声数据。
- zipper是一个强大的工作流引擎,通过编排(workflow.yaml)可以调度多个flow和sink,让他们以流的方式把业务逻辑串联起来,以满足复杂的需求。与之相连的所有通信和编解码均以QUIC+Y3进行,提供可靠实时的流式处理,全程体验流式编程的乐趣。
- noise-flow 实现把噪音值除以10的简单处理,并且监控如果超过一定阀值后输出日志进行警报。
- noise-sink 没有真的输出到数据库,而是通过搭建一个WebSocket服务器,把实时的噪音状态输出给任意的网页进行展示消费。
- noise-web 是一个消费WebSocket的网页服务,他部署在哪里都可以,只要能访问到noise-sink提供的WebSocket服务地址即可,这里我们假设部署回边缘端也是没有问题的。
代码
下表提供了案例的全部代码,供感兴趣的朋友查看,参照这个案体的代码,可以轻松开发出类拟场景的案例。
项目 | 地址 | 说明 |
---|---|---|
noise-source | yomo-source-noise-example | 收集MQTT消息格式的噪音数据 |
noise-zipper | yomo-zipper-noise-example | 编排本案体的工作流和数据流向 |
noise-flow | yomo-flow-noise-example | 对噪音数据进行预处理和警报 |
noise-sink | yomo-sink-socketio-server-example | 提供WebSocket服务用于数据展示 |
noise-web | yomo-sink-socket-io-example | 消费WebSocket服务展示噪音状态 |
noise-emitter |