有哪些最快的方法来处理这个?

时间:2014-04-15 18:59:55

标签: python django performance hadoop amazon-ec2

我在我的应用程序的十字路口 - 我使用的是python / django,mysql和ubuntu 12.04

我的应用程序将在线访问其他应用程序,制作其路径结构的索引,并提交表单。如果您认为10个或100个帐户每个都有一个或多个域名,那么性能可能会有点失控。

我最初的想法是设置一个ec2环境来分配在多个ec2实例上访问每个域上所有这些路径的负载,每个实例运行celery / rabbitmq以在这些ec2实例之间分配处理负载。

问题是 - 我想存储提交我访问的表单的结果。我读过我可能需要使用nosql db(例如hadoop,redis等)。

我的问题是:

  • 使用带有SQL-db的celery / rabbitmq有不同的方法吗?有哪些优点/缺点? 我可以看到必须使用nosql的一个问题:学习曲线。
  • 其次:是否有其他方法可以在多个ec2环境中同时运行多个python脚本的(处理)负载?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

是否有不同的方法将celery / rabbitmq与SQL-db一起使用   优点/缺点是什么?我可以看到一个问题   使用nosql:学习曲线

  1. 如果您正在讨论存储Django应用程序/模型数据,只要您拥有Python绑定,就可以将它用于任何SQL类型的数据库。最流行的SQL数据库具有python绑定。

  2. 如果您指的是在特定后端存储任务结果,那么对多个数据库/协议SQL和noSQL的支持。我相信在SQL(MySQL,Posgtgres)或noSQL(Mongo,CouchDB)中存储结果之间没有特定的优势或劣势,但这仅仅是我的个人观点,这取决于应用的类型你在跑步。这些是您可以用于SQL数据库的一些示例(来自他们的文档):

    # sqlite (filename) CELERY_RESULT_BACKEND = ‘db+sqlite:///results.sqlite’
    # mysql CELERY_RESULT_BACKEND = ‘db+mysql://scott:tiger@localhost/foo’
    # postgresql CELERY_RESULT_BACKEND = ‘db+postgresql://scott:tiger@localhost/mydatabase’
    # oracle CELERY_RESULT_BACKEND = ‘db+oracle://scott:tiger@127.0.0.1:1521/sidname’
    
  3. 如果您指的是经纪人(排队机制),芹菜只支持RabbitMQ和redis。

  4.   

    其次:是否有其他方式来分配(处理)负载   几个python脚本在多个ec2上同时运行   环境?

    这正是芹菜的作用,您可以在多台机器上设置您的工作人员,这些机器可以是不同的EC2实例。然后,您所要做的就是将芹菜装置指向您配置中的相同队列/经纪人。如果您希望代理中的冗余(RabbitMQ和/或Redis),您应该在集群配置中设置它们。