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

22 | 动态分组:超高效实现秒级扩缩容

何小锋 2020-04-10
你好,我是何小锋。上一讲我们介绍了在 RPC 里面怎么支持流量回放,应用在引入 RPC 后,所有的请求都会被 RPC 接管,而我们在 RPC 里面引入回放的原因也很简单,就是想通过线上流量来验证改造后应用的正确性,而线上流量相比手动维护 TestCase 的场景更丰富,所以用线上流量进行测试的覆盖率会更广。
回顾完上一讲的重点,我们就切入今天的主题,一起看看动态分组在 RPC 里面的应用。
[第 16 讲] 我们讲过,在调用方复杂的情况下,如果还是让所有调用方都调用同一个集群的话,很有可能会因为非核心业务的调用量突然增长,而让整个集群变得不可用了,进而让核心业务的调用方受到影响。为了避免这种情况发生,我们需要把整个大集群根据不同的调用方划分出不同的小集群来,从而实现调用方流量隔离的效果,进而保障业务之间不会互相影响。

分组后容量评估

通过人为分组的方式确实能帮服务提供方硬隔离调用方的流量,让不同的调用方拥有自己独享的集群,从而保障各个调用方之间互不影响。但这对于我们服务提供方来说,又带来了一个新的问题,就是我们该给调用方分配多大的集群才合适呢?
[第 16 讲] 我们也有聊到过这样的问题,就是该怎么划分集群的分组?当然,最理想的情况就是给每个调用方都分配一个独立的分组,但是如果在服务提供方的调用方相对比较多的情况下,对于服务提供方来说要维护这些关系还是比较困难的。因此实际在给集群划分分组的时候,我们一般会选择性地合并一些调用方到同一个分组里。这就需要我们服务提供方考虑该怎么合并,且合并哪些调用方?
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《RPC实战与核心原理》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(9)

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

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

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

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

    2020-04-10
    2
    2
  • 服务提供方会验证调用方过来的分组名跟自身的是否一样?
    可以在服务提供方进行分组名验证逻辑这一块做扩展,动态分组别名有一定的格式,验证逻辑这块识别后,可以认为是OK的,分组名不一定一模一样才能验证通过。
    2020-05-17
    1
  • Jxin
    如果分组名是一个数组而非str,命名检验是包含而不是等于。调用方优先调用0索引位的分组集群,在动态评估压力后,从1,2,3索引位依次追加集群,岂不美哉。

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

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

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

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

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

    2020-04-26
  • 嘻嘻
    分组这个事可以直接在注册中心设置调配,不用跟实际绑定
    2020-04-25
  • 花轮君
    服务提供方要实现请求方的分组标示验证,通过请求中携带分组标示进行验证的,是否可以考虑使用zk单据维护服务和分组的关系,提供方缓存该关系,监听该节点,有变化中从zk中获取变更后的分组标示进行请求验证

    作者回复: 也是一种方案

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

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

    2020-04-10
收起评论
9
返回
顶部