【问题标题】:AWS celery and databaseAWS 芹菜和数据库
【发布时间】:2013-01-09 07:59:57
【问题描述】:

我正在编写一个在 AWS 上运行的 web 应用程序。我的应用程序要求用户上传他们的 pdf 文件。我将使用 linux 中的“转换”实用程序将它们转换为图像。 这是我在 Ubuntu 12.04 上的设置:

  • 姜戈
  • 芹菜
  • 姜戈芹菜
  • 博托

我使用 apache 作为我的网络服务器。

工作流程如下: 三是三个异步任务和两个用于处理所有处理的队列和用于存储输入和输出文件的 S3。 用户上传一个pdf然后:

  1. accept_file_task 被调用:此任务获取用户上传的 pdf 并将其存储在我的 S3 存储中,然后将消息插入到 input_queue(SQS)

  2. check_queue_and_launch_instance_task:一个周期性任务,持续监控 input_queue 中的消息数量,并在队列中的消息多于 Ec2 实例数量时启动实例

  3. 实例有一个引导脚本,它是一个 while True: 循环。任何实例都可以从 input_queue 中选择消息并执行 Subprocess.Popen("convert "+input+ouput) 并将处理后的声明写入 output_queue 并将生成的图像上传到 S3 输出存储桶并使其可作为下载链接

  4. output_process_task:另一个周期性任务,它不断轮询 output_queue,只要有消息可用,它就会更新下表中的状态。

我正在使用一个名为 Document 的模型来存储所有状态信息。我也有用户注册,因此有一个表来存储所有用户信息。 Celery 还创建了很多表来存储它的所有任务信息。现在我在该实例上使用单个实例和 sqlite3 数据库(python 附带)。

我不确定以下几点

  1. 如何扩展数据库?我应该选择 RDS 还是 simpleDB 或 AmazonDB。如果不是 celery,我可以很容易地使用 simpleDB。我真的被这个卡住了

  2. 如何摆脱两个周期性任务 check_queue_and_launch_instance_task 和 output_process_task。我的想法是必须以某种方式使用 Autoscaling,以便在以后需要时可以使用 Elastic Load Balancer。

如果你们中的任何人设计了类似的东西,请帮助我如何去做

【问题讨论】:

    标签: django amazon-web-services amazon-simpledb django-celery


    【解决方案1】:

    如何扩展数据库?我应该选择 RDS 还是 simpleDB 或 AmazonDB。如果不是 celery,我可以很容易地使用 simpleDB。我真的被这个卡住了

    请记住,过早的优化是万恶之源。 RDS(实际上只是 MySQL、Oracle 或 MS SQL)与 SimpleDB 的问题更多的是应用程序设计决策,而不是基于可伸缩性的决策。 SimpleDB 只是一个简单的键值存储。另一方面,RDS 将为您提供完整的ACID 功能。如果您的数据是relational,那么您应该使用关系数据库。如果你只是需要一个地方来存储简单的字符串或整数,那么像 SimpleDB 这样的东西会更有意义。

    现在我在该实例上使用单个实例和 sqlite3 数据库(python 附带)。

    确保您了解 a) 在设计中创建单点故障和 b) SQLite 与在此应用程序中使用独立 RDBMS 相比的局限性。 (您可以使用它,但对于单用户应用程序,它是 really intended)。

    如何摆脱两个周期性任务 check_queue_and_launch_instance_task 和 output_process_task。我的想法是必须以某种方式使用 Autoscaling,以便在以后需要时可以使用 Elastic Load Balancer。

    如果您愿意将 Celery 替换为 SQS,您可以将 SQS + SNS + Cloudwatch 绑定在一起以简化您应用的这一部分。尽管您正在做的事情听起来不错,尤其是在它已经运行良好的情况下。你的时间可能更适合花在解决你面前的问题上,而不是那些可能在路上发生的问题。

    【讨论】:

    • 感谢您的回复。我的印象是异步任务需要芹菜。能否请您指出 SQS+SNS+Cloudwatch 可以替代 celery 的参考。我可以从字面上使用 SimpleDb,因为我的数据库要求并不是那么相关。它使我免于创建所有快照等,就像我可能需要对它们执行的 RDS 一样。
    • 您实际上可以使用Celery on-top of SQS。这对你有帮助吗?
    • 这就是我已经在做的事情。但是对于定期任务,我担心自动缩放
    猜你喜欢
    • 2012-05-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2018-01-08
    • 2021-08-22
    • 2020-08-25
    相关资源
    最近更新 更多