gpt4 book ai didi

node.js - 在微服务之间共享文件

转载 作者:搜寻专家 更新时间:2023-10-31 23:07:57 27 4
gpt4 key购买 nike

我正在尝试将一个项目从其当前的单体状态转移到微服务架构。该项目在 Node.js 中,所以我开始研究 Seneca.js , 特别是它的 seneca-mesh模块。将图像操作(裁剪、调整大小等)移动到微服务中似乎是最明智的第一步,因为它现在大大减慢了我的应用程序。

当应用程序是单体应用程序时,将某些文件传递给文件操作逻辑没有问题——只需从本地存储磁盘读取它。然而,对于微服务,如果我们牢记可扩展性,它就会变得更加困难。当然,我可以构建一个图像处理微服务,在同一台主机中扩展它,并在它们之间共享我需要的目录,这样它们也可以从本地磁盘读取。

如果我想要一个真正可扩展的微服务,它可以在具有不同 IP 地址且不共享相同文件系统不同机器上运行和扩展怎么办?我想也许我可以利用 Node 的流式 API 并通过 HTTP 或 TCP 或套接字来回发送这些文件。

据我所知,Seneca.js 无法以正确的方式 做到这一点。当然,我可以像这样通过 Seneca.js 将文件从主应用程序发送到图像处理服务:

fs.createReadStream('/files/hello.jpg')
.on('data', function(data) {
seneca.act({ role: 'file', cmd: 'chunk', data: data }, cb);
})
.on('end', function(err) {
seneca.act({ role: 'file', cmd: 'end' });
})
.on('error', function(err) {
seneca.act({ role: 'test', cmd: 'error' });
});

并分块接收:

seneca.add({ role: 'file', cmd: 'chunk' }, writeToFileCb);
seneca.add({ role: 'file', cmd: 'end' }, endFileWriteCb);

但这种方法看起来很丑陋并且需要重新发明。

另一种方法是提供一些 HTTP 服务器并将文件作为 multipart/form-dataapplication/octet-stream 发送,如下所示:

fs.createReadStream('file.json')
.pipe(request.post('http://image-manipulator'))

但这意味着要重新发明微服务通信的框架。总而言之,我征求有关分布式微服务之间文件共享的建议以及可能的框架。

最佳答案

如果您正在研究微服务架构,您应该想到用于管理文件的微服务!如果您是微服务环境,请不要四处传输文件。例如,您可能会创建一个 FileManagerService,其 API 公开用于 CRUD 实现,并且仅使用 seneca act/add 来提供重要数据……文件 url、大小等。

关于node.js - 在微服务之间共享文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41609091/

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