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

视频资源获取失败

开篇词 | 别老想着怎么用好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 里面引入回放的原因也很简单,就是想通过线上流量来验证改造后应用的正确性,而线上流量相比手动维护 TestCase 的场景更丰富,所以用线上流量进行测试的覆盖率会更广。

回顾完上一讲的重点,我们就切入今天的主题,一起看看动态分组在 RPC 里面的应用。

[第 16 讲] 我们讲过,在调用方复杂的情况下,如果还是让所有调用方都调用同一个集群的话,很有可能会因为非核心业务的调用量突然增长,而让整个集群变得不可用了,进而让核心业务的调用方受到影响。为了避免这种情况发生,我们需要把整个大集群根据不同的调用方划分出不同的小集群来,从而实现调用方流量隔离的效果,进而保障业务之间不会互相影响。

分组后容量评估

通过人为分组的方式确实能帮服务提供方硬隔离调用方的流量,让不同的调用方拥有自己独享的集群,从而保障各个调用方之间互不影响。但这对于我们服务提供方来说,又带来了一个新的问题,就是我们该给调用方分配多大的集群才合适呢?

[第 16 讲] 我们也有聊到过这样的问题,就是该怎么划分集群的分组?当然,最理想的情况就是给每个调用方都分配一个独立的分组,但是如果在服务提供方的调用方相对比较多的情况下,对于服务提供方来说要维护这些关系还是比较困难的。因此实际在给集群划分分组的时候,我们一般会选择性地合并一些调用方到同一个分组里。这就需要我们服务提供方考虑该怎么合并,且合并哪些调用方?

登录 后留言

全部留言(17)

  • 最新
  • 精选
树洞老人
一楼哈哈,老师,是不是对非核心组也应该有个评估,感觉核心组的流量突增的话,非核心的流量肯定也会增加

作者回复: 非核心可以考虑直接降级

2020-04-10
13
Darren
试着根据目前的知识储备回答下问题:不管是服务调用方还是服务提供方,其实都是定时轮训或者长链接的形式与注册中心保持联系的,可以要求服务方提供一个修改分组的接口,当注册中心修改了,调用接口更新服务提供方,或者服务提供方本身就是要定时上报心跳的,上报心跳的时候,可以把分组名称带回去。

作者回复: 很接近了,只要请求头里面带上真实分组信息就好了

2020-04-10
3
10
Micheal
你好我有个疑问,一个系统有A,B,C三个服务。怎么计算这个系统的极限QPS?是三个接口的极限QPS加一起么?还有有其他的公式呢?希望老师解答下。

作者回复: 一般都是单个算

2020-04-29
2
华伦
服务提供方要实现请求方的分组标示验证,通过请求中携带分组标示进行验证的,是否可以考虑使用zk单据维护服务和分组的关系,提供方缓存该关系,监听该节点,有变化中从zk中获取变更后的分组标示进行请求验证

作者回复: 也是一种方案

2020-04-16
1
Jxin
如果分组名是一个数组而非str,命名检验是包含而不是等于。调用方优先调用0索引位的分组集群,在动态评估压力后,从1,2,3索引位依次追加集群,岂不美哉。

作者回复: 会加大服务提供方运维难度

2020-04-10
1
Trident
何老师,每个分组是不是都有不同的防火墙策略,这个动态分组的前提是所有的分组防火墙策略要一致才行?

作者回复: rpc用于内网,很少涉及到防火墙

2020-04-26
雨霖铃声声慢
课后思考: 可以提前计划预案,预先规划哪些集群是用于动态分组的,哪些服务需要动态扩容缩容,然后将这些服务都部署到这些集群上,这样只是没有使用到的服务只是消耗了写计算资源,不过影响到这个集群中使用的服务,比如有A,B,C三组服务部署在动态集群上,目前动态集群用于提供A服务,BC服务待命,当需要扩容B服务是,在注册中心修改集群提供B服务,这样请求B服务的请求发送到该集群上,因为B服务已经是可用状态,所以就可以无缝切换。

作者回复: 好像资源有的浪费

2020-04-10
ple
动态分组的图片没看懂, 改为B分组 然后还是画在A分组里? 调用方1和调用方2为什么都有C2?
2020-12-14
3
4
Geek_8c0618
实际情况 不同的集群会有不同的环境变量 这个怎么解决?
2021-05-07
1
2
服务提供方会验证调用方过来的分组名跟自身的是否一样? 可以在服务提供方进行分组名验证逻辑这一块做扩展,动态分组别名有一定的格式,验证逻辑这块识别后,可以认为是OK的,分组名不一定一模一样才能验证通过。
2020-05-17
2
收起评论