首页 > 代码库 > 云计算设计模式(十七)——基于队列的负载均衡模式

云计算设计模式(十七)——基于队列的负载均衡模式

云计算设计模式(十七)——基于队列的负载均衡模式


使用队列,作为一项任务,它调用才能顺利间歇重物,可能会以其他方式导致失败服务或任务超时服务之间的缓冲区。这个模式可以帮助最小化的可用性和响应需求任务服务的影响。

背景和问题


许多解决方案在云中涉及运行调用服务的任务。这种环境下,如果一个服务进行间歇重物可能会导致性能可靠性问题

一个服务可以是一个组件,它是相同的溶液作为利用它的任务的一部分,或者它可以是第三方服务提供访问经常使用的资源,如高速缓存或存储服务如果相同的服务是由多个同时运行的任务使用,它可以是难以预料到的服务可能任何给定时间进行请求的数量

它可能是一个服务可能会遇到需求高峰,导致变得过载不能对及时响应请求。有大量的并发请求服务可能会导致服务失败,如果它不能处理论点,即这些请求可能导致

解决方案


重构解决方案介绍任务服务之间的队列任务服务异步运行。任务含有由服务一个队列所需要的数据的消息队列作为缓冲存储该消息,直到它被检索到的服务。该服务从队列中检索消息并进行处理多个任务,它可以一个高度可变的速率产生的请求可以通过同一个消息队列传递给服务图1示出了这种结构。

图1 - 使用队列水平上的服务负载


队列有效地从服务解耦任务,并且该服务可以按自己的速度处理并行任务的请求量信息无关此外,不存在延迟一个任务,如果该服务不可用的时候投递一个消息到队列中。

这种模式提供了以下好处
?它可以帮助最大限度地提高可用性,因为服务而产生的延迟不会对应用程序,它可以继续发布消息队列,即使该服务不可用或正在处理消息的即时和直接的影响
?它可以有助于最大化可扩展性,因为队列数目和服务的数量可以变化,以满足需求。
?它可以有助于控制成本,因为服务实例的数量部署仅需要足以满足平均负荷,而不是峰值负荷

注意:

有些服务可以实现节流,如果需求达到阈值,超过该系统可能会失败节流可能会降低功能可用。你也许可以实现与这些服务负载均衡,以确保这一阈值没有达到

问题和注意事项


在决定如何实现这个模式时,请考虑以下几点
?来实现控制的速率服务处理消息,以避免急剧的目标资源的应用程序逻辑必要的。避免将尖峰需求该系统的下一个阶段。测试系统在负载下,以确保它提供所需的流平,并调整队列的数目处理消息来实现该服务实例的数量
?消息队列是一个单向的沟通机制如果一个任务期望的服务的答复,可能有必要执行该服务可用于发送的响应的机制欲了解更多信息,请参阅异步消息底漆
?您一定要小心,如果你申请自动缩放监听队列中的请求服务,因为这可能会导致更多的争夺任何资源,这些服务的份额并减少使用队列负载的有效性。

何时使用这个模式


图案是非常适合于使用可能会受到重载服务的任何类型的应用程序

这种模式可能不是合适的,如果该应用程序期望以最小延迟服务的响应

例子


微软的Azure Web角色存储数据使用单独的存储服务如果大量的Web角色实例同时运行则可能是存储服务可以是不堪重负,无法请求的速度不够快,以防止超时或没有响应这些请求2列出了这个问题。

图2 - 服务一个Web角色实例大量并发请求正在压垮


要解决此问题,可以使用一个队列地级Web角色实例和存储服务之间的负载。但是,存储服务被设计为接受同步请求,并且不能很容易地修改,以读取信息以及管理的吞吐量。因此,可以引入一个辅助角色作为接收从该队列中的请求,并将其转发所述存储服务的代理服务辅助角色应用程序逻辑可以控制它传递请求到存储服务,以防止存储服务被压垮的速率。图3示出了这种解决方案

图3 - 使用队列辅助角色成水平作用和服务实例之间的负载

本文翻译自MSDN:http://msdn.microsoft.com/en-us/library/dn589783.aspx

云计算设计模式(十七)——基于队列的负载均衡模式