RPC 实战与核心原理
何小锋
京东云混合云首席架构师
41883 人已学习
新⼈⾸单¥59
课程目录
已完结/共 29 讲
RPC 实战与核心原理
登录|注册
留言
15
收藏
沉浸
阅读
分享
手机端
回顶部
付费课程,可试看

视频资源获取失败

开篇词 | 别老想着怎么用好RPC框架,你得多花时间琢磨原理
01 | 核心原理:能否画张图解释下RPC的通信流程?
02 | 协议:怎么设计可扩展且向后兼容的协议?
03 | 序列化:对象怎么在网络中传输?
04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型?
05 | 动态代理:面向接口编程,屏蔽RPC处理流程
06 | RPC实战:剖析gRPC源码,动手实现一个完整的RPC
07 | 架构设计:设计一个灵活的RPC框架
08 | 服务发现:到底是要CP还是AP?
09 | 健康检测:这个节点都挂了,为啥还要疯狂发请求?
10 | 路由策略:怎么让请求按照设定的规则发到不同的节点上?
11 | 负载均衡:节点负载差距这么大,为什么收到的流量还一样?
12 | 异常重试:在约定时间内安全可靠地重试
13 | 优雅关闭:如何避免服务停机带来的业务损失?
14 | 优雅启动:如何避免流量打到没有启动完成的节点?
15 | 熔断限流:业务如何实现自我保护?
16 | 业务分组:如何隔离流量?
答疑课堂 | 基础篇与进阶篇思考题答案合集
17 | 异步RPC:压榨单机吞吐量
18 | 安全体系:如何建立可靠的安全体系?
19 | 分布式环境下如何快速定位问题?
20 | 详解时钟轮在RPC中的应用
21 | 流量回放:保障业务技术升级的神器
22 | 动态分组:超高效实现秒级扩缩容
23 | 如何在没有接口的情况下进行RPC调用?
24 | 如何在线上环境里兼容多种RPC协议?
结束语 | 学会从优秀项目的源代码中挖掘知识
加餐 | 谈谈我所经历过的RPC
加餐 | RPC框架代码实例详解
本节摘要

你好,我是何小锋。上一讲我们学习了如何在没有接口的情况下完成 RPC 调用,其关键在于你要理解接口定义在 RPC 里面的作用。除了我们前面说的,动态代理生成的过程中需要用到接口定义,剩余的其它过程中接口的定义只是被当作元数据来使用,而动态代理在 RPC 中并不是一个必须的环节,所以在没有接口定义的情况下我们同样也是可以完成 RPC 调用的。

回顾完上一讲的重点,咱们就言归正传,切入今天的主题,一起看看如何在线上环境里兼容多种 RPC 协议。

看到这个问题后,可能你的第一反应就是,在真实环境中为什么会存在多个协议呢?我们说过,RPC 是能够帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地一样的体验。大白话说就是,RPC 是能够帮助我们在开发过程中完成应用之间的通信,而又不需要我们关心具体通信细节的工具。

为什么要支持多协议?

既然应用之间的通信都是通过 RPC 来完成的,而能够完成 RPC 通信的工具有很多,比如像 Web Service、Hessian、gRPC 等都可以用来充当 RPC 使用。这些不同的 RPC 框架都是随着互联网技术的发展而慢慢涌现出来的,而这些 RPC 框架可能在不同时期会被我们引入到不同的项目中解决当时应用之间的通信问题,这样就导致我们线上的生成环境中存在各种各样的 RPC 框架。

登录 后留言

全部留言(15)

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

作者回复: 思路不错👍

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

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

2020-04-26
6
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
亚林
这个RPC多协议维护起来也很酸爽吧😭
2026-01-22
hillwater
这种是单端口多协议吗?
2022-10-14
收起评论