我想知道使用GCP为计算密集型任务设置RESTful API的最佳做法是什么。例如,如果我想创建一个RESTful API,可以根据imagemagick的convert命令(即convert file.png file.jpg
)将.png文件转换为.jpg文件。由于输入文件可能非常大,因此命令可能需要几分钟才能完成。我如何使用GCP进行操作?
由于受限制的环境和运行时间限制,App引擎是不够的。计算引擎将涉及设置Web服务器,负载均衡器,任务队列等,这对于简单的API似乎是过度的。
我想到的解决方案只是将命令convert
包装在WSGI框架中,并将其部署在app engine灵活环境中。当然,当调用convert
命令时,它将使用大量的cpu和内存,这会使我的Web服务器变慢。但是当这种情况发生时,应用程序引擎灵活将启动更多实例来处理新请求。但是,我觉得这不是最好的解决方案。我想知道你对这个问题的看法是什么。
非常感谢!
答案 0 :(得分:1)
您需要为您的用例使用任务队列,以便您可以控制服务器的可伸缩性。 生产者可以将作业加载到包含图像细节的任务队列。 任务队列可以依次将作业推送到配置的URL端点。 因此,工作将来到消费者,你可以使用imagemagick。
此设计的主要好处是您不会使服务器过载。如果所有服务器(使用者)都忙,则任务仍保留在任务队列中(需要重新配置重试)。当它是一项密集型任务时,其他任务可以保持在队列中,直到您的某个服务器(消费者)准备好接受它为止。
P.S:任务队列可以是推或拉 https://cloud.google.com/appengine/docs/java/taskqueue/push/