如何在微服务环境中处理文件上传?
我正在尝试决定如何处理,何时何地处理用户上传的文件。我们处于微服务环境(PHP + Linux)中,以便在未来几个月内部署新系统。一个关键组件是传入文件。
目前,正如我所看到的,有3个选项(也许还有更多我还没有意识到)。它们如下所示:
(1)
[CLIENT:file] ->
[GATEWAY API
FILE STORAGE HANDLER ->
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {response}`
在此方案中,网关 API 旨在处理直接与存储服务(S3、GCS)的通信、设置文件名、验证等。收到存储确认后,它会根据需要将该文件名和其他数据传递给其他微服务。我认为这总体上是有益的,因为文件一旦收到就会被处理,并且可能会失败而不会进一步影响其他任何事情。然而,它确实增加了网关的复杂性,并且可能会在高峰时段迅速减慢速度。
(2)
[CLIENT:file] ->
[GATEWAY API
[a: MICROSERVICE-Files]
[b: MICROSERVICE-News]
[c: MICROSERVICE-Authors]
[d: MICROSERVICE-Logger]
] -> {response}
在此方案中,文件由网关 API 接收,然后必须将其传递到文件微服务。这可能是有益的,因为它消除了网关的可见性,并提供了在服务内部轻松进行更改的灵活性,例如不会影响网关。这样做的主要缺点是,现在单个文件被处理了两次,并且需要计算额外的资源。
(3)
[CLIENT:file] ->
[FILE API] -> {response} ->
[CLIENT] ->
[GATEWAY API
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {response}
在此方案中,客户端负责将文件发送到单独的服务,并使用响应发送到网关 API。从资源的角度来看,这减轻了网关API的巨大负担,并允许它只关注数据,而不是文件。这样做的主要缺点是客户端可以向网关 API 发送错误或恶意信息,并且需要额外的验证来确保文件有效且存在。它还会在将来服务和客户端之间产生潜在的一致性问题。
我可能错过了其他选择,很想知道是否有。是否有人对此有经验,您是如何解决或处理微服务体系结构中的文件?