根据我们所做的和看到的,一个好方法是在运行时分块工作,而不是之前。换句话说,主/从模式是事件或时间驱动的,主模块在队列和运行时将工作/数据空间分割成细粒度的任务/块。
这样做的原因是,在粗粮级别完成时,查看计划中的作业要容易得多。在此级别,作业对应于您正在跟踪的单元(例如网页,用户配置文件或来自传感器的流式传输数据)。
我们经常看到在精细粒度级别切片,但接着看到每个工作人员都在合理收集任务。我们发现,有每个工作进程多个任务(20-1000取决于任务的类型/长度?)提供之间的良好平衡:
- 优化设置(建立例如数据库连接)
- 提供了良好的自省到工作
- 使重试和异常处理更易于管理
你会想为每个工人的处理时间在几分钟而不是长时间运行的任务,只是让你有更多的可视性工人表现等等重试只影响有限的工作空间。使用NoSQL解决方案(尤其是像MongoHQ或MongoLabs这样的数据库即服务的解决方案)可以让您轻松跟踪和管理分块和正在进行的工作。
另一个建议是创建独立于您的应用程序环境的工作人员。这意味着要将每个工作人员编写为合理自包含的,以及使用回调函数,数据库标志和其他异步方法。它可能稍微有点多,但就像MVC应用程序设计一样,它可以提供更大的灵活性,并允许将工作分布在弹性工作系统上。
(全面披露:我对球队在Iron.io,IronMQ,联合冲剪机,并IronCache的制造商)
请问这个远程网站对你的感觉让20M的要求? – 2011-06-05 21:30:35
它在技术上是一个API,所以有坚持的限制。 – 2011-06-05 21:46:11