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

Azure 服务总线的体系结构最佳做法

Azure 服务总线是一个完全托管的企业消息代理,可在分布式应用程序和服务之间实现可靠的消息传送。 服务总线为消息队列和发布-订阅主题提供会话、重复检测、死信队列和高级路由功能等功能,用于构建可复原的消息传送解决方案。

成功的服务总线实现取决于团队在核心消息传送模式方面具有深厚的专业知识,包括队列、主题、订阅和服务总线特定的功能,例如会话和死信队列。 Teams 还需要充分了解 Azure 消息传送生态系统,包括事件中心和事件网格集成模式,以便为每个消息传送方案选择合适的服务。

本文假设作为架构师,你已查看 消息传送决策树 ,并选择 Azure 服务总线作为工作负荷的消息传送解决方案。

本文中的指南提供了对应于 Well-Architected 框架支柱原则的架构建议。

技术范围

此次审查重点分析以下 Azure 资源的相关决策:

  • Azure 服务总线

Reliability

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

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

工作负荷设计清单

根据可靠性设计评审核对清单开始实施您的设计策略。 确定其与业务需求的相关性,同时牢记应用程序的性质及其组件的关键性。 扩展策略以根据需要包含更多方法。

  • 考虑可能导致设计限制的因素:Azure 服务总线的配额和分层特定限制会影响设计。 选择一个等级,为消息处理容量提供缓冲,并避免成本高昂的重新设计。 例如,如果对峰值和突发吞吐量的评估指示更高的限制,则 Premium 可能适用。 同样,对于较大的负载,请考虑使用高级版。

  • 通过故障模式分析预测潜在故障: 故障模式分析提供了一种系统的方法,用于预测潜在的故障方案并制定缓解策略,以确保消息传递服务复原能力。

    Failure 缓解措施
    无法访问服务总线命名空间 使用 Azure Monitor 为服务总线可用性设置警报。 配置地理灾难恢复,以在中断期间自动切换到次要区域。
    消息处理失败导致有害消息 配置死信队列以隔离无法传递的消息。 使用指数退避和断路器模式实现客户端重试策略。
    高消息量超过吞吐量限制 使用 Azure Monitor 跟踪吞吐量指标并设置警报。 为高级层消息传送单元启用自动缩放,以处理流量高峰。
  • 跨解决方案层实现冗余: 冗余是一种关键技术,用于通过消除跨多个层的单一故障点来确保可靠的消息传送。

    • 实例级冗余:在基础级别,通过跨多个独立的服务总线实例分发消息,以实现实例级冗余。 这 >要求应用程序跨多个消息传送终结点实现自定义故障转移逻辑或负载均衡策略。

    • 区域级冗余:启用可用区以防止数据中心级故障。 如果出现此类故障,应用程序可能会遇到 >临时中断;但是,服务总线会自动跨多个可用性区域复制消息数据和元数据,以保持连续性。

    • 区域级别冗余:对于要求更高恢复能力的工作负荷,请考虑实现区域级别冗余。 这可以通过在不同区域中的多个命名空间之间使用 >主动-主动配置来实现。

    确保选择支持这些冗余功能的服务总线层,例如高级层。

  • 实施灾难恢复和备份策略: 多区域灾难恢复通过异地灾难恢复功能防范完整的区域故障。 服务总线高级层支持主要区域和副区域之间的地理灾难恢复对,允许自动元数据复制和故障转移协调。 异地灾难恢复复制命名空间元数据,但不会复制消息数据,而异地复制则提供额外的复杂性的完整消息数据复制。

    在区域中断期间,应用程序可以使用自动指向活动区域的别名连接重定向到辅助命名空间。 恢复规划必须在故障转移方案和恢复时间目标(具体取决于 DNS 传播和应用程序重新连接逻辑)期间考虑消息数据丢失。

    消息级备份策略需要应用程序级实现,因为服务总线不提供内置的消息备份功能。 配置备份包括导出命名空间元数据、队列和主题定义以及访问策略,以便在灾难恢复情境中快速重建命名空间。

    灾难恢复需要考虑消息排序保证、故障转移方案中的重复处理,以及应用程序级重试逻辑来处理跨区域延迟变化。

  • 为变量消息加载实现可靠的缩放: 使用依赖于分区策略和并发接收方配置的可靠消息处理模式来保持一致的吞吐量,而不会失败。 为每个队列配置多个并发接收器,以通过分配负载并减少单一故障点来提高处理可靠性。 启用会话的队列可确保有序处理,但将并行度限制为每个会话一个活动接收器,从而产生潜在的可靠性瓶颈。

    使用分区实体跨多个消息代理分发消息以实现容错,尽管它们可能会影响排序保证和事务一致性。 使用消息筛选配置主题订阅,以启用可靠的扇出方案,这些方案可在多个使用者应用程序中分配处理,而无需创建基础结构依赖项。

    服务总线高级版提供专用的消息单元,具有可预测的容量,并自动扩展吞吐量单元,以应对动态消息量。 每个消息传送单元都提供有保证的发送和接收限制,其自动缩放可防止在流量高峰期间进行限制。 标准层使用具有可变容量的共享基础结构,但缺少专用吞吐量保证和自动缩放功能。

  • 实现以可靠性为中心的监视和运行状况检测: 为了保持可靠的消息传送,监视可能表明潜在问题的性能特征至关重要。 关注关键指标,例如:

    • 用于检测积累或处理延迟的活动消息计数趋势。
    • 服务器错误可能指向底层基础设施问题。
    • 表示容量约束或资源饱和的节流事件。

    除了功能指标之外,还包括以可靠性为中心的指标,例如:

    • 消息传递成功率可确保吞吐量一致。
    • 死信队列累积,这可以揭示持续性传递失败。
    • 故障转移事件检测,以评估基础设施中断期间的系统复原能力。

    将监视扩展到依赖项运行状况,涵盖发布或使用消息的连接应用程序和外部服务。 由于消息传递的可靠性取决于整个流链,因此应配置阈值以在出现会影响交付保证的情况时触发警报,如快速增加的死信队列或区域故障转移事件。

  • 配置自我保护机制和弹性模式: 服务总线包括内置的自我保护机制,旨在防止故障在消息传递基础设施中级联传播。 可以在三个级别配置这些保护:消息级、客户端级别和命名空间级别。

    • 消息级保护:配置死信队列以自动隔离无法传递的消息,防止正常消息流受到阻碍。 根据工作负荷要求设置最大传递计数和生存时间(TTL)等参数。 启用重复检测,以避免在重试方案中通过指定重复检测历史记录窗口来重新处理消息。

    • Client-Level 保护:使用包含指数退避和断路器功能的内置重试策略的客户端 SDK 来缓解级联故障。 实现连接池和客户端缓存以减少资源耗尽,尤其是在高吞吐量作期间。

    • Namespace-Level 隔离:为不同的环境或工作负荷组件使用单独的服务总线命名空间来防止跨应用程序故障。 考虑消息批处理和预提取设置,以减少网络延迟。

