LinkedIn 采用 Protocol Buffers 提升微服务数据交换效率
LinkedIn 在其平台上采用 Protocol Buffers(Protobuf)作为微服务间数据交换的格式,并将其与开源的 REST 框架 Rest.li 集成。此举显著降低了延迟,最高可达 60%,同时提高了资源利用率。
背景与挑战
LinkedIn 平台采用微服务架构,长期以来,JSON 被用作微服务间 API 端点的序列化格式。为了确保服务间交互的一致性,LinkedIn 开发了 Rest.li 框架,该框架支持 REST 风格的通信,并抽象了数据交换的多个方面,如网络、序列化和服务发现。尽管 JSON 具有广泛的语言支持和可读性,但其文本格式的冗长性导致了网络带宽使用增加和延迟升高,且序列化和反序列化的性能也不理想。
解决方案:Protocol Buffers
为了解决 JSON 带来的性能问题,LinkedIn 团队考虑了一系列替代方案,最终选择了 Protocol Buffers。Protobuf 以其紧凑的负载大小和高序列化效率脱颖而出,能够有效降低延迟并提高吞吐量。团队还希望保持对多种语言栈的支持,并通过逐步迁移的方式将 Protobuf 集成到 Rest.li 中。
集成挑战与实现
将 Protobuf 集成到 Rest.li 的主要挑战在于动态模式生成,因为 Rest.li 使用自定义的模式定义系统 PDL。团队通过生成符号表来动态生成 Protobuf 模式定义,并根据客户端类型采用不同的符号表交付方式。后端客户端按需获取并缓存符号表,而网页/移动应用的符号表则是在构建时生成并作为版本化依赖包含在内。
成果与后续计划
在框架更改后,团队逐步将客户端配置为使用 Protobuf 而非 JSON。结果显示,响应吞吐量平均提高了 6.25%,请求吞吐量提高了 1.77%。对于大负载,延迟最高减少了 60%。基于此次 Protobuf 集成的经验,团队计划进一步迁移到 gRPC,因为 gRPC 不仅支持 Protobuf,还支持流式传输,并且拥有庞大的社区支持。
结论
LinkedIn 通过采用 Protocol Buffers 显著提升了微服务间的数据交换效率,降低了延迟并提高了吞吐量。这一成功经验为未来的技术迁移奠定了基础,特别是向 gRPC 的过渡。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。