核心服务提供了 EdgeX 北向和南向之间的中介。正如这些服务的名称所暗示的,它们是 EdgeX 功能的“核心”。核心服务是连接“事物”、收集的传感器数据和 EdgeX 配置的固有知识所在。
本文将介绍核心服务之核心数据: Core Data
EdgeX Foundry 在下面将统一简称为 EdgeX。
本文内容大部分来自官方文档:EdgeX Core Services
核心由以下微服务组成:
- Core Data 核心数据:持久存储库和相关管理服务,用于从南向对象收集的数据。
- Command 命令:促进和控制从北向到南向的驱动请求的服务。
- Metadata 元数据:有关连接到 EdgeX Foundry 的对象的元数据的存储库和关联管理服务。元数据提供了配置新设备并将其与其拥有的设备服务配对的功能。
- Registry & Configuration 注册表和配置:为其他 EdgeX Foundry 微服务提供有关系统内关联服务和微服务配置属性(即初始化值存储库)的信息。
目的
Core Data 微服务为设备收集的数据提供集中持久化。收集传感器数据的设备服务调用核心数据服务,将传感器数据存储在边缘系统(例如网关中),直到数据“向北”移动,然后导出到企业数据中心和云系统。核心数据将数据保存在本地数据库中。 默认情况下使用 Redis,但数据库抽象层允许添加其他数据库实现。
其他服务和系统(无论是 EdgeX 特定的还是外部的)都通过核心数据服务访问传感器数据。核心数据还为数据位于边缘时收集的数据提供一定程度的安全性和保护。
笔记
核心数据是完全可选的。设备服务可以通过消息总线直接向应用程序服务发送数据。如果不需要本地持久化,可以删除该服务。
如果需要持久化,传感器数据可以通过消息总线发送到核心数据,然后核心数据持久化数据。请参阅下面的更多细节。
传感器数据可以通过两种不同的方式发送到核心数据:
服务(如设备服务)和其他系统可以将传感器数据放在消息总线主题上,并且可以将核心数据配置为订阅该主题。 这是将数据获取到核心数据的默认方法。 任何服务(如应用程序服务或规则引擎服务)或第三个系统也可以订阅同一主题。 如果传感器数据不需要在本地持久化,那么核心数据就不必订阅消息总线主题——使得核心数据完全可选。 默认情况下,消息总线是使用 Redis Pub/Sub 实现的。 MQTT 可以用作替代消息总线实现。
服务和系统可以调用核心数据 REST API 将数据发送到核心数据并将数据放入本地存储。 REST 方法是向核心数据发送数据的另一种方法。当数据通过 REST 发送到 core data 时,core data 会将数据重新发布到消息总线上,以便其他服务可以订阅它。
默认情况下,核心数据通过 Redis Pub/Sub 将数据移动到应用程序服务(和边缘分析)。可以使用 MQTT 或 NATS(在构建时选择加入)替换 Redis。使用 MQTT 需要使用 MQTT broker 代理,例如 mosquitto。 使用 NATS 需要在启用 NATS 的情况下构建所有服务并安装 NATS 服务器。
消息传递基础设施是抽象的,这个抽象已就位,允许创建和使用其他消息总线(例如 AMQP)实现。
提示
绝大部分应用场景下,都是采用第一种方式:通过消息总线的方式来传递数据。因为,一旦使用 Redis 作为核心数据存储的 Core Data 微服务时,对宿主主机的硬件资源有比较高的要求,如:内存大小,磁盘IO等。
入门
概述
Core Data 是 EdgeX 的核心服务之一。需要持久保存事件/读数的应用程序需要它。 对于不需要存储和访问事件和读数的解决方案,完全可以在没有 Core Data 的情况下使用 EdgeX 框架。
使用核心数据运行服务
运行所有必需服务的最简单方法是从终端窗口使用 Compose Builder 工具。
- 克隆 EdgeX Compose 仓库
- 更改为 compose-builder 文件夹
- 运行服务至此,在非安全模式下运行所有标准 EdgeX 服务,包括核心数据以及虚拟设备。 Core Data 将使用 Redis 数据库作为其数据存储。
git clone https://github.com/edgexfoundry/edgex-compose/tree/v3.1 cd edgex-compose make run no-secty ds-virtual
在没有核心数据的情况下运行服务
同样的,运行所有必需服务的最简单方法是从终端窗口使用 Compose Builder 工具。
- 克隆 EdgeX Compose 仓库
- 更改为 compose-builder 文件夹
- 生成 compose 文件
git clone https://github.com/edgexfoundry/edgex-compose/tree/v3.1 cd edgex-compose make gen no-secty ds-virtual
- 从 docker-compose.yml 文件中删除 core-data 服务,并解决掉 core-data 的任何依赖项。
- 运行撰写文件。至此,在非安全模式下运行所有标准 EdgeX 服务(核心数据除外)以及虚拟设备。
make up
配置
请参阅常规通用配置文档了解所有服务通用的配置设置。 以下仅是特定于核心数据的其他设置和部分。
EdgeX 3.0
对于 EdgeX 3.0,MessageQueue
配置已移至通用配置 MessageBus
中。
Writable
属性 | 默认值 | 描述 |
---|---|---|
可写属性可设置,无需重启服务即可动态生效 | ||
日志级别 | INFO | 日志条目严重级别。不属于默认级别或更高级别的日志条目将被忽略。 |
持久化数据 | true | 如果为 true ,核心数据会将发送给它的所有传感器数据保留在其关联的数据库中 |
Writable.Telemetry
属性 | 默认值 | 描述 |
---|---|---|
请参阅通用配置了解所有服务通用的遥测配置 Writable.Telemetry | ||
Metrics | Core Data 收集的服务指标。布尔值指示是否启用指标报告。 | |
Metrics.EventsPersisted | false | 启用/禁用持续事件数量的报告。 |
Metrics.ReadingsPersisted | false | 启用/禁用持续读数数量的报告。 |
Tags | <empty> | 要包含在报告的每个指标中的任意核心数据服务级别标签的列表。 |
Service
属性 | 默认值 | 描述 |
---|---|---|
核心数据的独特设置。常用设置可以在常用配置中找到 | ||
Port | 59880 | 微服务端口号 |
StartupMsg | This is the EdgeX Core Data Microservice | 服务完成引导启动时记录消息 |
Database
属性 | 默认值 | 描述 |
---|---|---|
核心数据的独特设置。常用设置可以在常用配置中找到 | ||
Name | coredata | 数据库或文档存储名称 |
MessageBus.Optional
属性 | 默认值 | 描述 |
---|---|---|
核心数据的独特设置。常用设置可以在常用配置中找到 | ||
ClientId | core-data | 连接到 MQTT 或 NATS 基础 MessageBus 时使用的 ID |
MaxEventSize
属性 | 默认值 | 描述 |
---|---|---|
MaxEventSize | 25000 | 通过 REST 或 MessageBus 接受的最大事件大小(以千字节 KB 为单位)。 0 表示默认为系统最大值。 |
Retention
属性 | 默认值 | 描述 |
---|---|---|
Enabled | false | 启用或禁用数据保留。 |
Interval | 30s | 清除间隔定义数据库何时应清除高于 MaxCap 的读数。 |
MaxCap | 10000 | 最大容量定义了应在何处检测读数的高水位线,以将读数量清除到最小容量。 |
MinCap | 8000 | 最小容量定义了清除期间读数总数应返回到的位置。 |
V3 配置迁移指南
没有更新配置
请参阅通用配置参考了解有关常见配置更改的完整详细信息。
源代码
Core Data 的源代码可以在 edgex-go
中找到:https://github.com/edgexfoundry/edgex-go/cmd/core-data
事件和读数
从传感器收集的数据被编组到 EdgeX 事件和读取对象中(作为 JSON 对象或编码为核心数据的 CBOR 的二进制对象传递)。一个事件代表一个或多个传感器读数的集合。读数的数量取决于所连接的设备/传感器。
一个事件必须至少有一次读数。事件与传感器或设备相关——感知环境并产生读数的“东西”。读数是事件的一个组成部分。读数是一个简单的键/值对,其中键 (ResourceName) 是遥测到的指标,值是遥测到的实际数据。读数可能包括其他信息位,以为该数据的用户提供更多上下文(例如,值的数据类型)。读取数据可以被数据可视化系统、分析工具等使用。
例子
来自“motor123”设备的事件有两个读数(或遥测值)。第一个读数表明 motor123 设备报告的电机压力为 1300(测量单位可能类似于 PSI)。
读数上的值类型属性(如上面的 type 所示)让信息的使用者知道该值是一个整数,以 int64 为基数。第二个读数表明 motor123 设备同时报告的电机温度为 120(可能以华氏度为单位)。
数据保留和持久上限
EdgeX 3.1
EdgeX 3.1 中的新增功能
笔记
此功能适用于核心数据和支持通知服务。
概述
核心数据服务
在用例中,由于核心数据无限期地将数据保留在本地数据库中,因此需要仅保留最新的最近读数并清理旧的读数,因为保留无限数量的读数被认为计算成本高昂,并可能导致机器内存不足。因此,在核心数据上放置了保留机制,以保留一定数量的读数。
在此机制下,最大读取容量称为 MaxCap
,最小读取容量称为 MinCap
。核心数据会根据 Interval
配置创建内部时间表,检查读数数量是否高于 MaxCap
。当读取数量达到 MaxCap
时,Core data 会将读取数量清除到 MinCap
。
例如,MaxCap
设置为 10,MinCap
设置为 2,Interval
设置为至 3 秒。现在,核心数据将每 3 秒检查本地数据库中有多少个读数。当读数达到 10 个时,核心数据将检查第 3 个读数以找到相关事件的原始时间戳,并执行函数 DeleteEventsByAge
按预设时间删除事件。这样相关的读数内容也会被删除。
介绍
有关数据保留的详细信息,请参阅限制核心数据读数的用例。
必备知识
- 有关数据保留的详细信息,请参阅核心数据配置属性并浏览至保留 选项卡。
- 有关数据保留的详细信息,请参阅通知配置属性并浏览至保留 选项卡。
启用数据保留
启用数据保留机制的两种方法:
- 使用环境变量覆盖默认配置
RETENTION_ENABLED: true
RETENTION_INTERVAL: <interval>
RETENTION_MAXCAP: <maxcap>
RETENTION_MINCAP: <mincap>
有关环境变量覆盖的详细信息,请参阅服务配置覆盖。
- 使用 Consul 覆盖默认配置打开 Consul Web 用户界面,然后转到核心数据或支持通知服务的
Retention
部分来自定义配置。
有关 Consul 的详细信息,请参阅配置和注册表提供程序。
API 参考
EdgeX Foundry Core Data 微服务与数据库通信,以存储从设备和传感器收集的事件/读数。它具有将此数据库公开给其他服务的 API,以允许这些服务添加、查询和删除事件/读数。
https://raw.githubusercontent.com/edgexfoundry/edgex-go/v3.1/openapi/v3/core-data.yaml
关于我们
亿琪软件
上海亿琪软件有限公司成立于 2016 年,专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域,致力于物联网领域前沿技术的创新,为用户提供全方位、智能化和安全的物联网解决方案。
2023 年,公司发布“YiFUSION |工业边缘智能融合一体机”产品,为工业客户提供一整套的边缘计算+AI 能力:高性能数据采集、多类型数据融合、AI 算法集成、云端业务对接。在边缘网关的基础上,集成了 IoT 平台的边缘协同能力、本地 Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。
2022 年,公司推出 “YiCLOUD |亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域,公司软硬件产品和解决方案获得华为技术认证,得到中国移动 OCP 认证,公司还是边缘计算产业联盟 ECC 成员。
联系我们--商业服务
- 网站:http://yiqisoft.cn
- 邮件:support@yiqisoft.cn
- 电话:021-68863086
- 手机:186-1666-9123