本示例体系结构演示了汽车原始设备制造商 (OEM) 的端到端方法,内含一个参考体系结构和几个可重复使用的支持开源库(已发布)。 Microsoft 对车队控制软件进行了重新构建,使之高度可用、异地冗余且与供应商无关,同时可在混合云环境中运行。
体系结构
异地冗余且零停机时间故障转移,以实现 99.9% 的可用性和灾难恢复
下载此体系结构的 Visio 文件。
工作流
- 后端实例由以下组件组成:Azure IoT 中心、Ingestion、RabbitMQ、Mission State、Vehicle State、Job Manager 和 Geo DB。此实例部署于两个 Azure 区域中。 IoT 中心可连接到使用微服务体系结构构建的一组应用程序,可以使用 Azure 应用程序服务的 Web 应用功能、用于容器的 Web 应用或 Kubernetes 将这些应用程序部署于 Azure 应用程序服务。
- 任意给定时间点控制车间 AGV 的后端则由领导选制系统确定。 如果相应的后端出现故障,领导选制系统会立即将控制权转移到另一区域的后端。
- 得益于这种异地冗余和零停机时间故障转移体系结构,只要 Internet 连接和外部子系统(如 SAP)不是限制因素,在 Azure 中运行的 AGV 控制软件即可实现 99.9% 的可用性。
用于与数据中心无关的部署的 Kubernetes 和 RabbitMQ
下载此体系结构的 Visio 文件。
即使生产工厂与 Azure 之间的 Internet 连接是限制因素,AGV 控制软件仍可部署到本地计算节点。 使用 Kubernetes 和 RabbitMQ 作为与平台无关的技术,可将上一部分所述的应用程序层部署于 Azure IoT Edge 设备。
实施适用于与 AGV 供应商无关的通信的 VDA 5050 规范
下载此体系结构的 Visio 文件。
我们的 AGV 控制软件符合 VDA 5050 车辆连接器规范,因此可以与不同供应商的各类 AGV(也符合 VDA 5050)通信。
工作流
在此体系结构中,可以简要了解用于在 Azure 中运行后端 AGV 车队控制解决方案的不同服务和组件:
- 开发者提交新代码时,GitHub Actions 会自动扫描代码以快速查找漏洞和编码错误, 还可自动部署应用程序和基础结构组件。
- 容器注册表可存储容器映像,后者可用于 AGV 车队控制后端的不同服务。
- 后端服务可部署到用于容器的 Web 应用。
- 这些后端服务可以使用 VDA 5050 协议连接到外部系统, 还可以连接到托管的流式处理平台(如 Kafka)并将车辆信息存储于 Azure SQL 数据库中。
- Azure Key Vault 用于存储密码、密钥和证书。
- Application Insights 可针对作为后端服务运行的应用程序实现日志记录和监视。
- 托管标识可连接到 Azure 中的不同服务和资源,开发者无需管理凭据。 它们为应用程序提供一个标识,可以在连接到支持 Microsoft Entra 身份验证的资源时使用。
组件
Azure 应用程序服务是用于在托管虚拟机 (VM) 中生成和托管应用的平台即服务 (PaaS), 可管理运行应用的底层计算基础结构。 应用程序服务提供资源使用配额和应用指标的监视、诊断信息的记录,以及基于指标的警报。
Azure 虚拟网络是 Azure 中专用网络的基本构建基块。 此服务允许多种类型的 Azure 资源(例如 Azure 虚拟机)以安全方式彼此通信、与 Internet 通信,以及与本地网络通信。
IoT 中心是托管在云中的 PaaS 托管服务,充当中央消息中心,用于 IoT 应用程序与其管理的设备之间的双向通信。
Azure 容器应用是一项完全托管的无服务器容器服务,用于大规模生成和部署容器。
Azure 容器注册表是基于开源 Docker Registry 2.0 的托管专用 Docker 注册表服务。 可以将 Azure 容器注册表与现有的容器开发和部署管道配合使用,也可使用 Azure 容器注册表任务在 Azure 中生成容器映像。 可以通过源代码提交和基础映像更新等触发器按需生成或完全自动生成。
Microsoft Entra ID 是基于云的标识和访问管理服务,可对用户、服务和应用程序进行身份验证。
Azure 存储提供持久、高度可用且可大规模缩放的云存储解决方案, 其中包括对象、文件、磁盘、队列和表存储功能。
RabbitMQ 是一种开源消息中转站软件,最初实施高级消息队列协议,后来通过插件体系结构进行了扩展,以支持面向流文本的消息传输协议、MQ 遥测传输协议和其他协议。
Azure 虚拟机提供可缩放的按需计算资源,可用于灵活地进行虚拟化,而无需购买和维护物理硬件。
Azure SQL 数据库是一个完全托管的 PaaS 数据库引擎,可在无需用户参与的情况下处理绝大部分数据库管理功能,如升级、修补、备份和监视。
Azure Key Vault 是用于安全存储和访问机密的云服务。 机密是你希望严格控制对其进行访问的任何内容,例如 API 密钥、密码、证书或加密密钥。
Application Insights 是 Azure Monitor 的一项功能,是面向开发者和 DevOps 专业人员的可扩展应用程序性能管理 (APM) 服务, 可用于监视实时应用程序。 该功能可自动检测性能异常,并且拥有强大的分析工具,助你诊断问题并了解用户在应用中实际执行的操作。
备选方法
此体系结构使用 Kubernetes 和 Azure 应用程序服务的 Web 应用功能,以运行适用于此解决方案的应用程序。 作为备选方法,可在 Azure 容器实例中运行这些微服务,此为在 Azure 中运行容器的最简捷方式,根本无需采用更高级的服务,例如 Azure Kubernetes 服务 (AKS)。
本地示例使用 Azure 虚拟机,这些虚拟机也可以替换为容器技术。
要想运行这些服务,还有一种方案为采用 Azure Kubernetes 服务 (AKS)。 AKS 可提供用于运行微服务的无服务器 Kubernetes(一种整合的持续集成和持续交付 (CI/CD) 体验)以及企业级安全性和治理。
此外,不妨考虑将 Azure Monitor 与 Application Insights 配合使用,以分析并优化应用程序、容器、数据库和其他资源的性能,监视并诊断网络问题。
此体系结构使用 RabbitMQ 作为消息中转站。 Microsoft Azure 可为消息传递解决方案(如 Azure 队列存储或 Azure 服务总线)提供本机支持。 如需比较,请参阅比较并对比 Azure 存储队列和服务总线队列。
Azure 中的应用程序和服务均使用 Terraform 脚本进行部署。 不妨考虑使用 Azure 原生 资源管理器模板(ARM 模板)或 Bicep 来创建脚本。
方案详细信息
汽车制造依靠自动引导式车辆 (AGV) 将部件交付至装配线。 AGV 是实时制造和自动化车间物流的任务关键部分。 使用 AGV 的车间通常面临三大挑战:
- 可用性。 任何服务中断均会影响生产。
- 有连接。 车间经常缺乏与公有云的可靠连接。
- 供应商锁定。 传统的 AGV 解决方案依赖于专有的通信协议。
本示例体系结构分为三个操作区域:
- 基于 Azure 的车队控制参考体系结构,具有异地冗余、零停机时间故障转移、99.9% 的可用性和高效的灾难恢复等特点。
- 基于 Kubernetes 和 RabbitMQ 构建且与数据中心无关的本地部署。
- 基于通用 VDA 5050 规范构建且与供应商无关的 AGV 通信。
可能的用例
此解决方案非常适合制造业、汽车和运输行业。 它适用于以下方案:
- 客户当前正在制造过程中使用 AGV。
- 客户遇到 AGV 可用性较低的问题,这会影响其投资回报率 (ROI)。
- 车间与公有云的连接不一致。
- 客户是开放式制造平台 (OMP) 成员。
- 客户隶属于 OMP 自动传输系统 (OMP ATS) 工作组。
关键问题
要想低成本生产商品,就需要实现制造过程的自动化以及部件到装配线的实时交付。 自动引导式车辆可自动将部件传输至装配线,有助于实现实时制造和车间物流自动化。 例如,典型的乘用车大规模生产工厂可每分钟生产一辆乘用车。 因此,生产工厂的装配线每中断一分钟就会造成数万美元的经济损失。 汽车 OEM 需要其自动化系统具有高度可靠性和可用性,因而面临诸多挑战:
- 可用性问题。 现有的 AGV 车队控制软件无法达到 99.9% 的可用性要求。
- 连接问题。 某些生产工厂没有足够稳定的 Internet 连接以及所需的带宽,无法在 Azure 公有云中托管的 AGV 车队控制软件与车间 AGV 之间进行通信。 因此,在此类生产工厂 Intranet 覆盖范围之外的数据中心托管 AGV 车队控制软件并不可行。
- AGV 供应商锁定问题。 AGV 车队控制软件依赖于现有 AGV 的专有通信协议,因此无法将现有 AGV 与不同供应商的新式 AGV 进行交换。
如果体系结构能够支持异地冗余和零停机时间故障转移,以实现 99.9% 的可用性和灾难恢复,则有望解决上述问题。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
可用性和可伸缩性
组成 AGV 车队控制解决方案的应用程序和服务可通过可用性区域(Azure 区域中独特的物理位置,有助于保护 VM、应用程序和数据免受数据中心故障的影响)部署到两个 Azure 区域中。 Azure 应用程序服务和 AKS 也可以部署到可用性区域中。 IoT 中心通过在几乎所有服务层中实现冗余来提供区域内高可用性。
安全性
安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述。
使用 Microsoft Entra ID 进行身份验证和访问控制,并使用 Azure Key Vault 来管理密钥和机密。
DevOps
若要将微服务自动部署到 Kubernetes 或 Azure 应用程序服务,最好使用 CI/CD 进程。 考虑使用解决方案,例如 Azure DevOps 或 GitHub Actions。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述。
通常,使用 Azure 定价计算器估算成本,并使用 AKS 计算器估算在 Azure 中运行 AKS 的成本。 若要了解其他注意事项,请参阅 Microsoft Azure 架构良好的框架中的“成本优化”部分。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
首席作者:
- Gürcan Güleşir | 高级项目经理
后续步骤
产品文档:
- Application Insights
- Microsoft Entra ID
- Azure 应用程序服务
- Azure 容器实例
- Azure 容器注册表
- Azure IoT 中心
- Azure Kubernetes 服务
- Azure Key Vault
- Azure Monitor
- Azure SQL 数据库
- Azure 虚拟机
- Azure 虚拟网络
- GitHub
Microsoft 学习路径:
相关资源
Azure 体系结构中心概述文章:
- 微服务体系结构样式
- 选择适用于微服务的 Azure 计算方案
- 基线区域冗余 Web 应用程序
- 高可用性多区域 Web 应用程序
- 高级 Azure Kubernetes 服务 (AKS) 微服务体系结构
- 使用 Azure Pipelines 实现 AKS 应用的 CI/CD
相关体系结构: