我正在尝试为标题中描述的问题找到一个水平扩展的解决方案。
对问题的更详细解释是:从消息队列 Web 服务中,读取包含上传到某处文件的 URL 的消息,下载文件,对其进行解析,并将其内容附加到位置取决于内容的文件中.
由于队列中的消息量很大(假设每秒连续 100 条消息),如果由多个工作人员执行并发处理,如果没有对文件的受控访问,则可能会丢失数据。
一个相关的特定信息是,在一批消息中,两条消息不太可能针对同一个目标文件(假设 1% 的消息会发生这种情况,分布均匀),以及处理一个消息的速度消息及其文件的速度略高于从队列中读取消息的速度,从而大大降低了发生冲突的可能性。
如果概率非常低,丢失一些数据可能是可以接受的,但我没有确切的数字。
有哪些可用的算法或设计模式?
一些细节:
- 1000 万个不同的输出文件
- 每天 500 万条消息
- 文件存储由第三方网络服务提供,具有无限并发读/写
- 消息顺序不重要
- 消息仅包含文件的 URL(以 GUID 作为其名称)