配置建议

建议 益处
在支持可用性区域的区域中部署 具有区域冗余的高级层 。 高级层提供区域冗余功能所需的专用基础结构。

为所有生产消息传送工作负载启用此功能,以确保高可用性和自动区域级容错。
消除区域基础结构中的单一故障点,同时提供自动故障转移,而无需手动干预。

在发生区域故障期间大幅缩短恢复时间(从分钟到秒),确保关键工作负荷的持续消息处理可用性。
配置主要区域和次要区域之间的 异地灾难恢复配对 ,以建立自动故障转移功能。 使用别名连接对区域终结点进行抽象处理,使应用程序能够稳定连接,不受当前活动区域的影响。

故障转移事件期间规划 DNS 传播时间,通常需要几分钟才能完成恢复。
在灾难场景中减少手动干预的同时,提供针对完整区域故障的保护。

通过别名抽象最大程度地减少应用程序更改,并通过可预测的时间范围实现快速恢复。
高级层命名空间中启用自动缩放以自动处理变量消息加载。 根据具有适当阈值的 CPU、内存和连接指标配置缩放,以防止性能下降。 支持可变工作负荷模式,无需服务降级,同时在流量高峰期间消除消息限制。 减少运维团队手动管理容量的工作负担。
启用多个 并发接收方 以提高消息处理吞吐量和容错能力。 配置平衡并行度与可靠性要求的接收方模式。

使用 分区实体 在多个消息代理之间分配负载,请注意消息排序仅在单个分区内得到保证。
跨多个消息代理分配负载,以提高可伸缩性,同时通过并行处理功能提高整体消息吞吐量。
为关键的服务总线可靠性指标设置 Azure Monitor 警报,这些指标包括死信消息计数阈值、超出基线的服务器错误率以及表明容量限制的限制事件。 缩短检测可靠性问题的平均时间,并为关键可靠性事件提供 自动警报

