下面讨论的示例工作负载描述了构建一个自动运行并通过 Azure DevOps 管道评估模拟车辆功能的模拟。 每次工程师检查示例功能的源代码或其仿真环境的新版本时,此管道都会运行。
体系结构
下载此体系结构的 Visio 文件。
用户输入层
开发者只会与这一层进行交互。 它包含开发人员工作站(我们范围内的 Azure VM)和描述模拟环境的规范文件。
编排层
“编排”的含义很宽泛:这个词所描述的一些问题可能在无意中就被解决了;但其他一些问题则要复杂得多。 例如,创建、监视和销毁容器和 VM 的“编排”问题由许多工具解决——Azure API 本身就是一个足够的“编排器”!
工作流
但是,将“编排”的黑匣子分解为更小的组件很重要。
模拟 API:此 API 接收规范文件,是控制模拟环境和模拟运行与编排层的入口点。
解释器:该组件将规范文件解释为模拟管理器的逻辑结构。
模拟管理器:这是将逻辑模拟环境对象转换为所需状态和动作以供其他组件使用的状态机。 此组件可触发对模拟的构建、执行和拆解。 此组件还管理内部依赖项和故障模式。
计划程序:此组件将构建块分配给基础设施资源并在这些资源中启动这些构建块。 此组件会考虑硬件和访问要求、可用资源和资源限制。
环境管理器:该组件监视底层基础设施并响应问题,例如容器主机出现故障时。
网络管理器:此组件管理模拟环境的网络和路由。 每个环境都必须存在于隔离的网络环境中,隔离的构建块接收传入连接以进行交互。 该组件还将用于解析模拟中的构建块(例如,通过内部 DNS)。
访问管理器:此组件将授权/身份验证从 Microsoft Entra ID 反映到系统的其余部分。
配置管理器:此组件充当基础结构和模拟环境状态的持久存储机制。
基础结构抽象:这是一个抽象层,可将通用命令转换为容器与 VM 的特定 Azure API 命令。
存储管理器:此组件管理模拟环境的配置和附加存储(例如,VM 根设备或容器附加卷)。
资源监视器:此组件将基础结构级别的资源使用情况监控到时间序列数据库中,以便导出到 ADP 的核心监控中。
日志管理器:此组件从构建块聚合日志以供用户检查。 它还会将日志导出到 ADP 核心日志记录中。
编排层是此示例工作负载的主要重点。
模拟基础结构层
此层表示所有正在运行的模拟环境。
模拟环境:由定义文件和参数定义的构建块组合在此处创建,与任何其他模拟环境进行网络隔离。
构建块合同:定义所有构建块如何将输出、错误和状态发送到编排层的书面标准。
构建块管道:此区域管理构建块的创建和存储。
构建块存储库:这是构建块映像(例如容器注册表和/或 Azure 映像库)的存储和检索系统。
构建块工厂:持续集成和持续部署 (CI/CD) 管道,此管道使用不可变、可验证的组件包(例如 dpkg 或 apt)以声明性配置语言(例如 Chef 或 Ansible)创建构建块映像。
存储层
该层持久且可访问地存储模拟结果。 这主要是移动应用程序开发平台 (MADP) 数据湖工作流的责任,但你的输出必须由该团队管理。
存储接口:允许用户使用模拟结果存储的接口。 这与上面的 Storage Manager 编排组件密切配合,或者可以被上面的 Storage Manager 编排组件取代。
存储:用于保存模拟结果的存储机制(例如,Azure Blob 存储或 Azure 磁盘存储资源)。
组件
Azure 虚拟机提供了一种可缩放的按需计算资源,可用于灵活地进行虚拟化,而无需购买和维护物理硬件。
Azure 虚拟网络是 Azure 中专用网络的基本构建基块。 Azure 虚拟网络使许多类型的 Azure 资源(例如 Azure 虚拟机)能够安全地彼此通信、与 Internet 通信,以及与本地网络通信。
Azure 容器实例提供了在 Azure 中运行容器的最简捷方式,既无需管理任何 VM,也不必采用更高级的服务。
Azure 容器注册表是基于开源 Docker Registry 2.0 的托管专用 Docker 注册表服务。 可以将 Azure 容器注册表与现有容器开发和部署管道配合使用,也可使用 Azure 容器注册表任务在 Azure 中生成容器映像。 可以通过源代码提交和基础映像更新等触发器按需生成或完全自动生成。
Azure Pipelines 属于 Azure DevOps Services,并运行自动化的生成、测试和部署。 也可以使用 Jenkins 等第三方 CI/CD 解决方案。
Microsoft Entra ID 是基于云的标识和访问管理服务,可对用户、服务和应用程序进行身份验证。
Azure 存储提供持久、高度可用且可大规模缩放的云存储解决方案, 其中包括对象、文件、磁盘、队列和表存储功能。
Azure Monitor 从各种本地和 Azure 源收集监视遥测数据。 该服务将遥测数据聚合并存储在针对成本和性能进行了优化的日志数据存储中。
备选方法
此体系结构使用虚拟机和容器来部署不同的工具和服务。 作为替代方案,你还可以使用 Azure Kubernetes 服务 (AKS)。 AKS 提供无服务器 Kubernetes、集成 CI/CD 体验以及企业级安全性和治理。
此架构中用于保存模拟结果的存储机制基于 Azure Blob Storage 或 Azure Disk Storage。 作为更大工作负载的替代方案,你还可以查看 Azure 用于存储和分析数据的大规模数据和分析解决方案。
还要考虑使用 Azure Monitor 来分析和优化基础结构的性能,在不登录到虚拟机的情况下监视和诊断网络问题。
方案详细信息
为了评估自动驾驶 (AD),功能工程师需要模拟具有自动驾驶功能的车辆的行为。 考虑以下示例驾驶场景:
一辆测试车在 3 车道高速公路的右车道上以每小时 80 英里的速度自动驾驶。 前方 600 英尺处有一辆卡车以 55 英里/小时的速度在同一车道、同一方向上行驶。 中间车道上没有车辆。 道路标记清晰可见,太阳照亮垂直于车辆,道路干燥。
使用类似情况的车辆行为的有限模拟称为“模拟运行”。 在上述场景中,你的模拟车辆的预期行为是轻松地超过卡车,且不会造成事故并且不会违反任何交通规则。 通过对某一功能的每个新版本运行模拟,AD 功能工程师将测试新版本是否仍然表现出预期的行为。
要运行模拟,AD 功能工程师通常使用一组软件应用程序。 这些应用程序可能包括虚拟试驾 (VTD)、时间分区测试 (TPT)、航空电子开发系统 2G (ADS2) 以及汽车数据和时间触发框架 (ADTF),所有这些都根据其特定配置相互通信以测试给定的自动驾驶功能,例如 Highway Pilot(高速公路自动辅助驾驶)。 将这组软件工具及其配置部署到本地和/或云中的物理和/或虚拟机 (VM) 称为“模拟环境”。
为确保运行的每个模拟生成的测试结果的有效性,应该确保模拟在设置为初始状态的全新模拟环境中开始。
每个自动驾驶团队都需要在其模拟环境中使用一组单独的应用程序,并具有独特的配置。 许多团队还需要多个不同的模拟环境。 例如,要评估 LIDAR 传感器,你需要非常高分辨率的对象模拟,但不需要其他驱动程序、道路标记或其他功能。 尽管每个环境都是独一无二的,但所使用的应用程序有很大的重叠。 例如,许多团队在多个模拟环境中使用 VTD。
可以在由可重用、封装和独立评估的单元组成的模拟环境中运行模拟。 这些单元充当“构建块”,可使用这些构建块在 Azure 云中自动和按需创建模拟环境。 这些模拟环境也称为自动驾驶平台 (ADP)。
可能的用例
此解决方案非常适合汽车和运输行业。 此工作负载的典型用途包括:
自动驾驶测试。
汽车行业控制系统的原型设计、开发、集成、测试、验证和验证。
记录用于可视化的车辆数据。
模拟汽车行业的复杂驾驶场景。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
可用性和复原能力
考虑跨可用性集或可用性区域部署 VM,这有助于保护应用程序免受计划内维护事件和计划外中断的影响。
可用性集是 VM 的逻辑分组,可让 Azure 了解应用程序的构建方式,以便提供冗余和可用性。
可用性区域是 Azure 区域内的唯一物理位置,可帮助保护 VM、应用程序和数据免受数据中心故障的影响。 每个区域由一个或多个数据中心组成。 即使单个数据中心发生物理故障,区域中的 VM 和应用程序仍可以使用。
可伸缩性
你可以手动或使用自动缩放功能来缩放 Azure VM。
对于容器部署,Azure 容器实例和Azure Kubernetes 服务也旨在手动或自动扩展。
安全性
安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述。
与其他任何应用程序一样,机器人可以设计为处理敏感数据。 因此,你应该限制谁可以登录和使用它,并且你还应该根据用户的身份或角色限制可以访问哪些数据。 使用 Microsoft Entra ID 进行身份验证和访问控制,并使用 Azure Key Vault 来管理密钥和机密。
有关设计安全解决方案的一般性指导,请参阅 Azure 安全性文档。
DevOps
要部署新的模拟环境,最好使用 Azure DevOps 或 GitHub Actions 等解决方案使用 CI/CD 流程。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述。
通常,使用 Azure 定价计算器来估算成本。 你还可以按照流程在一开始按需将 VM 容量调整为合适大小,同时简化调整大小的过程,从而优化成本。 Microsoft Azure 架构良好的框架的“成本”部分描述了其他注意事项。
后续步骤
产品文档:
Microsoft 学习路径:
相关资源
Azure 体系结构中心概述文章:
选择用于应用程序的 Azure 计算服务