你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Functions 上的 Azure 架构良好框架视角

Azure Functions 是一种无服务器计算服务,可用于运行事件驱动代码,而无需显式管理基础结构。 作为函数即服务“(FaaS)产品/服务,Azure Functions 抽象化了底层基础结构,使你能够专注于代码。 此服务会根据需求自动缩放,并且仅针对执行期间消耗的资源收费。

本文档假设作为架构师,你已查看 计算决策树 并选择 Azure Functions 作为工作负荷的计算解决方案。 此处提供的指南符合 Azure Well-Architected 框架支柱的原则。

重要

如何使用本指南

每个部分都包含一个 设计清单,重点介绍与 Azure Functions 相关的特定设计策略相关的体系结构领域。

建议 提供技术功能来帮助实施这些策略。 此列表并不详尽,但包括有助于使用 Azure Functions 生成或优化工作负荷的关键建议。

展示主要建议的基础体系结构:无服务器函数体系结构设计

技术范围

此审查重点介绍以下 Azure 资源的相互关联的决策:

  • 函数应用

注意

此服务指南基于 应用服务(Web 应用) 服务指南中找到的指导。 Azure Functions 是一项无服务器计算服务。 函数部署在应用服务计划上,为工作负荷提供基础计算基础结构。 可以从多个托管计划中进行选择。 消费计划是完全托管的,不支持访问关联的应用服务实例,而专用计划和高级计划则提供配置和管理应用服务实例的能力。 有关选择专用或高级托管计划时的建议和注意事项,请参阅应用服务服务指南。

可靠性

可靠性支柱可确保持续功能,构建复原能力,并实现快速故障恢复。

可靠性设计原则 提供适用于各个组件、系统流和整个系统的高级设计策略。

设计清单

根据 可靠性设计原则启动设计策略。 考虑 Azure Functions 的特定功能和配置时,评估其与业务需求的相关性。

  • 了解触发器:确保完全了解 Azure Functions 的触发方式。 触发器包括 HTTP 请求、计时器、队列等。 选择符合应用程序可靠性要求的触发器。

    例如,如果函数处理来自队列的消息,请确保队列本身具有复原能力,并在发生故障时可以重新处理消息。

  • 实现重试和持久模式:对暂时性故障使用内置重试策略。 对于更复杂的工作流,请考虑使用 Durable Functions,后者提供跨多个函数执行的状态管理和协调。

    Durable Functions 对于需要在长时间运行的工作流中确保可靠性的场景特别有用。 它们支持自动重试和持久任务管理。

  • 确保正确处理异常:实现可靠的异常处理,以确保函数正常失败。 记录错误,并考虑为严重故障实施警报机制。

  • 规划可伸缩性:Azure Functions 可根据需求自动横向扩展。 确保应用程序旨在通过测试负载下的性能来处理峰值。

    请考虑使用 Application Insights 监视性能并记录函数如何实时扩展。

  • 幂等性设计:确保可以安全地重试函数,而不会造成意外的副作用。 幂等性对于与外部系统交互或修改数据的函数至关重要。

  • 使用旨在支持长时间运行的操作的 Durable Functions:对于需要业务流程或长时间运行的进程的操作,请使用 Durable Functions 维护状态并确保跨多个步骤的可靠性。

  • 监视解决方案的运行状况:将 Azure Functions 解决方案集成到整个工作负荷运行状况监视和警报系统中。

建议
建议 好处
为暂时性错误配置自动重试。 更深入地了解 Azure Functions 错误处理和重试 通过自动重试失败的执行来提高可靠性,从而减少数据丢失或中断的可能性。
使用 Durable Functions 来协调复杂的工作流和长时间运行的进程。 深入了解 Durable Functions 提供对长时间运行的工作流的可靠执行,同时具备内置的状态管理和自动重试功能。
使用 Application Insights 实现监视集中日志记录设置 Application Insights 通过提供有关函数执行和依赖项的详细见解来增强监视和故障排除。
根据函数托管计划、触发器类型和需求自动横向扩展了解缩放 确保应用程序可以处理流量的增加,而无需手动干预,从而提高可靠性和性能。

安全

安全支柱侧重于确保数据和服务的机密性、完整性和可用性。

安全设计原则 提供了用于保护 Azure Functions 的高级策略,包括身份验证、授权和数据保护的最佳做法。

设计清单

使用安全设计评审清单开始实施设计策略,并确定潜在的漏洞。 根据需要纳入其他安全措施来完善策略。

  • 使用托管标识:为函数应用启用托管标识以安全地访问其他 Azure 服务,而无需管理凭据。 了解托管标识

  • 使用 Microsoft Entra ID 保护函数应用:通过将 Azure Functions 配置为要求Microsoft Entra ID 身份验证来限制对函数的访问。 设置Microsoft Entra 身份验证

  • 应用网络安全控制:了解托管模型的可用选项,以保护 Functions 网络配置。 保护网络以满足你的要求。

建议
建议 益处
启用 托管标识,以便安全访问 Azure 资源。 启用托管标识 无需存储和轮换机密,从而简化凭据管理,从而提高安全性。
使用 Azure Key Vault 进行机密管理和定期轮换。 将 Key Vault 与 Azure Functions 集成 通过安全存储敏感信息(例如 API 密钥和连接字符串)并在无法使用托管标识时自动执行机密轮换来保护它们。
与虚拟网络 集成,并使用 专用终结点 通过限制对内部网络的访问,防止暴露于公共互联网,来确保函数应用程序的安全。