启用对消息传递问题的主动检测,同时在可用性影响之前识别容量约束。
使用适当的监视过程为所有生产队列和主题启用 死信队列 ,以跟踪有害消息累积并实施清理策略。 防止有害消息阻止正常的消息处理,并支持通过死信队列检查功能进行故障排除。
使用单独的命名空间在环境之间提供隔离,并防止跨环境故障传播。 适当配置命名空间级安全性和访问控制。

使用指数退避和断路器模式实现服务总线客户端 重试策略 ,以正常处理暂时性故障。
通过透明处理重试来降低应用程序复杂性,同时针对暂时性服务问题提供自动保护。

命名空间隔离可防止跨环境故障传播,并支持对不同工作负荷组件进行独立的缩放和管理。
使用包含命名空间元数据和定义的 Azure 资源管理器模板 建立自动化服务总线配置备份。 队列定义、主题订阅和访问策略需要通过版本控制进行备份。 自动备份过程可减少手动工作和人为错误,同时对消息传递基础结构更改进行版本控制可改进管理。

通过自动化减少恢复时间目标,并在恢复过程中尽量减少人为错误。

安全性

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

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

工作负荷设计清单

根据 设计评审清单制定针对安全 的设计策略,并确定漏洞和控制,以增强安全防御能力。

  • 建立安全基线: 查看 Azure 服务总线安全基线 ,并将适用的措施纳入安全基础。 Microsoft云安全基准为服务总线提供特定的安全控制,用于满足标识管理、网络安全、数据保护和合规性要求。

    这种标准化的安全配置和策略实施方法使得您的消息传递基础结构能够满足行业标准和合规要求。

  • 使用 Microsoft Entra ID 强制实施授权和身份验证: 服务总线提供内置的 Azure RBAC 角色,用于对消息传送作进行精细访问控制,包括 Azure 服务总线数据所有者、数据发送方和数据接收器角色,以实现不同的权限级别。 通过这些数据平面角色,可以利用遵循最低特权原则的分配对发送、接收和管理操作进行细粒度控制。

    使用托管标识启用由 Microsoft Entra ID 管理的安全身份验证。

    通过组成员身份定期进行角色分配评审和自动预配,以持续维护安全态势。

  • 实现安全网络配置: 网络安全控制应在层中实现,以进行深层防御保护。 使用专用终结点为服务总线命名空间创建专用 IP 地址,确保消息流量保留在 Azure 主干网络中,从而启用安全连接。 或者,可以考虑使用服务终结点,因为它们在不需要专用 IP 地址的情况下提供网络集成。 对于最精细的控制,应设置 IP 防火墙规则和虚拟网络规则,以限制对特定客户端 IP 范围和子网的访问。

    建立专用连接以消除基于 Internet 的攻击途径时禁用公共网络访问,而网络安全组规则为包含服务总线使用者和生成者的子网提供额外的筛选。

  • 加密静态数据和传输中的数据: 使用基于 TLS 的 AMQP(高级消息队列协议)进行加密,以便使用身份验证功能保护消息传送。 传输层安全性 TLS 1.2 或更高版本在客户端和服务总线之间的传输过程中保护消息数据。

    服务总线使用平台管理的密钥自动加密静态数据,其中 Azure 处理密钥创建、轮换和管理。 为了增强控制,高级层支持与 Azure Key Vault 集成,以便使用已建立的密钥轮换策略进行客户管理的密钥加密。

  • 强化命名空间配置并减少攻击面: 删除不再需要不必要的队列、主题和订阅,以防止未经授权的访问未使用的消息传递实体。 配置适当的消息保留策略和自动删除设置,以防止无限期存储敏感数据。

    在禁用消息转发等功能时,仅为工作负荷体系结构启用所需的消息传送模式,除非特别需要。 此外,定期审查命名空间配置,以随时间推移维护安全状况。

  • 保护连接字符串和访问凭据: 更喜欢应用程序中基于标识的连接来消除连接字符串存储,因为它们包含敏感身份验证。 某些方案可能需要连接字符串,因为这些方案具有安全处理机制。

    Azure Key Vault 集成可实现集中式存储和访问控制,从而降低应用程序配置中的凭据暴露风险,同时提供审核日志记录和访问策略。 通过密钥滚动更新过程定期轮换共享访问密钥,以最大程度地减少服务中断。

  • 实现安全监视和威胁检测: 重点监视威胁检测、未经授权的访问尝试和可疑消息传送模式,包括身份验证尝试失败、特权升级和异常消息传送行为。 诊断日志应捕获身份验证事件和授权失败,而管理操作提供安全审计路径。

    Azure Monitor 集成包括身份验证失败、限流事件和异常消息量模式。 为安全事件实现自动警报和响应过程,并集成到 Azure Sentinel 或 SIEM 解决方案中,以实现跨安全基础结构的关联。

  • 建立安全测试和验证做法: 通过安全测试识别消息基础结构中潜在的安全漏洞,以根据安全基线验证服务总线配置,并验证组织安全策略符合性。

    理想情况下,安全测试应集成到部署和作工作流中,并使用自动安全扫描工具评估网络配置和访问控制。

    测试方案应解决各种攻击途径,包括验证 DLQ 策略,防止消息丢失,而不公开敏感数据,确认有害消息不会导致无限重试,并验证幂等处理。 此外,模拟 DoS 攻击以测试限制、注入格式不正确的消息以测试验证,以及模拟未经授权的访问尝试。

