ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 如何在微服务环境中处理文件上传?

2019-07-10 18:31:48  阅读:338  来源: 互联网

标签:php api-design microservices file-handling


我正在尝试决定如何,何时以及在何处处理来自用户的上传文件.我们正处于MicroService环境(PHP Linux)中,以便在未来几个月内部署新系统.一个关键组件是传入文件.

目前正如我所看到的那样有三种选择(可能还有更多我尚未意识到的).它们如下:

(1)

[CLIENT:file] -> 
    [GATEWAY API 
        FILE STORAGE HANDLER ->
        [a: MICROSERVICE-News]
        [b: MICROSERVICE-Authors]
        [c: MICROSERVICE-Logger]
    ] -> {response}`

在这种情况下,Gateway API旨在处理与存储服务(S3,GCS)的直接对话,设置文件名,验证等.当收到存储确认时,它会根据需要将该文件名和其他数据传递给其他MicroServices .我认为这对整体有益,因为文件在收到后立即处理,并且可以在不影响其他任何其他内容的情况下发生故障.然而,它确实增加了网关的复杂性,并且可能在高峰时间迅速减慢速度.

(2)

[CLIENT:file] ->
    [GATEWAY API
        [a: MICROSERVICE-Files]
        [b: MICROSERVICE-News]
        [c: MICROSERVICE-Authors]
        [d: MICROSERVICE-Logger]
    ] -> {response}

在这种情况下,文件由Gateway API接收,然后必须将其传递给文件MicroService.这可能是有益的,因为它可以远离网关,并且提供了在服务内轻松进行更改的灵活性,而不会影响网关.这样做的主要缺点是现在单个文件被处理两次并且需要计算额外的资源.

(3)

[CLIENT:file] -> 
    [FILE API] -> {response} -> 
[CLIENT] -> 
    [GATEWAY API
        [a: MICROSERVICE-News]
        [b: MICROSERVICE-Authors]
        [c: MICROSERVICE-Logger]
    ] -> {response}

在这种情况下,客户端负责将文件发送到单独的服务并使用响应发送到Gateway API.从资源的角度来看,这会占用Gateway API的巨大负担,并且只允许它关注数据,而不关心文件.这样做的主要缺点是客户端可能会向Gateway API发送错误或恶意信息,并需要进行额外验证以确保文件有效且存在.它还会在服务和客户之间产生潜在的同余问题.

我可能会错过其他选项,并希望知道是否有.有没有人有这方面的经验,你是如何解决或处理MicroService架构中的文件?

解决方法:

[CLIENT:file] -> 
    [FILE API]
     -> {response}
     -> 
        [a: MICROSERVICE-News]
        [b: MICROSERVICE-Authors]
        [c: MICROSERVICE-Logger]
    ] -> {publish}

您可以在此示例中跳过Gateway api.

You File api验证文件上载和数据内容.成功之后,您会向客户回复上传成功的情况.

稍后您将在微服务中处理上载,并使用某种发布者通知客户端此数据是否会在您的其他服务中添加新操作.

如果您的客户端依赖于数据处理,那么您有两个步骤.第一步是文件上传响应,告诉您文件已成功上传和验证.

在这里,您可以通过更改gui来响应此信息,或者仍然等待发布者信息.
Publisher将发送文件信息的成功或成功或错误,因此您可以完成与客户端的步骤

标签:php,api-design,microservices,file-handling
来源: https://codeday.me/bug/20190710/1426438.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有