AWS 芹菜和数据库



我正在编写一个在 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,只要有消息可用,它就会更新下表中的状态。

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

我不确定以下事项

  1. 如何纵向扩展数据库?我应该选择RDS还是simpleDB或AmazonDB。如果不是芹菜,我可以很容易地使用simpleDB。我真的被困在这个

  2. 如何摆脱两个周期性任务check_queue_and_launch_instance_task和output_process_task。我的想法是,必须以某种方式使用自动缩放,以便在以后需要时可以使用弹性负载均衡器。

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

如何纵向扩展数据库?我应该选择RDS还是simpleDB或AmazonDB。如果不是芹菜,我可以很容易地使用simpleDB。我真的被困在这个

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

现在我正在使用单个实例和该实例上的sqlite3数据库(随python一起提供)。

确保您了解 a) 在设计中创建单点故障的后果,以及 b) SQLite 与在此应用程序中使用独立 RDBMS 相比的局限性。(您可以使用它,但它实际上是为单用户应用程序设计的)。

如何摆脱两个周期性任务check_queue_and_launch_instance_task和output_process_task。我的想法是,必须以某种方式使用自动缩放,以便在以后需要时可以使用弹性负载均衡器。

如果你愿意用 SQS 取代 Celery,你可以将 SQS + SNS + Cloudwatch 捆绑在一起,以简化应用的这一部分。 虽然你正在做的事情听起来不是一个糟糕的选择,特别是如果它已经运行良好。 你的时间可能最好花在你面前的问题上,而不是那些可能发生的问题。

相关内容

  • 没有找到相关文章

最新更新