【问题标题】:Dividing file to be processed partly, then batching results [closed]分割要部分处理的文件,然后批处理结果[关闭]
【发布时间】:2009-11-16 20:19:51
【问题描述】:

请,

我们有以下情况:

组件 X 将 请求文件 分成多个部分,将每个部分发送到一个独立的处理组件 Y - 通过网络 - 将结果回复给组件 Z ,组件 Z 收集所有结果文件部分到一个批处理结果文件

注意:- 请求文件:文件包含N条需要处理的数据记录。

这种情况的最佳做法是什么?有什么协议吗?,有没有可以提供帮助的库?设计模式??

提前感谢。

【问题讨论】:

    标签: design-patterns file protocols


    【解决方案1】:

    我们使用command pattern 对工作单元进行排队以处理非常大的文件。

    命令本身存储在数据库中(命令条目是“处理文件 X,第 1-100 行”、“处理文件 X,第 101-200 行”等)。服务器场中的任意数量的服务器都可以获取一个命令,表明它们正在处理它,然后写回它们的结果。控制器寻找放弃的工作(在 X 分钟内被拾取但没有写入结果)并且可以重新设置工作以再次符合拾取条件。

    【讨论】:

    • 每个服务器如何获取文件的 -data content- 部分?文件是否在服务器之间共享?
    • 我们当前的实现将文件的行读入临时表。但是,如果我有时间重做实现,我可能会使用共享位置。我们在 Amazon AWS 上运行,因此共享位置对我们来说可能是 S3。
    【解决方案2】:

    RabbitMQ 这样的消息服务队列/总线可能会有所帮助。使用此服务,您可以将所有分布式组件连接在一起并以可靠的方式调度/收集结果。

    虽然服务总线不会解决您的所有“问题”,但它可能会解决分布式和可靠的通信位。

    【讨论】:

    • 结果会被推送到同一个请求队列中吗?
    • @Moro:你决定:你对队列有细粒度的控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多