配置建议

建议 益处
根据最低特权原则分配适当的 Azure RBAC 角色。 使用 数据发送方、数据接收方或数据所有者角色 执行特定的消息传送作。 通过 Azure RBAC 为消息传递作提供集中式访问控制,同时通过消除应用程序中的凭据公开来减少攻击面。 此方法允许条件访问策略和安全监视进行全面保护。
为服务总线高级命名空间配置 专用终结点 ,并禁用公共网络访问,以确保专用网络连接。 请注意,这需要高级层服务总线命名空间才能 支持专用终结点 显著减少消息传送基础结构的攻击面,因为专用终结点消除了对公共 Internet 威胁的暴露。 这为服务总线通信提供了最高级别的网络安全,并集成到现有的虚拟网络安全策略和控制中。
实施 IP 防火墙规则 以限制对已知客户端 IP 范围的命名空间访问,并配置 虚拟网络规则 以仅允许从已批准的子网进行访问。 此方法可与专用终结点结合使用,实现分层网络安全。 限制服务总线对授权网络位置的访问,从而减少未经授权的访问风险。 启用网络访问尝试的审计日志记录,以便进行安全监控,并与现有的网络安全策略和治理框架相集成。
使用 Azure Key Vault 为服务总线高级命名空间启用 客户管理的密钥加密 ,以便进行加密密钥管理和访问控制。 使用适当的访问控制实现 密钥轮换策略 客户管理的密钥提供对加密密钥生命周期的增强控制,并通过客户控制的密钥管理实现法规标准合规性。 自动密钥轮换在更新加密密钥时维护服务可用性。
对所有服务总线客户端连接强制实施 TLS 1.2 最低版本,并禁用旧式共享访问签名格式等旧式身份验证机制。

新式身份验证协议可减少对基于协议的攻击的漏洞,同时协议强化可减少攻击面和漏洞暴露。
强传输加密和新式身份验证协议保护消息数据,同时消息传递通信满足数据传输安全性的合规性要求。 协议强化消除了旧协议中的已知漏洞。
使用适当的访问策略在 Azure Key Vault 中存储服务总线连接字符串和共享访问密钥,以便进行凭据访问控制。 使用自动化部署管道实现密钥轮换过程。 集中式机密管理消除了应用程序中的凭据泄露,并阻止应用程序配置和源代码存储库中的凭据存储。 此外,为敏感身份验证信息提供审核日志记录和访问控制。
配置 Azure Monitor 诊断设置 以捕获服务总线安全事件,包括身份验证事件、授权失败和管理作。 将安全日志与 Azure Sentinel 集成,以获取威胁检测功能。 通过以安全为中心的监视,可以快速检测未经授权的访问尝试,而可疑消息模式检测有助于识别潜在的安全事件。 与 SIEM 解决方案集成可实现与更广泛的安全监视的关联。

成本优化

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

成本优化设计原则为实现这些目标提供了高级设计策略,并在涉及 Azure 服务总线及其环境的技术设计中,根据需要进行权衡。

