carropublic / serverless-chunk-payload
此包的最新版本(dev-main)没有可用的许可信息。
dev-main
2022-11-30 05:00 UTC
Requires
- php: >=7.1.0
- laravel/framework: >=5.5
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 自动发现自动注册