gpt4 book ai didi

并发合并n个文件为一个的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:57 25 4
gpt4 key购买 nike

我正在尝试为标题中描述的问题找到一个横向扩展的解决方案。

对该问题的更详细解释是:从消息队列 Web 服务中,读取包含指向上传到某处的文件的 URL 的消息,下载文件,解析它,并将其内容附加到位置相关的文件关于内容。

由于进入队列的消息量很大(假设连续每秒 100 条消息),如果由多个工作人员执行并发处理,如果没有对文件的受控访问,数据可能会丢失。

一个相关的特定信息是,在一批消息中,两条消息不太可能针对同一个目标文件(假设这将发生在 1% 的消息中,并且分布均匀),并且速度处理消息及其文件的速度略高于从队列中读取消息的速度,从而大大降低了冲突的可能性。

如果概率非常低,丢失一些数据可能是可以接受的,但我没有确切的数字。

对此有哪些可用的算法或设计模式?

一些细节:

  • 1000 万个不同的输出文件
  • 每天 500 万条消息
  • 文件存储由第三方网络服务提供,具有无限的并发读/写
  • 消息顺序不重要
  • 消息仅包含文件的 URL(以 GUID 作为名称)

最佳答案

由于您可以在任意数量的工作人员之间任意扩展下载和附加的基本工作,这里的关键问题似乎是如何保证一次只发生一个文件更新。实现这一目标的一些方法:-

选项 1:将下载与附加分开。多个“下载” worker :获取内容,计算位置,计算位置的哈希值,根据哈希值将内容放入写入队列。多个“writer”worker,每个都消费一个队列,按顺序处理队列,保证没有其他 writer 会尝试更新同一位置。您可能需要实现某种形式的 consistent hashing允许系统优雅地承受任意故障。

选项 2:创建单独的锁定系统多个worker,各自下载内容,计算位置,在二级系统(数据库,文件系统,内存分布式缓存)中获取位置锁,执行追加操作,释放锁。本质上这变成了 distributed lock问题。

关于并发合并n个文件为一个的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com