工作负荷设计清单

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

  • 选择正确的服务总线服务层级: 服务总线提供具有不同成本结构和功能的多个定价层。 考虑到服务总线层选择时,需要会话、重复检测和异地灾难恢复的技术要求。 如果设计不需要,请避免为更高等级支付更多费用。

    在层决策中,还要考虑容量规划,容量规划需要考虑峰值流量、并发连接和消息大小。 高级层提供具有可预测的每月成本的专用消息传送单元,使其适合生产工作负荷。 标准层为非生产环境节省成本。

  • 建立服务总线使用情况预测和成本建模方法: 预测服务总线费用时确定成本驱动因素。 事件驱动处理、作业队列和发布-订阅方案等使用模式具有不同的成本特征。 考虑到操作计数和消息存储的持续时间,以构建一个实际的成本模型。

    考虑需求波动,包括季节性变化和业务增长预测。 在预测中包括灾难恢复测试和其他管理活动的运营开销,以避免预算意外。

  • 为服务总线资源实现成本监视和预算警报: 查看服务总线命名空间的成本明细,以了解支出模式。 监视使用费用,包括消息操作、存储消耗和网络出口费用。 这些指标揭示了优化机会和成本趋势。

    配置具有多个阈值级别的预算警报,以便在出现重大溢出之前出现提前警告。 成本警报可能会触发扩展调整或预算控制紧急措施。 在 50%、75%和 90% 预算时触发警报,并做出积极的成本管理决策。 建立包括自动响应和通知工作流的警报处理过程。 集成用于高成本部署的审批工作流,以防止意外支出。

    实施成本分配策略,以用于服务多个应用程序的共享命名空间。 资源标记通过详细监视实现退款模型,确保跨团队和项目实现准确的成本归属。

  • 对分配的资源进行权限化,以最大化其使用情况: 分析资源利用率,以确定优化机会。 查看消息吞吐量模式、队列深度趋势和连接利用率,以查找未使用或未充分利用的资源。 禁用不必要的功能并合并未充分利用的命名空间。 下面是需要考虑的一些典型区域:

    • 优化存储成本。 应用死信队列管理,以防止无限期地累积失败的消息。 根据实际要求配置消息保留策略。 根据实际需求设置重复检测窗口,而不是最大值。

    • 降低网络和数据传输成本。 将多个消息合并为一个操作,以减少可计费操作。 将服务总线命名空间与使用应用程序共同部署,以消除跨区域的数据出口费用。

    • 实现消息压缩和高效的序列化,以最大程度地减少有效负载大小。 这可以降低存储成本和网络传输费用,同时提高吞吐量。

    • 根据使用模式动态调整容量。 监视季节性变化和业务周期波动,以通知容量规划。 主动调整可防止在低需求期间过度预配,同时确保在高峰期有足够的容量。

  • 为服务总线成本管理实现 Azure Policy 控制: 实施 Azure Policy 控制以强制实施成本管理标准。 定义限制服务总线层部署、将部署限制为经济高效的区域以及控制成本高昂的功能(如异地灾难恢复)的策略。 这些防护措施可防止未经授权的高成本配置。

  • 跨不同环境优化服务总线配置: 使用适合每个环境的成本优化默认值设计自动化环境预配。 模板应包括合理的配置,用于根据环境目的平衡功能与成本效益。

    将服务总线功能与实际环境要求相匹配。 生产需要区域冗余、异地灾难恢复和专用吞吐量。 非生产环境可以使用简化的功能集、较低的吞吐量和降低的可用性保证来最大程度地降低成本。

  • 实施服务总线合并策略以降低成本: 当安全性和作边界允许时,跨应用程序共享服务总线资源。 合并命名空间通过资源共享提高消息传送单元利用率,从而降低总体成本。 实现资源标记,以实现跨部门和项目的成本分配,支持多租户环境中的退款模型。

配置建议

建议 益处
为服务总线命名空间实现一致的标记策略。 包括 成本中心、项目和环境标记 ,以实现准确的成本分配和支持退款模型。 标记可实现跨共享基础结构的成本归因,并支持多租户服务总线部署的结构化退款模型。
使用 Azure 成本管理 分析消息量模式和操作计数。 查看历史数据,确定当前和预计使用模式的最佳层选择。

配置具有 50%、75%和 90% 预算限制的多个阈值的预算警报。 渐进式警报在发生重大溢出之前提供早期警告。
数据驱动的层选择通过将定价模型与实际使用模式(而不是假设)相匹配来确保最佳成本效益。 基于证据的决策可防止过度预配。

