24 | 如何在线上环境里兼容多种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
《RPC 实战与核心原理》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(14)
- 最新
- 精选
- Desmond在反序列化后,且调用API前加一个过滤器,识别是什么协议,老协议按老逻辑走,新协议按新协议逻辑走,多个过滤器构成一个调用链
作者回复: 思路不错👍
2020-04-20311 - 陈国林当下云原生微服务框架 Service meth大火,通过在meth层做兼容应该可以解决多RPC协议问题
作者回复: mesh是未来一个大方向
2020-04-265 - zerorpc的调用是微服务间直连调用,请问协议转换这层逻辑放在哪里,换了新协议是指在当前rpc框架更换协议还是直接更换了rpc框架
作者回复: 为了平滑升级,需要在新rpc里面去做兼容
2020-04-16 - 那个谁我想到的一种思路是,上线带监控的rpc,把未包含的协议监控起来,逐步上线支持
作者回复: 如果发现没有支持的,是不是就已经造成业务受损
2020-04-153 - J.SmileRPC架构层次: ♻️序列化框架:作用是将方法调用时传入的发送数据从对象转为二进制,序列化一般用在协议里面的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-15110
- Darrenmagic number和协议可以缓存到map中,或者redis中,从配置中心读取,当配置中心修改后,热更新到对应的缓存中。2020-04-158
- 有米dubbo就支持多种协议2020-05-054
- cwfighter插件化,支持自定义协议插件即可2020-09-032
- hillwater这种是单端口多协议吗?2022-10-14归属地:上海
- Unknown element“等所有的应用都接入完新的 RPC 以后,再让所有的应用逐步接入到新的 RPC 上” 这句话没看懂逻辑2022-10-04归属地:江苏
收起评论