本文包含将 IoT 解决方案移动到生产环境时应考虑的项的列表。
使用部署标记
标记是核心解决方案组件的离散单元,用以支持定义数量的设备。 每个副本称为一个标记, 或一个缩放单元。 例如,标记可能包含一组设备填充、一个 IoT 中心、一个事件中心或其他路由终结点以及一个处理组件。 每个标记都支持一个定义的设备填充。 你可选择标记可以容纳的最大设备数。 随着设备填充的增长,可以添加标记实例,而不是单独纵向扩展解决方案的不同部分。
如果不添加标记,而是将 IoT 解决方案的单个实例移到生产环境,可能会遇到以下限制:
缩放限制:单个实例可能会遇到缩放限制。 例如,解决方案使用的服务可能对入站连接、主机名、TCP 套接字或其他资源有限制。
非线性缩放或成本:解决方案组件可能不会随发出的请求数或引入的数据量线性缩放。 相反,对于某些组件,一旦达到阈值,性能可能降低或成本可能增加。 相比通过添加标记来横向扩展,纵向扩展增加容量可能不是一种好的策略。
客户分离:可能需要将某些客户的数据与其他客户的数据隔离开来。 同样,可能有些客户需要比其他客户更多的服务系统资源,可以考虑使用不同的标记将他们分组。
单租户实例和多租户实例:你可能有一些需要自己的独立解决方案实例的大型客户。 你可能还有一个可以共享多租户部署的小型客户池。
复杂的部署要求:可能需要有控制地将更新部署到服务,并在不同时间部署到不同的标记。
更新频率:有的客户可能可以接受你的系统频繁更新,而其他客户可能不愿意承受风险,且不希望经常更新你的服务。
地理或地缘政治限制:若要降低延迟或遵守数据主权要求,可以将部分客户部署到特定区域。
若要避免上述问题,请考虑将服务分组到多个标记中。 标记彼此独立运行,且可以独立部署和更新。 单个地理区域可能包含单个标记,也可能包含多个标记,以允许在区域内横向扩展。 每个标记都包含一个客户子集。
发生暂时性故障时使用回退
与远程服务和资源通信的所有应用程序必须对暂时性故障敏感。 对于云中运行的应用程序尤其如此,因为其环境的性质与通过 Internet 建立连接的特点,意味着更容易遇到这种类型的故障。 暂时性故障包括:
- 暂时失去与组件和服务的网络连接
- 服务暂时不可用
- 服务繁忙时出现的超时
- 设备同时传输时引起的冲突
这些故障通常可自我纠正,如果在适当的延迟后重复操作,则操作可能会成功。 但是,确定重试之间的适当时间间隔很困难。 典型策略会使用以下类型的重试间隔:
- 指数退让。 应用程序在第一次重试之前短暂地等待,每个后续重试的间隔时间呈指数增加。 例如,在 3 秒、12 秒、30 秒后重试操作。
- 固定间隔。 应用程序每次尝试的间隔时间相同。 例如,固定每 3 秒重试操作。
- 立即重试。 有时候暂时性故障很短暂,可能是由于网络数据包冲突或硬件组件流量高峰等事件。 在此情况下,适合立即重试操作,因为如果故障在操作让应用程序组合并发送下一个请求时已清除,则操作可能会成功。 不过,立即重试次数不得超过一次,如果立即重试失败,应改用备用策略,例如指数退让或故障回复操作。
- 随机化。 任何上述重试策略都可能包含随机化元素,以防止客户端的多个实例同时发送后续重试请求。
另请避免以下反模式:
- 实现不应包含重复的重试代码层。
- 切勿实施永不结束的重试机制。
- 切勿多次执行立即重试。
- 避免使用固定重试间隔。
- 防止同一个客户端有多个实例,或不同客户端有多个实例同时发送重试请求。
使用零接触预配
预配是指将设备注册到 Azure IoT 中心的行为。 通过预配,IoT 中心将可以识别设备和设备使用的证明机制。 可以使用 Azure IoT 中心设备预配服务 (DPS) 或直接通过 IoT Hub 注册表管理器 API 进行预配。 使用 DPS 可带来后期绑定的好处,这样,无需更改设备软件即可将现场设备删除和重新预配到 IoT 中心。
下面的示例演示如何使用 DPS 实现测试到生产环境的转换工作流。
- 解决方案开发人员将测试和生产 IoT 云链接到预配服务。
- 如果不再预配,设备将实现 DPS 协议来查找 IoT 中心。 最初,设备被预配到测试环境。
- 由于设备在测试环境中注册,因此它将在测试环境连接并进行测试。
- 开发人员将设备重新预配到生产环境,并将其从测试中心删除。 测试中心会在下次重新连接时拒绝设备。
- 设备将连接并重新协商预配流。 现在,DPS 会将设备定向到生产环境,设备将在该环境中进行连接和身份验证。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- 马修·科斯纳 | 首席软件工程经理
- Ansley Yeo | 首席项目经理
若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。