compression - aws sns 发布压缩有效负载
问题描述
可以发布到 AWS-SNS 的消息的最大大小限制为 256KB。我们可以使用 GZIP 压缩消息并发送发布压缩消息以克服大小限制吗?
解决方案
您可以 gzip 邮件正文 -但是- SNS 邮件正文仅支持 UTF-8 字符数据。Gzipped 数据是二进制的,因此与 SNS 不直接兼容,因为并非每个可能的字节序列也是有效的 UTF-8 字符序列。
因此,在对有效负载进行 gzip 压缩后,您需要使用 base-64 等方案对二进制数据进行编码。Base-64 仅使用 64(即 2^6,每字节 6 位)符号对任意二进制数据(每字节 8 位)进行编码,因此字节数增加了 8/6(133%)编码。这意味着 192KB 的二进制数据编码为 256KB 的 base-64 编码数据,因此gzip 后允许的最大消息大小变为 192K(因为 SNS 限制为 256KB)。但是所有 base-64 符号都是有效的单字节 UTF-8 字符,这是这种编码如此普遍使用的一个重要原因,尽管它的大小有所增加。那,以及 gzip 通常具有远优于 1.33:1 的压缩比(这是 gzip + base-64 的收支平衡点)这一事实。
但是,如果您的消息将 gzip 压缩到 192K 或更低,这肯定适用于 SNS(以及具有相同字符集和大小限制的 SQS)。
推荐阅读
- php - PHP while循环使用TCPDF输出多个单个PDF
- scala - scala对象伴侣和特征的问题
- agda - 无法解析左侧 (m + 1) * n
- javascript - 带有 TypeScript 的 Vue.js 从 Twig 错误属性获取数据不存在
- elasticsearch - Elasticsearch - at&t 和 procter&gamble 案例
- scala - 如何使用 net.ruippeixotog.scalascraper 从 html 表中抓取所有链接
- javascript - 包含日期的变量更改值而不被更改
- python - 我试图从一个 numpy 数组中创建一个视频,但我遇到了一个错误
- android-studio - Android 工作室:更新 Google Play 时 AVP 崩溃
- r - 循环遍历 R 中的 data.frame 列