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

Azure Functions 的体系结构最佳做法

Azure Functions 是一种无服务器计算服务,可用于运行事件驱动代码,而无需直接管理基础结构。 Azure Functions 是一种函数即服务产品,用于抽象底层基础设施。 通过此抽象,你可以专注于代码。 Azure Functions 会根据需求自动缩放,并且仅对运行期间消耗的资源收费。

本文假设作为架构师,你已查看 计算决策树 ,并选择 Azure Functions 作为工作负荷的计算解决方案。 本文中的指南提供了对应于 Well-Architected 框架支柱原则的架构建议。

技术范围

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

  • 函数应用程序

Note

此服务指南基于 Azure 应用服务(Web 应用) 服务指南中的指南。 Azure Functions 是一项无服务器计算服务。 函数部署在应用服务计划上,为工作负荷提供基础计算基础结构。 可以从多个托管计划中进行选择。

消耗计划是完全托管的,并且不允许访问关联的应用服务实例。 专用和高级托管计划使你能够配置和管理应用服务实例。 选择专用或高级托管计划时,请参阅应用服务服务指南,了解建议和注意事项。

Reliability

可靠性支柱的目的是通过 建立足够的复原能力和从故障快速恢复来提供持续的功能。

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

工作负荷设计清单

根据可靠性设计评审核对清单开始实施您的设计策略。 在记住 Azure Functions 的特定功能和配置的同时,确定其与业务需求的相关性。 扩展策略以根据需要包含更多方法。

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

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

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

    Durable Functions 特别适用于需要在长时间运行的工作流中实现高可靠性的情景。 它支持自动重试和持久任务管理。

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

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

    请考虑使用 Application Insights 监视性能并跟踪函数的实时伸缩行为。

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

  • 将 Durable Functions 用于长时间运行的操作: 对于需要协调或长时间运行的进程的操作,请使用 Durable Functions 来维护状态并帮助确保跨多个步骤的可靠性。

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

配置建议

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

安全性

安全支柱的目的是为工作负荷提供 保密性、完整性和可用性 保证。

安全设计原则通过对 Azure Functions 的技术设计应用方法,为实现这些目标提供了高级设计策略。

工作负荷设计清单

根据 设计评审清单制定针对安全 的设计策略,并确定漏洞和控制,以增强安全防御能力。 扩展策略以根据需要包含更多方法。

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

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

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

配置建议

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

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

成本优化

成本优化侧重于 检测支出模式、优先考虑关键领域的投资,以及优化其他 以满足组织预算,同时满足业务需求。

成本优化设计原则提供了一种高级设计策略,以实现这些目标,并在与 Azure Functions 及其环境相关的技术设计中做出必要的权衡。

工作负荷设计清单

根据投资的成本优化设计评审核对清单开始实施您的设计策略。 微调设计,使工作负荷与为工作负荷分配的预算保持一致。 设计应使用正确的 Azure 功能,监视投资,并查找随时间推移进行优化的机会。

  • 选择正确的定价计划: Azure Functions 具有多个定价计划,包括消耗计划、高级计划和专用(应用服务)计划。 选择与工作负荷和成本注意事项一致的 定价计划

    消耗计划非常适合操作不频繁且负载不可预测的工作负荷,因为只需为操作时间和所消耗的资源付费。 当应用处于空闲状态时,不会向你收费。

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

  • 监视和分析成本: 使用 Microsoft成本管理 定期监视函数应用使用情况和成本,并设置警报来检测成本异常。

配置建议

Recommendation Benefit
对具有不可预知流量的工作负荷使用 消耗计划了解消耗计划 通过仅对执行函数时使用的资源收费来降低成本,从而避免与空闲资源相关的成本。
如果工作负荷可预测,请保留 弹性高级计划专用应用服务计划的 容量。 通过为具有稳定使用模式的可预测工作负荷提供折扣定价来降低成本。
定期 监视成本 并设置异常警报。 通过警报监控成本 有助于尽早识别成本峰值,从而实现主动管理和优化。

卓越运营

卓越运营主要侧重于 开发实践、可观测性和发布管理的各个过程。

卓越运营设计原则提供了一个高级设计策略,用于实现工作负荷作要求的目标。

工作负荷设计清单

根据 卓越运营的设计评审清单 启动设计策略,以定义与 Azure Functions 相关的可观测性、测试和部署过程。

  • 自动执行部署: 使用持续集成和持续交付(CI/CD)管道自动部署函数应用。 与 Azure DevOps 或 GitHub Actions 集成,实现无缝部署工作流。

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

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

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

配置建议

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

性能效率

性能效率就是通过管理容量来保持用户体验,即使负载增加也不例外。 该策略包括缩放资源、识别和优化潜在瓶颈,以及优化峰值性能。

性能效率设计原则提供了一种高级设计策略,用于针对预期使用情况实现这些容量目标。

工作负荷设计清单

根据性能效率设计评审清单开始设计策略。 定义基于 Azure Functions 的关键绩效指标的基线。

  • 优化冷启动: 使用提供预热实例的高级 Flex 计划来最大程度地减少冷启动的影响,或使用 Azure Functions 预热触发器等策略确保函数保持温暖。

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

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

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

配置建议

Recommendation Benefit
弹性高级计划与预热实例配合使用 ,以最大程度地减少冷启动延迟。 了解冷启动 减少与冷启动关联的延迟,从而提高时间敏感应用程序的响应时间。
优化函数代码 以减少作时间。 了解 Azure Functions 的最佳做法 通过减少每个函数运行所需的时间和资源来提高性能。
启用自动缩放 以根据需求自动调整容量。 配置自动缩放 确保函数应用可以处理不同的负载,而无需手动干预。 此方法有助于在压力下保持性能。

Azure 策略

Azure 提供了一组与 Azure Functions 及其依赖项相关的大量内置策略。 一组 Azure 策略可以审核上述一些建议。 例如,可以检查以下情况:

  • 所有函数应用都已启用托管标识。
  • 函数应用仅使用专用终结点实现网络安全。
  • 为所有函数应用启用诊断日志记录。

若要进行全面的治理,请查看 Azure Policy 内置定义 和其他可能影响网络层安全性的策略。

Azure 顾问建议

Azure 顾问是一名个性化的云顾问,可帮助你遵循最佳做法来优化 Azure 部署。

有关详细信息,请参阅 Azure 顾问

示例体系结构

演示关键建议的基础体系结构: Web 应用程序体系结构设计

后续步骤

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