如何解决数百万任务的循环调度设计
我想设计一个应用程序,它每隔几小时/几天就执行数百万个类似的任务。
为了更容易解释,我将以抓取亚马逊为例(不是我正在尝试做的真正项目)
假设我们有一长串产品,我们希望每天在亚马逊上收集一次它们的价格并将其存储在某处(数据库、文件等)。 列表会随着时间的推移而变化,每天都会删除一些产品并添加新产品。 产品列表可以存储在数据库、文件等中。 我们可以运行重复的任务,但我们应该尽量减少它以避免我们的 IP 被阻止。
- 一个简化的解决方案是让 cron 作业每天运行一次,获取产品列表,遍历它们,收集每个产品的价格,并存储价格。第二天重复。
一个问题是并行化的空间不大,我们可以拆分工作并让多个线程处理这个。 如果一台服务器一天不能处理整个列表,我们需要在多台服务器之间分配工作怎么办?我们可以在服务器之间拆分工作,每个服务器都必须经过一个批处理。 我们如何处理服务器故障?然后我们是否应该运行另一个任务来为所有失败/未完成的任务重新安排重新安排工作? 我们如何确保工作负载在服务器之间均匀分布?
- 更好的解决方案是将任务排队,然后工作人员可以在新任务可用时从队列中取出新任务。
但是必须将任务排队的代码呢?它必须经过数百万种产品并在队列中创建数百万个任务。排队工作本身的工作可能会失败,然后我们最终会丢失任务或超过预期的重复任务。
- 另一种选择是使用支持行锁定的关系数据库,每个工作人员会锁定当天未处理的行,完成工作并更新时间戳,然后解锁该行。
我不确定这是否会扩大规模,以及随着工作人员数量的增加,数据库是否可以处理所有工作人员。如果我们要陷入僵局之类的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。