我正在编写一个在 AWS 上运行的 webapp。我的应用程序要求用户上传他们的 pdf 文件。我将使用 linux 中的“转换”实用程序将它们转换为图像。这是我在 Ubuntu 12.04 上的设置:
- 姜戈
- 芹菜
- 姜芹菜
- 博托
我使用 apache 作为我的网络服务器。
工作流程如下:三个是三个异步任务和两个用于处理所有处理的队列,以及用于存储输入和输出文件的 S3。用户上传pdf然后:
调用accept_file_task:此任务获取用户上传的pdf并将其存储在我的S3存储中,然后将消息插入到input_queue(SQS)
check_queue_and_launch_instance_task:一个周期性任务,持续监控 input_queue 中的消息数量,并在队列中的消息多于 Ec2 实例数时启动实例
这些实例有一个引导脚本,它是一个 while True: 循环。任何实例都可以从 input_queue 中选择消息并执行 Subprocess.Popen("convert "+input+ouput) 并将处理后的声明写入 output_queue 并将生成的图像上传到 S3 输出存储桶中并使其可作为下载关联
output_process_task:另一个周期性任务,它不断轮询 output_queue,只要有消息可用,它就会更新下表中的状态。
我正在使用一个名为 Document 的模型来存储所有状态信息。我也有用户注册,因此有一个表来存储所有用户信息。Celery 还创建了很多表来存储它的所有任务信息。现在我在该实例上使用单个实例和 sqlite3 数据库(python 附带)。
我不确定以下事情
如何扩展数据库?我应该选择 RDS 还是 simpleDB 或 AmazonDB。如果不是 celery,我可以很容易地使用 simpleDB。我真的坚持这个
如何摆脱两个周期性任务 check_queue_and_launch_instance_task 和 output_process_task。我的想法是必须以某种方式使用 Autoscaling,以便在以后需要时可以使用 Elastic Load Balancer。
如果你们中的任何人设计了类似的东西,请帮助我如何去做