carropublic/serverless-chunk-payload

此包的最新版本(dev-main)没有可用的许可信息。

dev-main 2022-11-30 05:00 UTC

This package is not auto-updated.

Last update: 2024-09-18 19:12:57 UTC


README

Lambda 调用限制

https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html

  • AWS Gateway 只允许 HTTP API 有效负载大小为 10MB。
  • AWS Lambda 只允许函数调用的有效负载大小为 6MB。-> 因此使用 AWS Gateway 和 AWS Lambda 集成,最大有效负载大小为 6MB

简单分块上传协议

为了能够发送更大的有效负载,需要将有效负载分割成更小的部分。

  • 假设我们有一个 10MB 的 JSON 有效负载
  • 将 JSON 解码为字符串,并将其分成 10 个 1MB 的字符串块
  • 使用不同的块有效负载调用 API 10 次
    • chunk_data: 当前块
    • chunk_index: 当前块的索引
    • total_chunks: 总块数(在本例中 = 10)
    • payload_hashed: 原始 JSON 的 md5 值
  • BE 将收集 10 个块
  • 在收集到最后一个块后,实际的有效负载将被连接并通过 Laravel 管道传递
    • 前一个块将被收集并保存在 Redis 缓存中
    • 这些请求在保存到 Redis 缓存后立即返回

唯一标识符

由于 payload_hashed 将用作缓存的标签名称,因此尝试多次上传相同的内容可能导致这些上传之间发生冲突

为了避免这种行为,始终向原始有效负载添加额外数据,称为 uniqueId

  • 这可以是任何随机字符串或当前时间戳,可以认为是多次上传之间的唯一标识
  • 在恢复原始数据后,将减去此 uniqueId 数据。

如何使用

composer require carropublic/serverless-chunk-payload

中间件将通过 ServiceProvider 自动注册,它也由 Laravel 自动发现自动注册