寻找架构以下载大文件

时间:2019-05-14 14:17:58

标签: architecture microservices

我想开发一个系统来从大型资源站点(Whois数据库,Shodan,Censys等)下载非常大的文件(来自REST /流事件/ FTP等)-大约1-3TB的文件大小分成每个文件1GB〜来源)。

系统应执行以下操作:

  1. 从源下载文件(从REST api / ftp等下载)
  2. 转换为csv格式

  3. 处理数据(即将时间格式转换为我的时间格式)

  4. 将大型csv文件拆分并压缩为Zip中的最小csv文件(即每个10mb)。

我想到的是发展为微服务概念并使用RabbitMQ。

第一个Micro服务只需下载文件,然后将消息连同文件位置指示写入RabbitMQ。

第二个将文件转换为csv,并使用新文件将消息写入RabbitMQ。

第三个操作数据(转换列等)并使用新的csv文件写入消息。

第四次拆分和压缩。

我只是想知道是否有另一种设计来开发该系统,也许我应该选择另一种设计?

我想听听任何建议。

谢谢!

1 个答案:

答案 0 :(得分:2)

对于您的用例,我建议使用Cadence Workflow。是的,您可以使用RabbitMQ构建流程,但是最终实现了Cadence开箱即用的许多功能。

与使用队列进行任务处理相比,Cadence具有许多其他优点。

  • 构建具有无限到期间隔的指数重试
  • 故障处理。例如,它允许执行一个任务,如果在配置的时间间隔内两次更新均未成功,则该任务会通知另一服务。
  • 支持长时间运行的任务
  • 通过心跳检查检查长时间运行的任务的进度。
  • 能够实现复杂的任务依赖性。例如,在无法恢复的故障(SAGA)的情况下实现呼叫链或补偿逻辑的链接
  • 完全了解更新的当前状态。例如,当使用队列时,您就会知道队列中是否有某些消息,并且需要其他数据库来跟踪总体进度。使用Cadence可以记录每个事件。
  • 能够取消正在进行的更新。
  • 分布式CRON支持

请参见介绍Cadence编程模型的the presentation