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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 云计算设计模式(十七)——基于队列的负载均衡模式 使用队列,作为一项任务,它调用才能顺利间歇重物,可能会以其他方式导致失败的服务或任务超时服务之间的缓冲区。

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


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

背景和问题


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

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

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

解决方案


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

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


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

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

注意:

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

问题和注意事项


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

何时使用这个模式


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

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

例子


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

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


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

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

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

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
设计模式 Java API
【设计模式】JAVA Design Patterns——Combinator(功能模式)
【设计模式】JAVA Design Patterns——Combinator(功能模式)
|
23天前
|
负载均衡 网络协议 算法
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
|
1月前
|
设计模式 监控 Java
【设计模式】JAVA Design Patterns——Circuit Breaker(断路器模式)
【设计模式】JAVA Design Patterns——Circuit Breaker(断路器模式)
|
1月前
|
设计模式 Java 程序员
【设计模式】JAVA Design Patterns——Bytecode(字节码模式)
【设计模式】JAVA Design Patterns——Bytecode(字节码模式)
|
1月前
|
设计模式 算法 Java
【设计模式】JAVA Design Patterns——Builder(构造器模式)
【设计模式】JAVA Design Patterns——Builder(构造器模式)
|
7天前
|
存储 Cloud Native 安全
云计算:未来的计算模式
6月更文挑战第13天
43 6
|
3天前
|
设计模式 算法
行为型设计模式之模板模式
行为型设计模式之模板模式
|
29天前
|
设计模式 Java 数据库
【设计模式】JAVA Design Patterns——Converter(转换器模式)
转换器模式旨在实现不同类型间的双向转换,减少样板代码。它通过通用的Converter类和特定的转换器(如UserConverter)简化实例映射。Converter类包含两个Function对象,用于不同类型的转换,同时提供列表转换方法。当需要在逻辑上对应的类型间转换,或处理DTO、DO时,此模式尤为适用。
【设计模式】JAVA Design Patterns——Converter(转换器模式)
|
15天前
|
设计模式 新零售 Java
设计模式最佳套路5 —— 愉快地使用工厂方法模式
工厂模式一般配合策略模式一起使用,当系统中有多种产品(策略),且每种产品有多个实例时,此时适合使用工厂模式:每种产品对应的工厂提供该产品不同实例的创建功能,从而避免调用方和产品创建逻辑的耦合,完美符合迪米特法则(最少知道原则)。
35 6
|
15天前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
20 5