RPC 实战与核心原理
何小锋
京东云混合云首席架构师
40244 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
RPC 实战与核心原理
15
15
1.0x
00:00/00:00
登录|注册

24 | 如何在线上环境里兼容多种RPC协议?

一次上线完成新老RPC的切换
应用之间的调用关系复杂
多人团队升级困难
同时接入新的RPC框架
逐步升级应用
同时上线所有改造后的应用
RPC内部处理逻辑与协议无关
协议解析过程
新的RPC同时支持多种RPC调用
更好的方式
问题与局限性
实施方式
统一使用一种RPC框架
维护多个RPC框架的成本
不同RPC框架在不同时期被引入
RPC框架的多样性
识别不同协议并找到解析逻辑
在RPC里面支持多协议的重要性
老应用架构升级的难点
优雅处理多协议
解决多种RPC框架混乱的问题
为什么要支持多协议?
完成RPC调用无需接口定义
动态代理生成过程中使用接口定义
接口定义在RPC中的作用
课后思考
总结
在线上环境里兼容多种RPC协议
RPC调用
如何在线上环境里兼容多种RPC协议?
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是何小锋。上一讲我们学习了如何在没有接口的情况下完成 RPC 调用,其关键在于你要理解接口定义在 RPC 里面的作用。除了我们前面说的,动态代理生成的过程中需要用到接口定义,剩余的其它过程中接口的定义只是被当作元数据来使用,而动态代理在 RPC 中并不是一个必须的环节,所以在没有接口定义的情况下我们同样也是可以完成 RPC 调用的。
回顾完上一讲的重点,咱们就言归正传,切入今天的主题,一起看看如何在线上环境里兼容多种 RPC 协议。
看到这个问题后,可能你的第一反应就是,在真实环境中为什么会存在多个协议呢?我们说过,RPC 是能够帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地一样的体验。大白话说就是,RPC 是能够帮助我们在开发过程中完成应用之间的通信,而又不需要我们关心具体通信细节的工具。

为什么要支持多协议?

既然应用之间的通信都是通过 RPC 来完成的,而能够完成 RPC 通信的工具有很多,比如像 Web Service、Hessian、gRPC 等都可以用来充当 RPC 使用。这些不同的 RPC 框架都是随着互联网技术的发展而慢慢涌现出来的,而这些 RPC 框架可能在不同时期会被我们引入到不同的项目中解决当时应用之间的通信问题,这样就导致我们线上的生成环境中存在各种各样的 RPC 框架。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

如何在线上环境里兼容多种RPC协议?本文介绍了在实际应用中存在多种RPC框架的情况,以及如何通过支持多协议的RPC来解决这一问题。文章首先解释了为什么会存在多种RPC框架,以及多种框架带来的管理和维护成本。随后,文章探讨了如何优雅地处理多种协议,提出了在RPC中支持多协议的关键点,即识别不同协议并根据magic number找到对应的解析逻辑。最后,文章强调了在设计应用架构时需要考虑应用的可运维性和平滑升级等软性能力,以及提出了一个课后思考问题,引发读者思考和讨论。通过本文,读者可以了解到在实际应用中如何处理多种RPC框架的问题,以及如何通过支持多协议的RPC来解决这一挑战。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《RPC 实战与核心原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • Desmond
    在反序列化后,且调用API前加一个过滤器,识别是什么协议,老协议按老逻辑走,新协议按新协议逻辑走,多个过滤器构成一个调用链

    作者回复: 思路不错👍

    2020-04-20
    3
    11
  • 陈国林
    当下云原生微服务框架 Service meth大火,通过在meth层做兼容应该可以解决多RPC协议问题

    作者回复: mesh是未来一个大方向

    2020-04-26
    5
  • zero
    rpc的调用是微服务间直连调用,请问协议转换这层逻辑放在哪里,换了新协议是指在当前rpc框架更换协议还是直接更换了rpc框架

    作者回复: 为了平滑升级,需要在新rpc里面去做兼容

    2020-04-16
  • 那个谁
    我想到的一种思路是,上线带监控的rpc,把未包含的协议监控起来,逐步上线支持

    作者回复: 如果发现没有支持的,是不是就已经造成业务受损

    2020-04-15
    3
  • J.Smile
    RPC架构层次: ♻️序列化框架:作用是将方法调用时传入的发送数据从对象转为二进制,序列化一般用在协议里面的payload里面(最简单就是java对象序列化为二进制流封装为消息体然后基于http传输)如jdk、msgpack、protobuf、json、hessian等,推荐首选的还是 Hessian 与 Protobuf。 ♻️编解码框架:编解码是对网络传输消息进行处理,把二进制的数据(payload)进一步封装(或者拆解)为rpc的协议(消息头+消息体)。 ♻️协议:包括协议头和协议体,协议的作用就是用于分割二进制数据流。每种协议约定的数据包格式是不一样的。是网络传输数据格式的约定,作用将发送的数据按照一定的规约进行序列化为二进制流,有http/tcp/ftp等协议,grpc就是就是基于http的协议。 ->补充:协议解析过程就是把一连串的二进制数据变成一个 RPC 内部对象,但这个对象一般是跟协议相关的,所以为了能让 RPC内部处理起来更加方便,我们一般都会把这个协议相关的对象转成一个跟协议无关的 RPC 对象。 ♻️Proxy:作用是让RPC框架根据调用的服务接口提前生成动态代理实现类,实现类似本地的调用感觉。 ♻️负载均衡框架:结合服务注册中心实现服务端列表的路由选择和调用,如restTemplate、ribbon、feignClient等。 ♻️熔断降级框架:实现调用过程中的熔断保护和降级函数。
    2020-10-15
    1
    10
  • Darren
    magic number和协议可以缓存到map中,或者redis中,从配置中心读取,当配置中心修改后,热更新到对应的缓存中。
    2020-04-15
    8
  • 有米
    dubbo就支持多种协议
    2020-05-05
    4
  • cwfighter
    插件化,支持自定义协议插件即可
    2020-09-03
    2
  • hillwater
    这种是单端口多协议吗?
    2022-10-14归属地:上海
  • Unknown element
    “等所有的应用都接入完新的 RPC 以后,再让所有的应用逐步接入到新的 RPC 上” 这句话没看懂逻辑
    2022-10-04归属地:江苏
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部