首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以分布式方式处理耗时的任务?

如何以分布式方式处理耗时的任务?
EN

Stack Overflow用户
提问于 2012-08-15 11:35:22
回答 1查看 224关注 0票数 3

我们需要处理多个节点需要花费大量时间(解析大量xml文件并将数据插入到db)的任务。节点不会很多,我们甚至要从一个节点开始。

这些文件将从FTP中读取。这项工作将安排好,每天进行一次。什么是一个好的和容易的方式来分发处理?

我目前的想法是:

  • 使用hazelcast分布式ConcurrentMap -它处理场景后面映射的同步。
  • 每个节点获取整个文件列表并对其进行洗牌。
  • 然后,每个节点使用.putIfAbsent(..)迭代列表--如果文件不在映射中,则处理它。如果它在映射中,这意味着另一个节点正在处理它,所以尝试下一个文件。

这条路:

  • 节点永远不会空闲。
  • 如果节点失败,其他节点仍将处理所有内容(只是速度较慢)。
  • 由于文件很大,处理它们需要很长时间,所以在.putIfAbsent(..)调用和底层同步中很少会出现争用开销(改组也是为了改善这一点)。
  • 它需要最少的配置,并且不需要安装和管理其他服务(比如消息队列)。

但我不确定这是否是最好的方法。可以吗?还有什么可以改进的?还有更好的吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-15 12:56:18

基于您的评论,我建议考虑使用JMS (比如我认为使用/开发最简单的ActiveMQ )。

它可以是独立的、冗余的和/或嵌入的。

您可以将消息添加到队列中,并从任意数量的节点中使用。在自动提交关闭后,失败的节点将自动返回消息到队列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11968568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档