一、概述
EdgeX Foundry是一个由Linux基金会支持的边缘计算开源平台。它的定位是作为通用工业物联网边缘计算通用框架,部署在路由器和交换机等边缘设备上。EdgeX Foundry为各种传感器、设备或其他物联网器件提供即插即用功能,并管理它们,进一步收集和分析它们的数据,或者导出至边缘计算应用或云计算中心做进一步处理。
EdgeXFoundry 可被视为硬件与软件之间的中间件,它南向连接各种设备和传感器,北向连接应用程序。
二、系统架构
2.1 架构原则
- 必须与平台无关
- 硬件(x86,ARM)
- 操作系统(Linux, Windows, MacOS, …)
- 支持分布式(通过微服务架构设计支持在边缘节点,网关,雾节点、云平台等上部署)
- 部署/编排(Docker, Snaps, K8s, roll-your-own…)
- 协议(北侧协议或南侧协议)
- 必须非常灵活
- 微服务化 - 平台的任何部分都可以通过其他微服务或软件组件进行升级、替换或增强
- 灵活伸缩性 - 允许服务根据设备功能和用例进行扩展和缩减
- 应该提供“参考实现”服务,但鼓励最优解决方案
- 设备驱动参考实现
- 应用服务参考实现
- 必须提供存储和转发能力
- 高度自治:支持断开连接/远程边缘系统
- 断点续传:处理间歇性连接
- 必须支持和促进“智能”向边缘移动,以便解决
- 驱动延迟问题
- 带宽和存储问题
- 远程操作问题
- EdgeXFoundry必须支持棕色和绿色设备/传感器的现场部署
- 棕色设备:边缘/物联网部署中的旧设备(节点、设备、传感器),通常使用旧协议
- 绿色设备:具有现代协议的新设备
- EdgeXFoundry必须是安全的,易于管理的
- 独立安全模块 - 支持自身安全性管理
- 零信任机制 - 适合于更多安全性高的场景
2.2 部署范围
EdgeX 微服务的单个实例可以分布在多个主机平台上。一个或多个 EdgeX 微服务的主机平台称为节点。这使 EdgeX 能够利用计算、存储和网络资源,无论它们位于边缘的哪个位置。
EdgeX 松耦合架构可实现跨节点分布,从而实现分层边缘计算,部署范围可能包括嵌入式传感器、控制器、边缘网关、服务器和云系统。
2.3 整体架构
EdgeX Foundry 是开源微服务的集合。这些微服务分为4个服务层和2个底层增强系统服务。
服务层:
- 核心服务层 - Core Services Laye吃的。。
- lsr
- 支持服务层 - Supporting Services Layer
- 应用服务层 - Application Services Layer
- 设备服务层 - Device Services Layer
底层系统服务:
- 安全 - Security
- 系统管理 - System Management
2.3.1 设备服务层
设备服务是与传感器/设备或物联网对象(“物”)交互的边缘连接器,其中包括机器、机器人、无人机、HVAC 设备、相机等,还包括未来的无人驾驶汽车、交通信号、全自动快餐设施等。通过利用可用的连接器,可以控制设备并/或传输数据至 EdgeX 或从其传输数据。您还可以使用设备服务 SDK 来创建您自己的 EdgeX 设备服务。
设备服务可以同时为一个或多个设备(传感器、执行器等)提供服务。设备服务管理的设备可能不是简单的、单一的物理设备。该设备可以是另一个网关(以及该网关的所有设备)、设备管理器、充当 EdgeX Foundry 设备或设备集合的设备聚合器。
设备服务通过每个设备对象本机的协议与设备、传感器、执行器和其他 IoT 对象进行通信。设备服务将 IoT 对象生成和通信的数据转换为通用 EdgeX Foundry 数据结构,并将转换后的数据发送到核心服务层以及 EdgeX Foundry 其他层中的其他微服务。
2.3.2 核心服务层
核心服务了提供事物 (OT) 与 系统 (IT) 之间的中介通信,是北向和南向之间的重要中介。通过这些服务可大体了解给定部署中连接了哪些设备,正在传输哪些数据以及 EdgeX 的配置方式。
核心服务包括:
- 核心数据 - Core Data:由南向设备和传感器收集的用于数据读取的集中式数据库。
- 核心命令/控制 - Command:代表其他微服务、应用和外部系统对设备执行明亮/操作,这些命令存储在元数据中。
- 元数据 - Metadata:由其他服务使用,用于了解设备以及如何与之进行通信。元数据提供了配置新设备并将其与其拥有的设备服务配对的能力。
- 注册表和配置 - Registry and Configuration:集中化并简化服务配置数据。该服务使用开源项目Consul来进行键值存储,并且客户端可以通过REST API访问EdgeX。为其他EdgeX微服务提供有关EdgeX内关联服务和微服务配置属性(即初始化值存储库)的信息。
2.3.3 支持服务层
支持服务包括边缘分析(也称为本地分析)等微服务,以及典型的软件应用功能,例如日志记录、计划和数据清理等功能。支持服务通常需要一些核心服务才能发挥作用。在实际部署过程中在EdgeX架构中是可选的。
支持服务包括:
- 规则引擎:参考实现边缘分析服务,根据收集的传感器数据在执行 if-then 条件驱动。EMQ X Kuiper是EdgeX参考规则引擎,可让用户在边缘实现快速数据处理并使用SQL编写规则。
- 服务:按照配置的时间间隔或者计划,在任意EdgeX服务中心执行操作。
- 警报和通知:向系统或工作人员发送警报/通知,以提醒他们另一项微服务在节点上发现了问题。
2.3.4 应用服务层
应用服务是指将感应到的数据从EdgeX提取、处理/转换和发送到所选端点或应用的方式。这些服务可以使分析数据包、企业或本地应用,也可以是Azure IoT Hub、AWS IoT或Google IoT Core等云系统。
目前支持的开箱即用终端节点包括 HTTP 和 MQTT 端点,但将来将包括其他产品,并且可能会 包括 自定义终端节点。数据导出主要包括HTTPPost和MQTTSecretSend两个方式。
应用程序服务基于 “Functions Pipeline” 的理念, “Functions Pipeline” 是按照指定顺序处理消息的Functions的集合,“Pipeline” 中的第一个Function是触发器,触发器负责启动 “Functions Pipeline” 的执行。
2.4.3.1 Trigger
sdk中主要包括两种触发器:
- HTTP请求:通过http请求post核心数据
- 消息订阅:通过消息队列订阅
2.4.3.2 Function
常见function包括过滤、转换(即转换为 XML 或 JSON)、压缩和加密功能。比如下图的应用服务主要包括4个function:
- DeviceNameFilter :过滤与指定 ID 不匹配的事件
- ValueDescriptorFilter :过滤不符合指定数值的事件
- XMLTransform 和JSONTransform:将数据转化为xml或者json格式
2.4.3.3 Export
sdk中主要包括两种function:
- HTTP请求:通过http请求post核心数据到指定的应用端
- 消息发布:通过消息队列发布消息
2.3.5 系统服务层
2.3.5.1 安全基础服务
EdgeX Foundry的安全组件可以保护EdgeX Foundry管理的设备、传感器和其他物联网对象。
基于EdgeX是一个“中立的边缘网络开源软件平台供应商”这一事实,EdgeX的安全特性也建立在开放接口和可插拔、可替换模块的基础上。
主要有两个安全组件:
安全仓库: 用于提供保存 EdgeX 机密的安全位置。比如:其他服务连接到云数据库的访问密码等。
API网关:作为反向代理来限制对 EdgeX REST 资源的访问并执行访问控制相关的工作。
2.3.6 软件开发套件(SDKs)
EdgeX 提供了两种类型的 SDK 来协助创建北向和南向服务,特别是创建应用程序服务和设备服务。用于北向和南向服务的 SDK 通过为开发人员提供负责服务基本操作的所有脚手架代码,使连接新事物或新的云/企业系统变得更容易。从而使开发人员能够专注于与南向或北向对象的连接细节,而无需担心微服务的所有原始管道。
主要的SDKs:
- Golang 设备服务 SDK(大部分设备服务)
- C 设备服务 SDK(少数设备服务)
- Golang 应用函数 SDK(目前有且只有 Golang 版本)
三、工作原理
3.1 北向链路
EdgeX 的主要工作是从传感器和设备收集数据,并将这些数据提供给北向应用程序和系统。数据由使用该设备协议的设备服务从传感器收集。
3.1.1 设备数据上传到核心数据服务
- 消息总线:通过消息总线(redis stream或者MQTT)传输到应用服务和数据服务
- REST API:通过rest api分别传输到数据服务和应用服务
数据服务数据存储方式:
- 本地存储:边缘端的redis(内存型)、mysql(关系型)、mongoDB(非关系型)、influxDB(时序型)等数据库。其中,边缘保存的原因如下:
- 断点续传 - 边缘节点并不总是连接的。在断网运行期间,必须保存传感器数据,以便在连接恢复时可以向北传输。这称为存储和转发能力。
- 历史参考 - 在某些情况下,传感器数据分析需要回顾历史,以便了解趋势并根据历史做出正确的决策。如果传感器报告现在温度为 30°C,您可能想知道十分钟前的温度是多少,然后再决定调整加热或冷却系统。如果温度为 40°C,您可能会认为十分钟前进行的降低室温的调整足以使房间降温。历史数据的背景对于本地分析决策非常重要。
- 云存储:通过REST API或者消息总线传输到云服务
3.1.2 核心数据上传到应用服务
当核心数据从设备服务接收事件对象时,它会将传感器数据事件放在发往应用程序服务的消息主题上。
主要采用消息总线方式进行上传:
- 使用设备服务的消息总线
- 单独从核心数据服务新建消息总线
默认情况下,Redis Pub/Sub 用作消息传递基础设施(步骤 Step 2)。 MQTT 或 NATS(在构建期间选择加入)也可以用作核心数据和应用程序服务之间的消息传递基础设施。
3.1.3 应用服务上传到端
应用程序服务根据需要转换数据并将数据推送到端点。它还可以在将事件发送到端点之前对事件进行过滤、丰富、压缩、加密或执行其他功能(步骤 Step 3)。
端点包括:
- HTTP/S 端点
- MQTT 主题
- 云系统(云主题)
3.2 南向链路
3.2.1 应用服务到规则引擎
规则引擎主要包括:
- eKuiper – 一个开源规则引擎
- AI Agent – 机器学习模型代理
3.2.2 规则引擎到命令服务
规则引擎可以探索传感器事件数据并做出触发设备驱动的决定。
例如,它可以检查发动机的压力读数是否大于 60 PSI。当确定这样的规则为真时,分析包会调用核心命令服务来触发某些操作,例如在某些可控设备上“打开阀门”(步骤 Step 5)。
3.2.3 命令服务到设备服务
核心命令服务获取动作请求,并根据请求确定需要动作于哪个设备;
然后调用所属设备服务来执行驱动(步骤 Step 6)。核心命令允许开发人员在启动之前采取额外的安全措施或检查。
3.2.4 设备服务到设备
设备服务接收启动请求,将其转换为特定于协议的请求,并将请求转发到所需的设备(步骤 7)。
四、参考资料
官方文档:Introduction - EdgeX Foundry Documentation
wiki网站:EdgeX Wiki - Confluence
edgex存储库:https://github.com/edgexfoundry