对于我的项目,我必须创建一个文件管理器,该文件管理器旨在存储许多文件(来自多个位置)并公开URL以下载它们。
在微服务生态系统(我曾经使用过Spring Boot)中,我想知道交换此类文件的最佳方法是什么,我的意思是将文件发送到文件管理器?
一方面,我一直认为最好以异步方式交换它们,因此HTTP似乎不是一个好选择。但是也许我错了。
将文件拆分成碎片(以减少每个部分的字节数)并通过RabbitMQ或Kafka之类的文件发送是个不错的选择吗?还是应该在NAS上或通过FTP传输整个文件,让文件管理器处理它们?或其他一些东西,例如将字节存储在临时数据库中(可能不是一个好选择)...
碎片化的问题是我必须实现一种逻辑,以保持每个碎片的排序,这使主题队列的处理变得复杂。
答案 0 :(得分:2)
IMO,切勿通过消息代理发送实际文件。
首先,设置一些对象存储系统,例如S3(使用AWS或使用Ceph在本地),然后使用生产者将其路径作为字符串发送给文件,然后让消费者读取该路径并下载文件。
如果要从NAS或FTP收集文件,则Apache NiFi是一种具有与此类系统的连接器的工具。
答案 1 :(得分:1)
基于我在分布式系统(基于JMS)上的专业经验,在参与者之间传输大量内容:
为避免数据损坏,在两种情况下也可以传输和检查哈希函数结果。
但是如本e-mail thread中所述,一种更好的方法是在这种情况下使用FTP:
RabbitMQ实际上不应用于大文件传输或仅用于 小心翼翼地将文件分割成较小的单独部分 消息。
运行单个代理实例时,您仍然会很安全,但是在 群集设置,很大的消息会破坏群集。 群集节点通过1个tcp连接进行连接,该连接也必须 传输(erlang)心跳。如果您的大讯息需要更多时间 节点之间的传输比心跳超时( 如果正确,请大约20-45秒),群集将断开,您的 消息丢失。 通过amqp进行文件传输的首选架构是仅发送 带有可下载资源链接的消息,并让文件 可以通过专用协议(例如ftp:-)
处理
希望有帮助。