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

视频资源获取失败

开篇词 | 别老想着怎么用好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 在每次发起请求的时候,都需要从多个服务提供方节点里面选择一个用于发请求的节点。

既然这些节点都可以用来完成这次请求,那么我们就可以简单地认为这些节点是同质的。这里的同质怎么理解呢?就是这次请求无论发送到集合中的哪个节点上,返回的结果都是一样的。

既然服务提供方是以集群的方式对外提供服务,那就要考虑一些实际问题。要知道我们每次上线应用的时候都不止一台服务器会运行实例,那上线就涉及到变更,只要变更就可能导致原本正常运行的程序出现异常,尤其是发生重大变动的时候,导致我们应用不稳定的因素就变得很多。

为了减少这种风险,我们一般会选择灰度发布我们的应用实例,比如我们可以先发布少量实例观察是否有异常,后续再根据观察的情况,选择发布更多实例还是回滚已经上线的实例。

登录 后留言

全部留言(23)

  • 最新
  • 精选
楼下小黑哥
我们是做支付系统,需要对接多个银行服务。我们内部将外部服务接口都抽象化一组接口,每次接入只要相应实现即可。每个银行服务,我们会定义一个唯一ID。服务暴露的时候,利用 dubbo group 配置,将group设置为该id,个性化导出。 在银行服务前面有一个路由系统,这个系统会根据上游系统指定id,通过 dubbo 提供 api 调用,调用相应 group 的银行服务。 嘿嘿,这应该也是一种利用服务版本路由策略。

作者回复: 用的很好👍

2020-03-11
2
43
noname
路由本质是节点分组、隔离流量,因此不论打标签还是分流等特性都天然适合在路由策略里做。 这里分享一个小经验案例:虽然在调用方(上游)做路由策略选择可用的提供方(下游)集群,是天然符合RPC调用机制的,但是在团队协作上却是反人性的。想一想,当你作为下游服务方,你希望链路中扩展某种路由特性(原生不支持),这时候你需要和你的上游协商并且需要对方优先你或与你同时上线,一般来说对方都是不情愿的,因为对对方而言不仅没有收益还要面临配合你升级带来的风险。因此遇到这种情况时(你作为下游业务方),最好能有全局视角的人来推动不同团队服务的路由策略同时升级,或者能初期设计考虑周全,后期扩展时业务不需要更新部署(例如Dubbo的条件路由、脚本路由等都是可以从第三方写注册中心更新路由策略而无需业务变更)。 扩展新的路由策略不难,新的路由策略上线比较难😂

作者回复: 是的,路由策略最好要抽象成配置信息,可以动态下发

2020-03-12
3
29
Hector
越到后面越像k8s的服务治理了,基于etcd的服务发现,pod的状态管理与探活,service的负载功能。原来好多东西都是相通的

作者回复: 好的设计都是要互相借鉴

2020-03-11
3
15
坡岛码畜
我们的应用场景:在多个feature同时开发的时候 可以用路由策略在test环境对某一个服务发布多个版本 在配置中心配置路由规则把来自某一个调用方的请求路由到某一个特定版本的服务上去

作者回复: 隔离环境👍

2020-03-11
9
问心
老师,IP级限制是好理解的,而路由应该是在rpc中相对底层的模块,而在做处理路由策略的时候,还需要应用层的数据,这样的处理感觉不是特别的合理。

作者回复: 规则交给使用者

2020-04-29
2
6
Jackey
思考题还真想不出来别的了😅期待评论区大佬出现

作者回复: 并行开发的时候,隔离出不同联调环境

2020-03-11
2
6
有米
我认为有一种变更是不能做灰度的,比如修改计费逻辑,不可能说不同的用户不同的计费规则,肯定是一视同仁的。所以必须全部节点同时发布

作者回复: 可以不能适应所有场景

2020-05-04
3
安排
路由策略怎么和后面的负载均衡连接起来的呢?有形象一点的结构图吗?每个服务集群前面是不是只有一台或一组实现负载均衡的设备?负载均衡设备是怎么区别对待同一个集群里面的新应用和旧应用的呢?

作者回复: 一般是先通过路由筛选,再进行路由选择

2020-03-11
2
2
hello
这篇文章给我做灰度有了新的思路,多谢老师!

作者回复: 欢迎交流👏

2020-03-11
1
密码123456
这篇理论太强了,感觉实现起来会很难。有参考的开源框架实现吗?

作者回复: 有,后面讲节里面会提到

2020-05-12
收起评论