我正在编写一个在AWS上运行的web应用程序。我的应用程序要求用户上传他们的PDF文件。我将使用linux中的“convert”实用程序将它们转换为Images。 这是我在Ubuntu 12.04安装:AWS芹菜和数据库
- Django的
- 芹菜
- Django的芹菜
- 博托
我使用Apache作为我的网络服务器。
工作流程如下: 三个是三个异步任务,两个队列用于处理所有的处理,S3用于存储输入文件和输出文件。 用户上载的PDF,那么:
accept_file_task被称为:此任务需要用户上传的PDF并将其存储在我的S3存储,然后插入一个消息到input_queue(SQS)
check_queue_and_launch_instance_task :一个定期任务,不断监视input_queue中的消息数量,并在队列中的消息多于Ec2实例的数量时启动实例
实例具有一个True:循环的引导脚本。任何实例都可以从input_queue中选择消息并执行Subprocess.Popen(“convert”+ input +输出)并将处理后的消息写入output_queue,并将生成的图像上载到S3输出存储区并将其作为下载链接
output_process_task:另一个不断轮询output_queue的周期性任务,只要有消息可用,它就会更新下面提到的表中的状态。
我正在使用名为Document的模型来存储所有状态信息。我也有用户注册,因此有一张表来存储所有的用户信息。另外Celery创建了很多表来存储所有的任务信息。现在,我正在使用一个实例和该实例上的sqlite3数据库(附带python)。
我不确定下面的事情
如何扩大数据库?我应该去RDS还是SimpleDB或AmazonDB。如果不是芹菜,我可以轻松使用simpleDB。我真的被困在这一个
如何摆脱两个周期性任务check_queue_and_launch_instance_task和output_process_task。我的想法是必须以某种方式使用Autoscaling,以便在稍后阶段需要时可以使用Elastic Load Balancer。
如果你们已经设计了类似的东西,请帮助我如何去了解它
感谢您的回复。我的印象是异步任务需要芹菜。请你指点一下SQS + SNS + Cloudwatch可以代替芹菜的参考资料。我可以从字面上使用SimpleDb,因为我的数据库要求不是全部关系。它将我从所有的快照创建等中拯救出来,就像我可能需要做的RDS一样。 – rajatk
您实际上可以使用[SQS上的芹菜](http://docs.celeryproject.org/en/latest/getting-started/brokers/sqs.html)。这对你有帮助吗? – jamieb
那就是我已经在做的事情。但对于定期任务,我担心自动缩放 – rajatk