多阈值预算警报提供分级警告系统,使主动成本管理不会造成不必要的操作中断。
根据实际应用程序要求配置 消息保留策略 ,而不是使用最大值。 根据实际业务需求设置 重复检测窗口 ,以平衡功能与成本效益。 消除不必要的消息持久性和处理开销,同时通过适当的配置平衡重复的预防要求和成本效益。
在服务总线客户端应用程序中实现 消息批处理 以减少计费作。 根据消息卷模式和延迟要求配置批大小,以优化成本。 减少操作计数,并提高按次付费层级的成本效率。 通过优化的运营费用,降低消息传送高容量工作负荷的成本。
通过压缩和高效的序列化格式优化 消息有效负载大小 。 较小的有效负载可降低存储成本、网络出口费用和提高吞吐量。 降低存储成本和网络出口费用,同时为每个消息单元启用更多消息,以提高容量利用率和成本效益。
实现自动 死信队列清理 过程,防止未绑定的存储累积。 根据年龄或解决状态配置计划进程以删除较旧的失败消息。

在清理频率与故障排除需求之间取得平衡。 保持足够的保留期,以便进行作分析,同时控制存储成本。
防止因失败消息积累导致的无限存储成本增长,同时优化长期成本,并且不影响故障排除能力。
在同一 Azure 区域中与消息生成者和使用者共同定位服务总线命名空间。 区域部署消除了跨区域数据传输成本并减少网络延迟。 消除了区域间消息传输的数据传出费用,并简化了网络体系结构,同时降低了传输成本和延迟。

卓越运营

卓越运营主要侧重于 开发实践、可观测性和发布管理的各个过程。 卓越运营设计原则 提供了一个高级设计策略,用于实现这些运营需求目标。

工作负荷设计清单

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

  • 评估服务总线作的团队准备情况: 服务总线作需要消息传送方面的专业知识,例如死信队列管理、消息生命周期处理和安全配置。 Teams 需要熟练使用身份验证方法,包括共享访问策略、托管标识和 Azure RBAC 实现。

  • 为服务总线部署实现基础结构即代码: 服务总线基础结构支持 ARM 模板、Bicep 和 Terraform,以便跨环境进行一致的部署。 模板应包含命名空间配置、队列和主题定义、订阅筛选器和访问策略,以便进行完整的基础结构管理。 使用模板参数化在保持部署一致性的同时启用特定于环境的配置。 有关详细信息,请参阅 服务总线命名空间模板

    如果托管标识等依赖项需要顺序预配,请考虑分层部署策略,以便将命名空间预配与实体配置分开。

    服务总线配置的版本控制可确保可审核性,并为基础结构更改提供回滚功能。

  • 建立安全的消息传输基础设施部署策略:包括命名空间切换的蓝绿部署,以及订阅筛选器更改的金丝雀测试部署。 蓝绿策略支持零停机时间转换,而金丝雀部署会在全面推出之前验证路由的正确性。

    确保在基础结构更新期间进行部署验证检查,以确保消息传递连续性。 包括对消息路由、订阅筛选器和死信队列配置进行测试。

  • 设计服务总线操作任务的自动化策略: 在可行的情况下,让服务总线的自动化针对重复性任务。 评估 Azure 逻辑应用、Azure Functions 和 Azure 自动化的工作流自动化功能。

    关键自动化机会包括死信队列清理,以防止资源积累和过期的消息删除来控制存储成本。 计划的缩放操作可以根据可预测的使用模式来调整容量。

    其他自动化目标可能包括订阅维护、访问策略轮换和命名空间容量监视,以减少作开销并确保一致的管理做法。

  • 收集监视数据: 监视消息流运行状况、命名空间性能指标和依赖项。 Azure Monitor 集成为消息传送基础结构提供基本指标、日志和分布式跟踪功能。 关键遥测包括消息吞吐量速率、队列深度趋势、死信累积、限制事件和连接池利用率。 Application Insights 通过服务总线向使用者启用从发布者到使用者的端到端跟踪,以便完全了解情况。

  • 建立消息传送失败的事件响应过程:命名空间故障转移,确保有消息恢复和订阅重建。 完整配置后,地理灾害恢复功能可以实现自动的区域故障转移。

    响应策略必须考虑到消息排序保证、重复处理、路由和筛选器的验证,以及复杂恢复方案的手动干预过程,同时保留传递保证。

  • 实现消息传送基础结构的测试策略: 包括消息传送模式的功能测试、集成测试和路由、筛选器和处理逻辑的验证。 负载测试在预期的流量量下验证性能特征。

    通过 CI/CD 管道测试自动化可确保对消息传递基础结构更改和应用程序集成方案进行一致的验证。

  • 评估消息 API 选择,以匹配团队的技能集: 服务总线支持本机 Azure SDK 和用于 Java 应用程序的 JMS 2.0 API,每个 API 都提供不同的功能和性能特征。 API 选择应符合团队专业知识和应用程序要求。

    原生 SDK 提供对服务总线功能的完整访问,包括会话、重复检测以及通过特定于 Azure 的优化进行自动转发。 这些 SDK 提供完整的功能访问和最佳性能特征。

    与本机实现相比,JMS API 提供标准化的消息传送接口,但存在限制,包括服务总线会话不可用和性能选项降低。

配置建议

建议 益处
为服务总线命名空间配置开发 ARM 模板 或 Bicep 模块,并为特定于环境的设置、消息实体、访问策略和服务集成提供参数化支持。 确保跨环境进行一致的部署,同时通过自动化预配减少配置偏移。 通过基于模板的基础设施快速重新创建,实现快速恢复,并维护详细的审计追踪以确保合规性。
使用 Azure 逻辑应用Azure Functions 创建自动化工作流来处理作任务,包括死信队列清理、订阅维护和访问策略轮换。 通过事件驱动的自动化和计划的维护执行,减少手动负担,同时确保操作实践的一致性。
服务总线指标 配置 Azure Monitor 仪表板和警报规则,包括消息计数、吞吐量速率、错误条件和业务上下文中的依赖项运行状况。 支持提前检测消息传送问题并支持主动容量管理。 减少检测和解决的平均时间,同时通过自定义仪表板促进有效的故障排除。
开发事件响应手册,记录消息重新处理策略、命名空间故障转移 过程和具有清晰升级协议的死信队列恢复工作流。

定期进行测试,以验证手册的有效性,并确保团队为应对紧急情况做好准备。
确保一致的事件处理,并通过记录的过程减少恢复时间。 最大程度地减少消息丢失,同时通过系统响应策略实现更快的解决。

性能效率

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

性能效率设计原则 提供了一个高级设计策略,用于根据预期使用量实现这些容量目标。

工作负荷设计清单

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

  • 为服务总线工作负荷执行容量规划: 服务总线容量规划需要通过系统评估来分析预期的消息量和峰值吞吐量要求。 使用实际消息模式进行负载测试,以在生产部署之前验证容量估算。

    建立容量基线时,请考虑消息大小分布和并发连接模式。 考虑影响整体资源消耗的消息保留期、死信队列存储和订阅筛选器复杂性。

    高级层提供具有可预测的性能特征和保证容量的专用消息传送单元。 较低级别使用具有变化性能的共享基础设施,由于“嘈杂邻居”效应,在高峰使用期间可能会出现限流现象。

  • 设计消息处理工作负载的缩放策略: 服务总线缩放策略应包括满足不同性能要求的水平、垂直和体系结构缩放方法。

    水平缩放涉及通过分区实体将消息分布到多个消息代理,从而提高吞吐量和并行度。 但是,分区会产生利弊,其中改进的可伸缩性可能会影响分区实体的排序保证和事务一致性。

    高级层消息传送单元增加为动态工作负荷提供自动调整功能的专用容量。 跨区域命名空间分布的体系结构缩放支持具有区域性能优化的全局工作负荷。

  • 配置消息处理模式以实现最佳吞吐量: 消息处理模式显著影响服务总线吞吐量和整体应用程序性能。 批处理通过在单个作中发送或接收多个消息来减少网络往返,从而提高效率。 使用筛选的主题订阅可以在消息传递中实现分发场景。

    使用多个并发接收器进行并行处理会增加基于队列的工作负荷的总体吞吐量。 基于会话的消息传送可确保对相关消息进行有序处理,但通过将并行度限制为每个会话限制一个活动接收器来创建吞吐量约束。

  • 监视性能指标并确定瓶颈: 服务总线性能监视需要跟踪关键指标,包括消息吞吐量速率、队列深度趋势、处理延迟和限制事件。 监视连接池利用率,以便跨消息传送基础结构进行性能评估。

    通过专注于命名空间级别限制和订阅筛选器处理延迟来确定瓶颈,这些延迟可能会影响总体吞吐量。

  • 优化消息处理和网络性能: 消息处理优化包括连接池、预提取配置和消息批处理,以提高客户端性能。 有效负载大小优化可降低网络开销并提高处理效率。

    预提取设置使客户端能够主动接收多个消息,从而减少网络延迟对消息处理吞吐量的影响。 网络性能优化涉及通过区域共同位置将服务总线命名空间与消息生成者和使用者并置,从而最大程度地降低延迟。

配置建议

建议 益处
为需要保证性能的生产工作负荷选择 服务总线高级层 。 高级层提供具有可预测性能特征的专用消息传送单元,并支持高级功能,例如具有自动缩放功能的大型消息大小。 专用消息传送单元消除了共享基础结构中的可变性能问题。 一致的吞吐量保证支持生产消息传送工作负载的可预测应用程序性能。
为配置了最小和最大消息单位阈值的服务总线高级层启用 自动缩放 。 设置最小单位以处理基线负载,而不会延迟缩放。

实现多个并发接收器,以跨可用容量分配消息处理负载。
通过与实际需求匹配的动态容量分配来提高资源利用率。 消除在负载更改期间对容量管理的手动干预,同时保持一致的性能。
使用 ReceiveMessages() 和 SendMessages() 方法 实现批处理消息操作,以减少网络往返和连接开销。

实现批处理操作的错误处理,以管理部分故障和维护可靠性。
相比于单个操作,通过减少网络开销显著提高消息处理效率。 由于连接管理开销降低,具有相同基础结构资源的总体吞吐量更高。

在大容量消息处理场景中,通过优化资源利用,提高了应用程序性能。
使用服务总线性能指标配置 Azure Monitor 仪表板 ,包括消息吞吐量速率、队列深度趋势和处理延迟。 将限制事件和服务器错误作为性能指标进行监视。

设置延迟百分位跟踪,并为主动问题检测配置警报阈值。
提供对消息传递基础结构运行状况和性能趋势的实时可见性。 通过主动警报能够在影响用户之前提前检测到性能下降。

支持基于经验指标的数据驱动容量规划和性能优化决策。
使用 Azure 负载测试 模拟服务总线的真实工作负载,包括预期的消息量以及并发发布/消费模式。 包括具有不同消息大小和处理复杂性的方案。

在负载高峰期间测试自动缩放行为和限制阈值,同时测量端到端延迟。 记录生产规划的性能基线和容量限制。
在生产部署之前,在现实条件下验证消息传送基础结构性能。 识别开发周期早期的潜在瓶颈和容量限制。

提供经验数据,用于准确的容量规划决策和性能优化策略。
使用适当的预提取计数、连接池和消息批处理优化服务总线客户端配置,以提高效率。 优化消息大小和压缩,以减少网络带宽使用量。

使用同一 Azure 区域中的应用程序共同定位服务总线命名空间,以最大程度地减少延迟。 其他资源包括 服务总线性能改进
通过客户端优化和减少连接开销提高了消息处理效率。 通过区域共同位置降低延迟,从而最大程度地减少应用程序和服务总线基础结构之间的网络距离。
尽可能使用 Express Entities 将消息存储在内存中,以提高性能。 通过 EnableExpress 属性配置快速队列和主题,同时评估性能优化和持续性保证之间的权衡。 当持久性要求允许时,通过优化的内存中存储增强消息处理性能。 通过改进的响应能力,降低了高吞吐量消息传送方案的延迟。

Azure 策略

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

  • Azure 服务总线高级命名空间使用客户管理的密钥进行静态加密,以提供对加密密钥的额外控制并满足合规性要求。
  • Azure 服务总线命名空间仅需要Microsoft Entra ID 标识进行身份验证,以提高安全性和减少管理开销。
  • Azure 服务总线命名空间配置专用终结点,以减少数据泄露风险。
  • Azure 服务总线中的资源日志启用时可以生成审核线索,以备安全事件发生时进行调查使用。

若要进行全面的治理,请查看 服务总线的 Azure Policy 内置定义 ,以及可能影响消息传送基础结构安全性的其他策略。

Azure 顾问建议

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

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

示例体系结构

演示关键建议的基础体系结构: 使用消息代理进行企业集成