简介
Edgex Foundry
是一个开源的、边缘网络软件平台,它直接与设备、传感器等物联网设备进行交互,简单的说,Edgex Foundry
就是一个连通物理世界与云平台软件信息系统的边缘中间件。
部署方式
EdgeX
最初是由Dell构建,在物联网网关上运行,但随着EdgeX
体系对微服务架构的支持,现在EdgeX
微服务的单个实例可以分布在多台服务器上,一个或多个EdgeX
微服务的服务器称为节点。这使EdgeX
能够在边缘的任何地方利用计算、存储和网络资源。
这种松散耦合的体系架构允许跨节点分布,从而进一步可以实现边缘计算的分层逻辑。比如通信服务可以部署在PLC、网关上运行,或者嵌入更智能的传感器中,而其他的EdgeX
服务则可以部署在网络服务器上。因此,部署的范围可能包括嵌入式传感器、控制器、边缘网关、服务器和云系统。
EdgeX
微服务可以部署在一组计算节点上,以最大限度得利用资源,同时也可以将更多得智能处理设备放在更靠近物理边缘的位置。
EdgexFoundry架构
Edgex Foundry
其实就是一组微服务集合的统称,Edgex Foundry
包括4个服务层,2个基础模块。
4个服务层:
-
核心服务层(Core Services Layer)
-
支持服务层(Supporting Services Layer)
-
应用服务层(Application Services Layer)
-
设备服务层(Application Services Layer)
2个基础模块:
-
安全模块(Security)
-
系统管理模块(System Management)
核心服务层(Core Services Layer)
核心服务可以认为是EdgeX
南北两侧的中介,它是物理世界和IT系统之间提供了通信中介服务。其实看名字就晓得,这层服务都是一些很重要的服务,数据流转、指令下发、以及存储EdgeX
中相关的配置信息、设备信息,核心服务包含以下几个服务:
-
Core Data:南侧(物理设备侧)数据的存储以及相关的管理工作
-
Command:控制北侧到南侧指令下发执行的服务
-
Metadata:连接到
EdgeX Foundry
相关服务或设备的元数据存储工作 -
Registry and Configuration:其实就是
EdgeX Foundry
微服务的注册中心和配置中心,EdgeX Foundry
默认使用Consul
。
支持服务层(Supporting Services Layer)
支持服务就是一些附加服务,比如边缘分析服务,正常的软件服务比如调度和数据清理,这些全由支持服务层来提供。
支持服务是基于一些核心服务才能运行的,在通常情况下,支持服务可以被认为是可选择的,就是在进行Edgex部署的时候可以不包含这些服务。
支持服务层包含以下微服务:
-
Rules Engine(规则引擎):该服务基于
EdgeX
实例收集的传感器数据在边缘端执行if-then条件驱动。该服务可以用去取代或增加相关的数据分析服务。 -
Scheduler(任务调度):在指定的调度任务中,服务将通过任何的
EdgeX
提供的API服务以URL的方式触发操作,例如:定期调用核心数据API来清理历史事件(数据)。 -
Alerts and Notifications(告警和通知):通过该服务可以发送相关警报或通知。
应用服务层(Application Services Layer)
应用服务层是从EdgeX
提取、处理/转换设备数据并将其发送到其他系统或平台的方法。现在EdgeX
也提供了一些应用服务示例,可以将数据发送到许多云提供商(Amazon IoT Hub、Google IoT Core、Azure IoT Hube、IBM Watson IoT…),MQTT和HTTP REST端。
应用服务基于“方法管道(functions pipeline)”的方式进行设计。方法管道是按指定顺利处理消息的函数集合。函数管道中的第一个方法就是触发器,触发器开始方法管道的执行工作。比如,触发器接收到了类似于消息队列中的消息,然后每个方法依序处理这个消息,常见的操作包括过滤、转换、压缩和加密等。
设备服务层(Application Services Layer)
设备服务连接物理设备,相当于就是设备的驱动。
设备服务可以是一个服务连接多个物理设备。物理设备可以是简单的单个物理设备,也可以是另一个网关(以及该网关的所有设备)、设备管理器,充当EdgeX Foundry
的设备或设备集合的设备聚合器。
设备服务通过每个设备的接入协议于设备进行通信。设备服务将物联网设备生成和通信的数据转换为通用的EdgeX Foundry
数据结构(事件),并将转换后的数据发送到核心服务层,并发送到EdgeX Foodry
其他层中的其他微服务。
EdgeX
提供了很多使用通用物联网协议对接的设备服务示例,比如Modbus、BACnet、MQTT等。
安全模块(Security)
EdgeX Foundry
的安全模块主要提供对接入的设备以及设备数据的保护,包含两个主要安全组建:
-
安全存储,用于保护
EdgeX
相关机密信息,比如相关服务连接到云系统数据库的访问密码。 -
API网关服务,用以对EdgeX REST资源的访问控制
系统管理模块(System Management)
为外部系统提供监控接入点,以便对EdgeX
服务运行状态、服务运行指标(如内存使用、CPU使用)进行监控,并可以启动/停止/重新启动EdgeX
服务。
软件服务开发SDK
EdgeX
提供了两种类型的SDK来帮助创建北向和南向服务。南北向服务的SDK提供服务基本操作的所有脚手架代码,使连接新设备或云端系统变得更容易。目前EdgeX
提供了以下SDK:
-
Golang版本的设备服务SDK(Golang Device Service SDK)
-
C版本的设备服务SDK(C Device Service SDK)
-
Golang版本的应用服务SDK(Golang Application Functions SDK)
EdgeX如何工作的
设备数据采集
EdgeX
的主要工作就是从传感器和设备采集数据,并将这些数据上报到北侧应用。下面基于Modbus设备服务说明一下这整个过程:
1)设备服务可以将消息(事件)发送到消息总线(message bus,可以基于redis或MQTT实现,默认是redis)上,订阅者(application service或者core data或者是其他)就可以从消息总线上订阅到这个消息(事件)了。
2)另外设备服务也可以通过REST接口将事件发送到core data service。
当core data接收到事件之后(不管是通过message bus还是rest),都会先将事件数据进行存储。EdgeX
默认使用Redis进行存储。当然也允许使用其他的数据库。存储并不是必须的,也可以配置成关闭。考虑数据持久化一般有两种原因:
-
边缘节点目前不在线,在断线期间,设备数据必须要先存储下来,以便后继连上之后北向进行消费。
-
在一些场景下,设备数据的分析功能需要用到历史数据。
当core data基于rest接收到事件之后,它也会将事件消息发送到message bus的特定topic上,以便应用服务进行订阅消费,流程如下图所示:
应用服务接收到事件消息之后,会进行相关的处理操作,然后发送到云端,流程如下:
边缘分析与驱动
EdgeX
允许对从边缘采集的数据进行本地分析,意思就是事件由本地分析处理,并可用于触发设备上的操作。
就像应用服务接收事件进行处理并上报到云端系统一样,应用服务也可以处理EdgeX
事件,以及其包含的设备数据,并将其发送到任意端点,如Step4:
该服务可以处理事件数据,并做出触发设备服务的决定。例如:它可以检查发动机的压力读数是否大于60 PSI。当确定这样的规则为真时,服务调用核心命令服务来触发某些操作,如在某个可控设备上“打开阀门”(参见Step5):
核心命令服务(COMMAND)接收到请求之后,会调用所属设备服务来执行(Step6):
设备服务接收到请求之后,会根据协议进行指令转换,然后将指令发送到对应的设备(Step7):