图像处理系统。
用户将照片上传到 S3。图像处理应用程序从 S3 获取照片并开始对其进行处理并返回输出。
处理: Webserver 正在向队列发送带有图像信息的 SQS 消息,图像处理服务器获取 SQS 消息并开始处理该图像。图像处理完成后,它将图像上传回 S3 并将 SQS 消息返回到队列。图像处理引擎位于 EC2 服务器上。
这是一个问题:网络服务器如何从图像处理服务器发送的队列中获取返回的 SQS 消息?
图像处理系统。
用户将照片上传到 S3。图像处理应用程序从 S3 获取照片并开始对其进行处理并返回输出。
处理: Webserver 正在向队列发送带有图像信息的 SQS 消息,图像处理服务器获取 SQS 消息并开始处理该图像。图像处理完成后,它将图像上传回 S3 并将 SQS 消息返回到队列。图像处理引擎位于 EC2 服务器上。
这是一个问题:网络服务器如何从图像处理服务器发送的队列中获取返回的 SQS 消息?
不要将图像处理视为远程过程调用,其中有请求和响应——将其视为分布式系统中不同组件执行的一系列任务。用两个队列解决这个问题:uploaded-images
和processed-images
。
Web 服务器接受图像,将其放入 S3 中,并向uploaded-images
队列发送一条消息,表明需要对其进行处理。
您的图像处理 EC2 实例等待消息到达uploaded-images
队列,然后从 S3 检索图像,进行一些处理,并将结果放入 S3。然后他们向processed-images
队列发送一条消息,表明图像已被处理。
您的 Web 服务器会轮询processed-images
,并在处理完图像后执行它们需要做的任何事情:更新数据库、在短期缓存中设置一个条目以指示图像已完成处理等。