教年轻 AIoT 创业者如何从 0 到 1 实现AIoT 创业项目 了解详情
写点什么

领英采用 Protobuf 进行微服务集成,将延迟降低了 60%

  • 2023-08-09
    北京
  • 本文字数:1174 字

    阅读完需:约 4 分钟

领英采用 Protobuf 进行微服务集成,将延迟降低了60%

领英采用 Protobuf,以实现其各类平台中更为高效的微服务间数据传递,并将其与开源框架 Rest.li 相集成。在全公司范围的推广完成后,领英将延迟降低了 60%的同时,也提高了资源的利用率。


领英平台所采用的是微服务架构,而多年以来,JSON 一直都是领英在微服务暴露的五万余 API 节点中所使用的序列化格式。为帮助团队在服务间构建一致性交互,领英创建并开源了一款名为 Rest.li 的 Java 框架。


该框架可用于创建使用 REST 通信风格的服务器和客户端,并抽象网络、序列化、服务发现等数据交换的诸多方面。Rest.li 框架主要支持 Java 和 Python,但也可与 Scala、Kotlin、JavaScript、Go 等语言协同运作。


Rest.li 服务器和客户端之间的数据流和控制流(来源:Rest.li 文档


Rest.li 的默认序列化格式为 JSON,这种格式支持多款语言且易于人类阅读,后者虽然好处甚多,但却给性能(尤其是延迟)方面带来了许多问题。


领英工程师 Karthik Ramgopal 和 Aman Gupta 分享了在使用 JSON 进行服务间通信所要面临的挑战:

第一个挑战在于,JSON 作为一款文本格式往往过于冗长,从而导致网络带宽的使用和延迟增加,效果并不理想。(……)我们所面临的第二个挑战则在于,JSON 的文本性质会导致序列化和反序列化的延迟和吞吐量均不甚理想。


领英团队一直在寻求 JSON 的替代方案,一款负载大小紧凑、系列化效率高,可减少延迟并提升吞吐量的方案。他们同时也希望这款方案不会限制所支持的语言栈数量,并能通过将这个新的序列化机制集成至 Rest.li 从而实现逐步迁移。最后,经过全面的思考,领英决定采用在各项考量中综合得分最高的Protobuf


将 Protobuf 集成到 Rest.li 中的主要困难在于 PDL,一个基于框架的自定义模式定义系统的动态模式生成。这套解决方案中需生成一个用于动态生成 Protobuf 模式定义的符号表,但根据客户端类型的不同,符号表的交付方式也会有所不同。后端客户端按需获取并缓存符号表,而网页或移动端应用的符号表则在构建时生成,且其中包含版本号依赖关系。


在对框架进行修改之后,领英团队通过 HTTP 头逐步对客户端进行重新配置,以 Protobuf 替代 JSON。采用 Protobuf 后,响应的吞吐量平均提高了 6.25%,请求的吞吐量平均提高了 1.77%。领英团队同样发现对大型负载而言,延迟降低了 60%。


JSON 和 Protobuf 的延迟比较(来源:领英将 Protobuf 与 Rest.li 集成以提高微服务性能


根据对 Protobuf 的采用所得来的经验,领英团队计划后续将 Rest.li 迁移至 gRPC。gRPC 同样使用 Protobuf,并额外支持流式传输,其背后还有一个庞大社区的支持。


具体请见 InfoQ 博客:API 间的对决:REST vs. GraphQL vs. gRPC:该用哪一种?


原文链接

https://www.infoq.com/news/2023/07/linkedin-protocol-buffers-restli/


相关阅读:

LinkedIn图数据库LIquid:为9.3亿会员提供实时数据访问

微软发言人证实旗下LinkedIn平台开始裁员

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2023-08-09 08:001

评论

发布
暂无评论

EasyRecovery的高级设置如何使用

淋雨

数据恢复 EasyRecovery

高质量的缺陷分析:让自己少写 bug

阿里技术

技术管理 技术人生 内容合集

MySQL从入门到入魔之数据库连接池(04)

海拥(haiyong.site)

MySQL 数据库 28天写作 12月日更

Python代码阅读(第71篇):检测一个平坦列表中是否有重复元素

Felix

Python List 编程 阅读代码 Python初学者

在阿里做了五年技术主管,我有话想说

阿里技术

技术人生 内容合集

CSS之变量(四)悬浮跟踪按钮

Augus

CSS 12月日更

拍乐云发布“融合语音通话”产品,实现多场景下VoIP和PSTN互通

拍乐云Pano

RTC PSTN VoIP 融合语音通话

毕业10年才懂,会升层思考,工作有多轻松?

阿里技术

技术管理 技术人生 内容合集

Typora + picGo实现插入图片上传gitee图床

zdd

关于写文章的一点经验

阿里技术

技术管理 技术人生 内容合集

计算机网络体系结构

淡泊明志、宁静致远

TCP 网络结构

多行内容超出...显示的终极解决方案

CRMEB

RPA的定义

金小K

RPA 自动化 自动化平台 自动化运维

OPPO大数据离线任务调度系统OFLOW

安第斯智能云

后端 数据

百度API接口智能化测试探索与实践

百度开发者中心

自动化测试 API测试 智能化测试

如何成为优秀的技术主管?你要做到这三点

阿里技术

技术管理 技术人生 内容合集

面对复杂业务,if-else coder 如何升级?

阿里技术

技术人生 内容合集

7 个建议让 Code Review 高效又高质

阿里技术

技术管理 技术人生 内容合集

优秀工程师必备的一项技能,你解锁了吗?

阿里技术

技术管理 技术人生 内容合集

技术三板斧:关于技术规划、管理、架构的思考

阿里技术

技术管理 技术人生 内容合集

技术人如何自我成长?

阿里技术

技术管理 技术人生 内容合集

为什么大部分人做不了架构师?这2点是关键

阿里技术

技术人生 内容合集

为企业创建完美CRM系统策略

低代码小观

企业管理 CRM 客户关系管理 CRM系统 客户关系管理系统

【浅谈黑客与学习思路】黑客的种类和行为,初学者应该怎样学习

H

黑客 网络安全 信息安全

第七模块总结

张靖

#架构实战营

如何写好代码?

阿里技术

技术管理 技术人生 内容合集

如何提高一个研发团队的“代码速度”?

阿里技术

技术管理 技术人生 内容合集

在阿里,我如何做好技术项目管理?

阿里技术

技术管理 技术人生 内容合集

揭开神秘面纱,如何组织一次分布式压测

博睿数据

架构实战-模块七-作业

无名

架构实战营 「架构实战营」

一周信创舆情观察(12.13~12.19)

统小信uos

  • 扫码添加小助手
    领取最新资料包
领英采用 Protobuf 进行微服务集成,将延迟降低了60%_微服务_Rafal Gancarz_InfoQ精选文章