使用队列,作为一项任务,它调用才能顺利间歇重物,可能会以其他方式导致失败的服务或任务超时服务之间的缓冲区。这个模式可以帮助最小化峰中的可用性和响应需求为任务和服务的影响。
许多解决方案在云中涉及运行调用服务的任务。在这种环境下,如果一个服务进行间歇重物,它可能会导致性能或可靠性问题
一个服务可以是一个组件,它是相同的溶液作为利用它的任务的一部分,或者它可以是第三方服务提供访问经常使用的资源,如高速缓存或存储服务。如果相同的服务是由多个同时运行的任务的使用,它可以是难以预料到的服务可能在任何给定时间点来进行请求的数量。
它可能是一个服务可能会遇到在需求高峰,导致它变得过载和不能对及时响应请求。有大量的并发请求驱服务也可能会导致服务失败,如果它不能处理的论点,即这些请求可能导致。
重构的解决方案和介绍的任务和服务之间的队列。任务和服务异步运行。任务帖含有由服务于一个队列所需要的数据的消息。队列作为缓冲,存储该消息,直到它被检索到的服务。该服务从队列中检索消息并进行处理。从多个任务,它可以在一个高度可变的速率产生的请求,可以通过同一个消息队列被传递给服务。
队列有效地从服务解耦的任务,并且该服务可以按自己的速度处理从并行任务的请求量的信息无关。此外,不存在延迟到一个任务,如果该服务是不可用的时候它投递一个消息到队列中。
这种模式提供了以下好处:
注意: 有些服务可以实现节流,如果需求达到阈值,超过该系统可能会失败。节流可能会降低功能可用。你也许可以实现与这些服务负载均衡,以确保这一阈值没有达到。
在决定如何实现这个模式时,请考虑以下几点:
此图案是非常适合于使用可能会受到重载服务的任何类型的应用程序。
这种模式可能不是合适的,如果该应用程序期望以最小延迟的服务的响应。
微软的 Azure Web 角色存储数据使用单独的存储服务。如果大量的 Web 角色实例同时运行,则可能是存储服务可以是不堪重负,无法向请求的速度不够快,以防止超时或没有响应这些请求。
要解决此问题,可以使用一个队列地级Web角色实例和存储服务之间的负载。但是,存储服务被设计为接受同步请求,并且不能很容易地修改,以读取信息以及管理的吞吐量。因此,可以引入一个辅助角色作为接收从该队列中的请求,并将其转发到所述存储服务的代理服务。在辅助角色的应用程序逻辑可以控制在它传递请求到存储服务,以防止存储服务从被压垮的速率。