高效 Google PubSub 发布
Efficient Google PubSub Publishing
PubSub 的文档声明解码后的最大有效负载为 10MB。我的问题是在发布之前压缩发布者的有效负载是否有利于增加数据吞吐量?
如果有效载荷具有高压缩比,如 json 格式的有效载荷,这尤其有用。
如果您在 PubSub 上寻找效率,我会首先专注于使用最好的 API,那就是 gRPC。如果正在使用客户端库,那么无论如何它都在使用 gRPC 的可能性很高。为什么选择 gRPC?
- gRPC 是二进制的,您的有效负载不需要经过循环就可以被编码
- REST 需要对有效载荷进行 base64 处理,使其更大并具有额外的编码步骤
其次,如果可能,我会尝试对消息进行批处理,从而减少调用次数,消除一些延迟。
最后我要看一下压缩,但这意味着您需要在订阅者处专门对其进行解压缩。这意味着您的应用程序代码将变得更加复杂。如果您所有的工作负载都在 Google 云平台上,我不会为压缩而烦恼。如果您的工作负载在 GCP 之外,您可能会考虑它,但测试是有意义的。
压缩的替代方法,如果您的架构稳定,正在考虑使用 ProtoBuf。
总而言之,我会:
- 确保您使用的是 gRPC
- 尽可能批量处理
- 仅在需要时和基准测试后压缩(意味着您的应用程序中有额外的逻辑)
PubSub 的文档声明解码后的最大有效负载为 10MB。我的问题是在发布之前压缩发布者的有效负载是否有利于增加数据吞吐量?
如果有效载荷具有高压缩比,如 json 格式的有效载荷,这尤其有用。
如果您在 PubSub 上寻找效率,我会首先专注于使用最好的 API,那就是 gRPC。如果正在使用客户端库,那么无论如何它都在使用 gRPC 的可能性很高。为什么选择 gRPC?
- gRPC 是二进制的,您的有效负载不需要经过循环就可以被编码
- REST 需要对有效载荷进行 base64 处理,使其更大并具有额外的编码步骤
其次,如果可能,我会尝试对消息进行批处理,从而减少调用次数,消除一些延迟。
最后我要看一下压缩,但这意味着您需要在订阅者处专门对其进行解压缩。这意味着您的应用程序代码将变得更加复杂。如果您所有的工作负载都在 Google 云平台上,我不会为压缩而烦恼。如果您的工作负载在 GCP 之外,您可能会考虑它,但测试是有意义的。
压缩的替代方法,如果您的架构稳定,正在考虑使用 ProtoBuf。
总而言之,我会:
- 确保您使用的是 gRPC
- 尽可能批量处理
- 仅在需要时和基准测试后压缩(意味着您的应用程序中有额外的逻辑)