2014-04-15 74 views
2

我是那种,在我的应用程序一个十字路口 - 在那里我使用python/Django的,MySQL和Ubuntu的12.04什么是一些最快的方法来处理这个?

我的申请将被在线访问其他应用程序,使他们的通路结构的指标,并提交表格。如果您想到这种情况发生在每个拥有一个或多个域名的10或100个帐户上,则表现可能会略微失控。

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

事情是 - 我想存储提交表单的结果,我在其中访问。我读到,我可能需要使用nosql数据库(例如hadoop,redis等)。

我给你所有的问题是:

  • 是否有使用芹菜/ RabbitMQ的一个SQL-DB的不同方式,有什么优势/劣势? 我可以看到必须使用nosql的一个问题:学习曲线。
  • 其次:是否有其他的方式来分配在多个ec2环境中同时运行的几个python脚本的(处理)加载?

谢谢。

+0

当然可以用多台机器运行芹菜。它将把任务分配给从节点。至于nosql,我会研究redis和mongodb。他们都擅长他们的工作。 – reptilicus

回答

1

是否有不同的方式使用SQL-db的芹菜/ rabbitmq和 是优点还是缺点?我可以看到使用nosql必须使用 的一个问题:学习曲线

是的。

  1. 如果你在谈论存储你的Django应用程序/模型数据,你可以用任何SQL类型的数据库,只要你有Python绑定它使用它。大多数流行的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:[email protected]/foo’ 
    # postgresql CELERY_RESULT_BACKEND = ‘db+postgresql://scott:[email protected]/mydatabase’ 
    # oracle CELERY_RESULT_BACKEND = ‘db+oracle://scott:[email protected]:1521/sidname’ 
    
  3. 如果你指的是一个代理(队列机制),芹菜只支持的RabbitMQ和Redis的。

其次:是有一些其他的方式来分配的几个Python脚本(处理)负载 同时在多个EC2 环境中运行?

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

+0

极好的彻底性。谢谢@Rico – CodeTalk

+0

在你的#3响应虽然:它会存储在像redis nosql数据库如果分布的值?或者是否可以使用mysql(在每个ec2节点上)? – CodeTalk

+0

@CodeTalk确定,但这是排队机制不是任务结果 – Rico

相关问题