Azure服务总线最佳实践

日期: 2019-12-09 作者:Adam Bertram翻译:邹铮 来源:TechTarget中国 英文

云架构会分离应用程序组件,因而需要在不同的组件之间通过消息传递发送指令和更新。考虑到云端大量不同设备和网络类型,消息传递需要应对各种情况。

Microsoft Azure服务总线是一种托管消息代理服务,它可以解决上述问题。下面让我们来看看这个有价值产品的最佳实践以及如何充分利用该产品。

消息路由器

在解耦的云架构中,包含数据和指令的消息在服务器和客户端之间传递。Azure Service Bus的消息采用二进制格式,可能包括JSON、XML或纯文本格式。它为应用程序及其服务器组件之间的异步传输数据和状态传输提供可靠且安全的平台。

Azure服务总线的功能包括消息会话、自动转发、死信队列、计划的传递、批处理、事务、筛选和操作、出现空闲队列时自动删除、重复检测、安全性-基于角色访问控制和共享访问签名标准以及AMQP 1.0和HTTP / REST协议。

为了利用Azure服务总线,云客户可使用支持流行语言(例如.NET、Java和Java Message Service)的客户端库。Azure服务总线与以下Azure服务集成:Event Grid、Logic Apps、Functions、Dynamics 365和Stream Analytics。

但是,不要让每个工作负载默认使用服务总线。对于需要极高吞吐量或路由的应用程序,Azure用户应考虑使用Event Hub(一种数据摄取服务)和Event Grid(一种事件路由服务)。

Azure服务总线最佳实践

服务总线用户在Azure配置服务和应用程序所使用的功能和设置会影响性能、可靠性和容错能力。请遵循这些Azure 服务总线最佳实践和注意事项,以确保最佳性能和可靠性。

协议

为特定作业选择正确的协议。Azure Service Bus可以使用以下三种协议之一:

  • 高级消息队列协议(AMQP);
  • 专有服务总线消息协议(SBMP);
  • HTTP。

在这三种协议中,AMQP和SBMP效率更高。它们的连接寿命比HTTP长,前提是MessagingFactory对象继续运行,并且消息传递设置整合批处理和预取功能,以便可更快地访问临时数据存储。此外,尽可能使用HTTPS,而不是HTTP。

MessagingFactory对象提供内部状态管理,因此在系统发送消息后不应关闭它们。如果应用程序创建新的工厂对象,则需要与Azure Service Bus建立新的连接-这会产生不必要的连接开销。

并发性

如果可能的话,应异步执行操作,例如发送、接收和删除。这种并发处理(通过Service Bus中的SendAsync消息传递方法)使应用程序可以在给定时间内执行比串行执行操作更多的任务。在发送所有消息后,Azure Service Bus可以使用WaitAll方法来接收所有消息。.NET语言的用户可以进一步采取异步操作:.NET的async和await功能启用异步接收功能-尽管它更复杂,但这可最大化程序构造的灵活性。

接收模式

在队列或订阅客户端,主要有两种接收模式:PeekLock和ReceiveandDelete。在PeekLock(Azure Service Bus的默认模式)中,客户端向服务发送请求,并宣布客户端可以接收消息。ReceiveAndDeletemode将这两个步骤合并为单个请求,从而提高性能。但是,使用这种方法,存在丢失消息的风险。

客户端批处理

在客户端中,批处理消息在发送时会延迟。Azure批处理使用20毫秒(ms)的间隔,但是此等待时间是可配置的。通过批量处理消息,IT团队可避免不必要的开销,并且避免每条消息的连接拆除工作。但是,此功能并非在所有情况下都可用,因为HTTP和PeekLock协议不支持客户端消息批处理功能。

预取

在Azure Service Bus中,客户端可以在执行接收操作时预取并加载其他消息。这些消息存储在本地缓存中,并且不会在客户端之间共享。当客户端预取了一条消息,其他客户端就无法访问该消息,直到其锁定被解除。通过尽早获取资源,无需等待。

针对特定情况的设置

某些应用程序要求客户端和应用程序的服务器组件之间的消息传递具有高吞吐量或低延迟。对于这些设置,除了常规的Azure服务总线最佳配置实践,下面这些设置可帮助显著提高性能。

高吞吐量队列

在某些应用程序中,每个客户端发送大量数据,例如在现场收集的数据。在这种情况下,应将消息传递配置为将尽可能多的数据发送到服务器端,这意味着为最大吞吐量而批处理消息。

在Azure服务总线中使用以下设置可实现高吞吐量:

  • 使用多个消息工厂创建发送方和接收方
  • 每个发送方应使用异步操作或多个线程
  • 批处理间隔更改为50毫秒,如果有多个发送方,则改为100毫秒
  • 使批处理存储访问处于启用状态
  • 将预取计数设置为单个工厂中所有接收的最大处理速率的20倍。

低延迟队列

在另一种情况下,应用程序必须传达准确的最新信息,例如客户端在地图上的实时位置。在这种情况下,这里可能出现定情况是,下一条消息的发出速度会导致丢失消息,但重要的是这些消息应尽快得到处理。

通过禁用批处理可实现此任务:

  • 禁用客户端批处理和批处理存储访问
  • 将预取计数设置为单个客户端上接收方处理速率的20倍-如果有多个客户端,则将预取计数设置为0。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

Adam Bertram
Adam Bertram

自由撰稿人

翻译

邹铮
邹铮

相关推荐