运行后台作业在集群环境中

我有一个架构问题。 在集群Web应用程序环境中,我可以想到三种处理后台作业的方法:

  1. 有专门的机器运行所有的工作,从而释放Web服务器不必这样做
  2. 让每个Web服务器也运行后台作业,使用一种机制来确保没有两台机器启动相同的工作
  3. 有一个networking服务器加倍作为就业跑步者

什么是首选方法?

如果你有这些资源,而且它们运行的​​后台任务并不重要,我会select1。

没有任何理由,除了为什么如果你不需要负担你的networking服务器。

这取决于你的预算,但最好的方法是在不同的服务器上运行作业。 它可以很好地区分顾虑,而且不必担心被繁重的工作所影响的networking体验。

IANAExpert,但我会想象,选项1将是可取的。 这背后的原因是一个简单的关注分离。 如果工作有自己的专用机器,你可以更好地pipe理发展。 如果使用选项2,那么您的作业处理潜力将与其要求不符。 尽pipe无论是一台机器还是多台机器运行这些工作,所使用的资源都应该是相同的,但我想象一下,您使用的任何排队系统都有一定的开销。 此外,如果队列或networking服务器出现问题,则不会将其他服务器closures。 你已经把应用程序的每一部分都划分了,所以你可以根据需要增长,而不是像你的架构所要求的那样。

每个选项都有优点和缺点,并在任何情况下select首选方式是需要(imho)多一点的信息。 例如,什么样的背景工作? 这是一个至关重要的问题,因为例如,如果业务stream程利用已经存在的集群可能是有趣的。

例如,如果与业务不直接相关的维护过程(或用户需求)可能具有分离的硬件(或虚拟)更有意义。

根据我的经验,有的时候,我们所有的人都不太愿意充分利用这个群集,但是这个群集正在使用它们!

Peldi,考虑使用一种方法,允许有一个单独的作业队列(最好在数据库中),以及一个或多个作业运行者。 这样,您可以在一台或多台不同的机器上运行一个或多个作业工作人员 – 这将使您的configuration更为灵活。

我不知道你要运行什么types的任务,哪些技术可以使用,但是在Ruby / Rails世界中,这样的任务可以使用delayed_job来解决

有关后台处理的其他信息,请访问http://en.wikipedia.org/wiki/Job_scheduler

就个人而言,在我的项目中,我在数据库驻留的同一台机器上运行后台作业,但如果需要的话,以后可以添加更多的工人/机器。

希望这可以帮助 :)

面对同样的情况,你在:

我不会去select1,因为你有一个单一的失败点。 或额外的架构工作,以防止失败

我不会去select3,因为你最终会得到不一样的networking节点,这将阻碍未来的自动化。

我会使用选项2,并有一个中央队列服务,最好是基于云的一个,因为它已经成群,从而为您节省了故障转移,比例等的负担

我假设你已经处理了故障转移并通过使用你的web节点的集群来加载,所以我只是简单地增加了这些马的工作负载,而是在一个单独的过程中运行。

希望有所帮助