虚拟网络集成和专用终结点在消费托管计划中不可用。

成本优化

成本优化支柱侧重于确定降低成本的方法,同时保持必要的性能级别。

成本优化设计原则 提供平衡成本和性能的策略,确保 Azure Functions 部署高效且经济高效。

设计清单

使用成本优化 设计评审清单开始成本优化策略,并调整设计,使其符合预算要求。

  • 选择正确的定价计划:Azure Functions 提供了多个定价计划,包括消耗计划、高级计划和专用(应用服务)计划。 选择符合工作负荷和成本注意事项的计划。 比较定价计划

    消耗计划非常适合工作负荷不规律且执行不频繁的情况,因为您只需为执行时间和所消耗的资源付费。 当应用处于空闲状态时,不会向你收费。

  • 优化执行时间:通过优化函数代码来缩短执行时间。 最大程度地减少外部依赖项的使用并优化代码逻辑,以减少每次执行的持续时间。

  • 监视和分析成本:使用 Azure 成本管理定期监视函数应用使用情况和成本,并设置警报可检测成本异常。 了解成本管理和优化

建议
建议 好处
对于流量不确定的工作负载,请使用消耗计划了解消耗计划 通过仅对函数执行期间使用的资源收费来降低成本,从而避免与空闲资源相关的成本。
如果工作负荷可预测,Elastic Premium 计划或 专用应用服务计划 预留容量。 通过对可预测工作负载提供具有稳定执行模式的折扣定价来降低成本。
定期监控成本并设置异常情况警报。 设置成本警报 有助于尽早识别成本峰值,从而进行主动管理和优化。

卓越运营

卓越运营侧重于部署、可观察性和管理 Azure Functions 应用程序的过程和过程。

卓越运营设计原则 提供策略,以确保高效部署、管理和监视函数应用。

设计清单

根据卓越运营设计原则启动设计策略,提供维护 Azure Functions 操作质量的策略。。

  • 自动部署:使用 CI/CD 管道自动部署函数应用。 与 Azure DevOps 或 GitHub Actions 集成,实现无缝部署工作流。

  • 实现运行状况监视:使用 Azure Monitor 和 Application Insights 跟踪函数的运行状况和性能。 为关键指标设置警报,并使用自定义仪表板进行实时见解。 监视 Azure Function

  • 安全部署解决方案:了解 Azure Functions 可用的 部署模型,并采用最符合安全部署做法的模型。

  • 规划灾难恢复:对关键功能使用跨区域灾难恢复和可用性区域实施灾难恢复策略。 DR 计划

建议
建议 好处
使用 Azure DevOps 或 GitHub Actions 通过 CI/CD 管道自动化部署。 设置 CI/CD 改进部署一致性,减少手动错误,加快新功能上市时间。
在生产发布之前,使用部署插槽来暂存更改。 使用插槽进行部署 减少将错误引入生产的风险,并在检测到问题时支持安全回滚。
使用可用的 指标,使用 Application Insights 和 Azure Monitor 实现 集中监视 增强函数性能的可见性,帮助快速识别和解决问题。

性能效率

性能效率通过有效管理容量来确保即使在负载增加的情况下也能获得最佳用户体验

性能效率设计原则提供策略来帮助设计满足性能要求的函数应用,即使需求增加也是如此。

设计清单

使用性能效率设计原则创建性能策略,并设计函数应用以实现最佳的缩放和性能表现。

  • 优化冷启动:通过使用具备预热实例的 Premium Flex 计划,或采用 Azure Functions 预热触发器等策略保持函数持续处于预热状态,以最大程度地减少冷启动的影响。

  • 优化函数代码:编写高效的代码以减少执行时间和资源消耗。 避免执行长时间运行的操作,并优化外部服务调用。

  • 启用自动缩放:利用 Azure Functions 的自动缩放功能,根据需求自动横向扩展。 确保对缩放规则进行定义和测试。

  • 监视性能指标:使用 Application Insights 监视关键性能指标,例如执行时间、CPU 和内存使用情况。 设置警报以降低性能。 监视性能

建议
建议 好处
使用 Elastic Premium 计划和预热实例 来减少冷启动延迟。 了解冷启动 减少与冷启动关联的延迟,缩短时间敏感应用程序的响应时间。
优化函数代码 以减少执行时间。 Azure Functions 最佳实践 通过减少每个函数执行所需的时间和资源来提高性能。
启用自动缩放 以按需自动调整容量。 配置自动缩放 确保函数应用可以处理不同的负载,而无需手动干预,从而保持压力下的性能。

Azure 策略

Azure 提供了一组全面的内置策略,用于审核和强制实施 Azure Functions 及其依赖项的配置。 可以使用 Azure Policy 确保函数应用遵守组织安全、成本优化和性能标准。

例如,您可以强制执行要求以下内容的策略:

  • 将为所有函数应用启用的托管标识。
  • 使函数应用仅使用专用终结点以确保网络安全。
  • 要为所有函数应用启用的诊断日志记录。

查看 Azure Policy 内置定义,查找符合组织要求的策略。

Azure 顾问建议

Azure 顾问是一名个性化的云顾问,可帮助你遵循最佳做法来优化 Azure 部署。 顾问建议与 Well-Architected 框架支柱保持一致。

有关详细信息,请参阅 Azure 顾问中的建议。

后续步骤

请考虑以下资源,进一步了解本文档中的建议重点: