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

服务总线和可靠性

完全托管企业消息中转,其中包含 Azure 服务总线中使用的消息队列和发布订阅主题。 此服务将消息存储在“中转站”(例如“队列”)中,直到使用方准备好接收这些消息。

优势包括:

  • 跨争用工作节点实现负载均衡。
  • 跨服务和应用程序边界安全路由和传输数据和控制。
  • 协调需要高度可靠性的事务性工作。

有关使用服务总线的详细信息,请参阅 Azure 服务总线消息传送。 了解如何设置消息传送,用于连接跨本地和云环境的应用程序与服务。

若要了解服务总线对可靠工作负载的贡献,请参阅以下主题:

以下部分专门介绍 Azure 服务总线和可靠性:

  • 设计注意事项
  • 配置清单
  • 推荐配置选项
  • 源项目

设计注意事项

使用 Azure 服务总线运行时间 SLA 来最大化可靠性。 正确配置的应用程序可以发送或接收消息,或者对已部署的队列或主题执行其他操作。 有关详细信息,请参阅服务总线 SLA

其他设计注意事项包括:

除了服务总线高级和标准消息传送层上的文档外,以下功能仅在高级库存单位 (SKU) 上可用:

使用异地灾难恢复在可用性区域中部署服务总线时,服务级操作 (SLO) 显著增加,但不更改运行时间 SLA。

清单

是否出于可靠性考虑而配置了 Azure 服务总线?

  • 评估 Azure 服务总线 的高级层优势。
  • 确保服务总线消息传送异常得到正确处理。
  • 使用高级消息队列协议 (AMQP) 连接到服务总线,并尽可能使用服务终结点或专用终结点。
  • 参阅使用服务总线消息传送改进性能的最佳做法
  • 在发送方和接收方端实现异地复制,防止中断和灾难。
  • 配置异地灾难。
  • 如果需要使用队列和主题传送任务关键型消息,建议使用服务总线高级层和异地灾难恢复。
  • 在服务总线命名空间中配置区域冗余(仅可用于高级层)。
  • 实现服务总线命名空间的高可用性。
  • 确保按保证顺序传送相关消息。
  • 通过 JMS API 评估不同的 Java 消息服务 (JMS) 功能。
  • 使用 .NET Nuget 包与服务总线消息传送实体进行通信。
  • 在发送或接收消息时实现暂时性故障处理的复原能力。
  • 实现消息单元的自动缩放。

配置建议

请考虑以下建议,在配置 Azure 服务总线时优化可靠性:

建议 说明
评估 Azure 服务总线 的高级层优势。 请考虑迁移到服务总线的高级层,以利用平台支持的中断和灾难防护。
使用 AMQP 连接到服务总线,并尽可能使用服务终结点或专用终结点。 此建议将流量保留在 Azure 主干上。 注意:和 Windows.Azure.ServiceBus 命名空间的默认连接协议Microsoft.Azure.ServiceBusAMQP
在发送方和接收方端实现异地复制,防止中断和灾难。 标准层仅支持实现发送方和接收方端异地冗余。 Azure 区域的中断或灾难可能会导致你的解决方案停机。
配置异地灾难。 - 主动/主动
- 主动/被动
- 配对命名空间(主动/被动)
- 注意:次要区域最好是 Azure 配对区域
如果需要使用队列和主题传送任务关键型消息,建议使用服务总线高级层和异地灾难恢复。 选择模式取决于业务要求和恢复时间目标 (RTO)。
在服务总线命名空间中配置区域冗余(仅可用于高级层)。 区域冗余包括消息存储的三个副本。 一个区域分配为主要消息存储,其他区域分配为辅助区域。 如果主要区域变得不可用,则可将其中一个辅助区域提升为主要区域,而不会产生可察觉的停机。 可用性区域在定期添加新区域的 Azure 区域子集中提供。
实现服务总线命名空间的高可用性。 高级层支持命名空间级别的异地灾难恢复和复制。 在此级别,高级层使用主要和辅助灾难恢复命名空间为元数据灾难恢复提供高可用性。
确保按保证顺序传送相关消息。 请注意,需要在每个消息上设置分区键、会话 ID 或消息 ID,以确保将相关消息发送到消息实体中的同一分区。
通过 JMS API 评估不同的 JMS 功能。 通过 JMS 2.0 API(及其软件开发工具包 (SDK))提供的功能与通过本机 SDK 提供的功能不同。 例如,服务总线会话在 JMS 中不可用。
在发送或接收消息时实现暂时性故障处理的复原能力。 必须针对发送和接收操作实现适当的暂时性故障处理和错误处理,以保持吞吐量并防止消息丢失。
实现 消息单元的自动缩放,以确保有足够的资源可用于工作负载。

源项目

  • 若要识别未使用专用终结点的高级服务总线实例,请使用以下查询:

    Resources
    | where
      type == 'microsoft.servicebus/namespaces'
    | where
      sku.tier == 'Premium'
      and isempty(properties.privateEndpointConnections)
    
  • 若要识别不在高级层上的服务总线实例,请使用以下查询:

    Resources
    | where
      type == 'microsoft.servicebus/namespaces'
    | where
      sku.tier != 'Premium'
    
  • 若要识别非区域冗余的高级服务总线实例,请使用以下查询:

    Resources
    | where
      type == 'microsoft.servicebus/namespaces'
    | where
      sku.tier == 'Premium'
      and properties.zoneRedundant == 'false'
    

后续步骤