某些组织可能会受益于从边缘设备直接连接到 Pub/Sub,而不是实现特定架构来将设备连接到分析应用。对于具有少量已连接的设备的组织,我们推荐使用此方法(这些已连接的设备汇总来自本地网络或内部网络中大量设备和传感器的数据)。如果您的组织连接了更安全的环境(例如工厂)中的设备,我们也建议您使用此方法。本文档概述了在将设备连接到 Google Cloud 产品时需要考虑的高级架构注意事项。
本文档是系列文档中的一篇,该系列介绍了 Google Cloud 上的 IoT 架构以及如何从 IoT Core 进行迁移。本系列中的其他文档包括以下内容:
- Google Cloud 上的关联设备架构概览
- Google Cloud 上的独立 MQTT 代理架构
- Google Cloud 上的 IoT 平台产品架构
- 在 Google Cloud 上运行 IoT 后端的最佳做法
- 连接到 Google Cloud 的 Pub/Sub 架构上的设备(本文档)
- 自动预配和配置边缘与裸机系统和服务器的最佳做法
- 从 IoT Core 迁移环境
架构
下图显示了直接连接到 Pub/Sub 的聚合设备或网关。
上图中的事件流如下所示:
- 您可以使用 Identity and Access Management API 为服务账号创建新的密钥对。公钥存储在 IAM 中。但是,您必须安全地下载私钥并将其存储在网关设备中,以便将它用于身份验证。
- 聚合设备会从位于一个安全本地网络中的多个远程设备和传感器收集数据。远程设备使用本地边缘协议(例如 MODBUS、BACNET、OPC-UA 或其他本地协议)与网关进行通信。
- 聚合设备通过 HTTPS 或 gRPC 将数据发送到 Pub/Sub。这些 API 调用使用保存在聚合设备上的服务账号私钥进行签名。
架构注意事项和选择
由于 Pub/Sub 是一种无服务器数据流服务,因此您可以使用它来创建由事件生成方和使用方(称为发布者和订阅者)组成的双向系统。在某些已连接的设备场景中,您只需要可伸缩的发布和订阅服务即可创建有效的数据架构。以下部分介绍了在 Google Cloud 上将设备实现到 Pub/Sub 架构时需要考虑的注意事项和选择。
注入端点
Pub/Sub 以多种语言提供预构建的客户端库,以实现 REST API 和 gRPC API。它支持两种消息提取协议:REST (HTTP) 和 gRPC。要使已连接的设备通过 Pub/Sub 发送和接收数据,设备必须能够与其中一个端点进行交互。
许多软件应用都内置了对 REST API 的支持,因此使用 Pub/Sub REST API 进行连接通常是最简单的解决方案。但在某些使用场景中,gRPC 可能是一种更高效、更高效的替代方案。由于 gRPC 对消息载荷使用序列化协议缓冲区,而不是 JSON、XML 或其他基于文本的格式,因此 gRPC 更适合在连接设备中使用的常见低带宽应用情况。gRPC API 连接的传输速度也比 REST 快,并且支持并发双向通信。一项研究发现,gRPC 的速度最高可以达到 REST 的七倍。因此,对于许多已连接的设备场景,如果 gRPC 连接器可用或可为已连接的设备应用实现,则 gRPC 是更好的选择。
设备身份验证和凭据管理
Pub/Sub 支持多种身份验证方法,以便从 Google Cloud 外部进行访问。
如果您的架构包含外部身份提供商(如 Active Directory 或本地 Kubernetes 集群),您可以使用工作负载身份联合来管理对 Pub/Sub 的访问权限。此方法可让您为已连接的设备创建短期访问令牌。您还可以向已连接的设备授予 IAM 角色,而无需使用服务账号密钥的管理和安全开销。
如果外部身份提供方不可用,则服务账号密钥是身份验证的唯一选项。如果管理不当,服务账号密钥可能会成为安全风险,因此我们建议您遵循安全最佳做法,将服务账号密钥部署到已连接的设备。如需了解详情,请参阅管理服务账号密钥的最佳做法。服务账号也属于有限资源,任何云项目的用户管理的服务账号配额都有限。因此,此方法仅适用于需要连接少量设备的部署。
后端应用
将数据注入到 Pub/Sub 主题后,可供在具有相应凭据和访问权限的 Google Cloud 上运行的应用使用。除了应用中的 Pub/Sub API 之外,无需其他连接器。您可以让消息可用于后端基础架构中的多个应用,以进行并行处理或用于提醒,以及进行归档存储和其他分析。
使用场景
以下部分介绍了从设备到 Pub/Sub 的直接连接非常适合连接设备的使用场景。
从本地数据历史进行批量数据注入
设备到 Pub/Sub 的连接最适合具有少量需要传输大量数据的端点的应用。操作数据历史记录是本地系统的一个很好示例,该系统存储大量需要传输到 Google Cloud 的数据。对于此使用场景,只有少量端点必须进行身份验证(通常是一到几个已连接的设备),这在服务账号身份验证的典型参数内。这些系统通常还具有模块化架构,可让您实现与 Google Cloud 通信所需的 Pub/Sub API 连接。
工厂的本地网关数据聚合
在本地网关中聚合工厂传感器数据是另一个非常适合直接 Pub/Sub 连接的使用场景。在此情况下,本地数据管理和聚合系统部署在工厂的网关设备上。此系统通常是可连接到各种本地传感器和机器的软件产品。产品会收集数据并频繁地将数据转换为标准化表示法,然后再传递给云端应用。
在这种情况下,许多设备都可以连接。但是,这些设备通常仅连接到本地网关,并由该设备上的软件管理,因此无需基于云的管理应用。与 MQTT 代理架构中的不同,在此使用场景中,网关在聚合和转换数据方面发挥着重要作用。
网关连接到 Google Cloud 时,会通过服务账号密钥向 Pub/Sub 进行身份验证。该密钥会将聚合和转换后的数据发送到云应用以进行进一步处理。连接的网关数量通常在数十到数百台设备之间,该范围在服务账号身份验证的典型范围内。
后续步骤
- 了解管理服务账号密钥的最佳做法。
- 阅读外部工作负载身份联合概览。
- 详细了解 Pub/Sub
- 探索 Google Cloud 的参考架构、图表和最佳做法。查看我们的云架构中心。
- 如需查看更多参考架构、图表和最佳实践,请浏览云架构中心。