2 回答

TA贡献1794条经验 获得超8个赞
我没有太多的背景,所以基本上会尝试从我如何看待它来提供答案。
首先,我不会将数据发送到 webapi,而是将数据直接发送到 S3。在 Azure 中有共享访问令牌,因此你可以向你的 api 发送请求,以提供上传文件的 url(有很多选项,但你可以通过时间限制,按 IP 限制谁可以上传)。所以上传文件1。做电话获取上传网址, 2.放到该网址。看起来在亚马逊上它被称为签名政策。
在写入将在S3上传时触发的lambda函数之后,此函数将发送事件(再次,我不知道它在AWS中如何,但在azure中,我将发送Blob队列消息),此事件将包含文件和起始位置的URL。
编写第二个Lambda来侦听事件并进行实际处理,因此在我的应用程序中,有时我知道要处理N个项目需要10秒,因此由于部署的性质,我通常选择N不超过10-20秒。处理了 N 行并且尚未完成后,发送相同的事件,但现在开始位置 = 乞求上的开始位置 + N。
通过这种方式设计,您可以处理大文件,甚至更聪明,因为您可以发送多个事件,例如“开始行”,“结束行”,以便能够在多个实例中处理文件。
为什么我不建议您将文件上传到WebApi,因为这些文件将在内存中,因此假设您有1GB文件从多个来源发送,在这种情况下,您将在几分钟内杀死您的服务器。
PS2.文件格式取决于 json,因为它是读取这些文件的最简单方法,但请记住,如果您有大文件,将整个文件读取到内存将很昂贵。以下是如何正确阅读它们的示例。所以其他选项可能只是平面文件,然后很容易阅读它,因为这样你可以读取范围并处理它
PS3.在 azure 中,我会使用 Azure Batch Jobs

TA贡献1818条经验 获得超3个赞
这是我的思考过程。当您公开用于日志记录的 API 时,您的输入应包含以下属性
日志级别(信息、调试、警告、致命)
日志消息(字符串)
应用程序标识
应用程序实例标识
应用程序 IP
主机(记录错误的计算机)
用户 ID(发生错误的用户)
UTC 格式的时间戳(错误发生的时间)
其他数据(可自定义为 xml / json)
我建议通过 Gateway API 将 API 公开为 AWS lambda,因为它有助于随着负载的增加而横向扩展。
要获取有关如何构建 API 和使用模型绑定的示例,可以参考 https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
- 2 回答
- 0 关注
- 125 浏览
添加回答
举报