1.要解决的问题
如果对运行在多个系统上的相关进程(例如,在图像处理过程中,上传、存储、图像转码、创建缩略图等等顺序操作)执行顺序处理,往往会因为系统间联系过于紧密而造成性能瓶颈。当出现故障时,这种紧密的联系同样会使恢复操作变得复杂。所以,考虑到性能和维护的需要,应尽可能地使系统实现松耦合。
2.云模式的说明
您可以在系统间使用队列来实现松散耦合,然后通过交换消息来转换工作。这可以实现系统的异步连接。这种方法可以增加接收和处理消息的虚拟服务器数量,必要时,通过并行处理来轻松解决瓶颈问题。即使其中某台虚拟服务器出现故障,未处理的消息仍会保存在队列中,这样当虚拟机恢复时即可重新开始处理。
虽然可以不借助云技术来使用这种模式,但是AWS云已经提供了这种队列服务,考虑到云技术能弹性地提供虚拟服务器的特性,这种模式的使用较以往会变得容易得多。
3.实施
使用Amazon简单队列服务(SQS),从EC2实例中的一个进程转换为另一个EC2实例中的另一个进程。SQS是AWS的队列服务。EC2中的处理过程如下:接收一项工作(消息) –> 处理工作 –> 传递工作(消息) –>重复。
依据工作的性质,您可以在多个EC2实例中运行这些进程。
4.配置
5.好处
您可以使用异步处理来快速返回响应。
您可以通过简单进程(EC2实例)的松散耦合来构造系统。
您仅需通过增加或减少工作进程中的EC2实例数量来满足性能和服务需求。
即使EC2实例出现故障,消息(工作)仍会留在队列服务中,使得进程能够在EC2实例恢复后立刻继续执行,打造一个面对故障也能稳如泰山的系统。
6.注意事项
在一些进程必须严格按照顺序执行的系统中,您需要注意,在SQS中,不能完全保证队列中的消息的执行顺序。
7.其他
您可以将本模式与优先队列模式相结合使用。
您可以使用Amazon的简单工作流(SWF)来相对轻松地支持复杂的工作流,而不是仅仅使用简单队列。