RPC 实战与核心原理
何小锋
京东云混合云首席架构师
40244 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
RPC 实战与核心原理
15
15
1.0x
00:00/00:00
登录|注册

10 | 路由策略:怎么让请求按照设定的规则发到不同的节点上?

灰度发布功能
降低事故发生概率
服务治理
细粒度路由
路由策略
灰度发布
服务发现
风险减少
服务提供方集群
课后思考
总结
参数路由
如何实现路由策略?
为什么选择路由策略?
路由策略

该思维导图由 AI 生成,仅供参考

你好,我是何小锋。上一讲我们介绍了健康检测在 RPC 中的作用,简单来讲就是帮助调用方应用来管理所有服务提供方的连接,并动态维护每个连接的状态,方便服务调用方在每次发起请求的时候都可以拿到一个可用的连接。回顾完上一讲的重点,我们就切入今天的主题——RPC 中的路由策略。

为什么选择路由策略?

在前面我们提到过,在真实环境中我们的服务提供方是以一个集群的方式提供服务,这对于服务调用方来说,就是一个接口会有多个服务提供方同时提供服务,所以我们的 RPC 在每次发起请求的时候,都需要从多个服务提供方节点里面选择一个用于发请求的节点。
既然这些节点都可以用来完成这次请求,那么我们就可以简单地认为这些节点是同质的。这里的同质怎么理解呢?就是这次请求无论发送到集合中的哪个节点上,返回的结果都是一样的。
既然服务提供方是以集群的方式对外提供服务,那就要考虑一些实际问题。要知道我们每次上线应用的时候都不止一台服务器会运行实例,那上线就涉及到变更,只要变更就可能导致原本正常运行的程序出现异常,尤其是发生重大变动的时候,导致我们应用不稳定的因素就变得很多。
为了减少这种风险,我们一般会选择灰度发布我们的应用实例,比如我们可以先发布少量实例观察是否有异常,后续再根据观察的情况,选择发布更多实例还是回滚已经上线的实例。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

路由策略在RPC中的应用是为了让请求按照设定的规则发送到不同的节点上,以实现流量隔离的效果。在真实环境中,服务提供方以集群方式提供服务,因此RPC在每次发起请求时需要从多个服务提供方节点中选择一个用于发请求的节点。路由策略的选择是为了减少上线变更导致的风险,如灰度发布应用实例、定点调用等。文章介绍了IP路由策略和参数路由策略的实现方式,以及它们在灰度发布和流量切换中的应用。通过路由策略,服务提供方可以更灵活地管理和调用自己的流量,进一步降低上线可能导致的风险。总的来说,路由策略在RPC中的应用是为了实现服务治理,让请求按照设定的规则发送到目标节点上,从而实现流量隔离的效果。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《RPC 实战与核心原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(22)

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

    作者回复: 用的很好👍

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

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

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

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

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

    作者回复: 隔离环境👍

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

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

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

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

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

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

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

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

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

    作者回复: 欢迎交流👏

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

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

    2020-05-12
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部