Sea*_*uzz 6 php api-design file-handling microservices
我在试图就如何,何时何地从用户处理上传文件的一个决策的过程。我们正处在一个微服务环境(PHP + Linux)的新系统,以在未来数月进行部署。一个关键组成部分是传入文件。
目前,据我所知,有3个选项(也许我还不知道更多)。它们如下:
(1)
[CLIENT:file] ->
[GATEWAY API
FILE STORAGE HANDLER ->
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {response}`
Run Code Online (Sandbox Code Playgroud)
在这种情况下,网关API旨在处理直接与存储服务(S3,GCS)的对话,设置文件名,进行验证等。收到存储确认后,然后根据需要将该文件名和其他数据传递给其他MicroServices 。我认为这是因为该文件一旦它收到并没有别的进一步影响任何向下行可能无法处理是整体有利。但是,它的确增加了网关的复杂性,并可能在高峰时间使速度变慢。
(2)
[CLIENT:file] ->
[GATEWAY API
[a: MICROSERVICE-Files]
[b: MICROSERVICE-News]
[c: MICROSERVICE-Authors]
[d: MICROSERVICE-Logger]
] -> {response}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该文件由网关API接收,然后必须将其传递给文件MicroService。这可能是有益的,因为它使可见性远离网关,并提供了轻松在服务内部进行更改而不会影响网关的灵活性。这样做的主要缺点是,单个文件现在要处理两次,并且需要计算其他资源。
(3)
[CLIENT:file] ->
[FILE API] -> {response} ->
[CLIENT] ->
[GATEWAY API
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {response}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,客户端负责将文件发送到单独的服务,并使用响应将其发送到网关API。从资源的角度来看,这减轻了网关API的负担,并使其仅关注数据,而不关注文件。这样做的主要缺点是客户端可以向网关API发送错误或恶意的信息,并且需要其他验证以确保文件有效并存在。将来还会在服务和客户之间造成潜在的一致性问题。
我可能会错过其他选择,很想知道是否有。有人对此有经验吗?您如何解决或采用MicroService体系结构处理文件?
[CLIENT:file] ->
[FILE API]
-> {response}
->
[a: MICROSERVICE-News]
[b: MICROSERVICE-Authors]
[c: MICROSERVICE-Logger]
] -> {publish}
Run Code Online (Sandbox Code Playgroud)
您可以在此示例中跳过网关 api。
You File api 验证文件上传和数据内容。成功后,您向客户端回复上传成功。
稍后,您在微服务中处理上传,并使用某种发布者来通知客户端是否为此数据在其他服务中添加了新操作。
如果您的客户依赖于数据处理,则您需要执行 2 个步骤。第一步是文件上传响应,它告诉您文件已成功上传并验证。
在这里,您可以通过更改 gui 来对此信息做出反应,或者仍然等待发布者信息。发布者将发送文件信息的执行成功或错误,以便您可以与客户一起完成您的步骤