首页 > 其他分享 >《RPC实战与核心原理》学习笔记Day9

《RPC实战与核心原理》学习笔记Day9

时间:2023-01-26 14:22:25浏览次数:40  
标签:调用 服务 请求 Day9 笔记 RPC 节点 路由

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

我们在真实的环境中,服务提供方是以集群的方式对外提供服务,这对于服务调用方来说,就是一个借口会有多个服务提供方同时提供服务,所以RCP在每次发起请求的时候,都需要从多个服务提供方节点里面选择一个用于发送请求。

当服务在线上运行时,我们如果有变更,会涉及到如何升级,升级过程中可能会影响服务接口,这样会导致系统变的不稳定,甚至系统崩溃,为了减少这种风向,我们一般会选择灰度发布的方式来升级我们的服务实例,例如我们可以发布少量实例来观察是否有异常,然后根据观察的结果,来决定是发布更多实例还是回滚到旧版本。

虽然我们的服务在上线前会有测试的过程,但是因为线上环境太复杂了,测试只能是降低出现风险的概率,想要彻底验证所有场景是不可能的。

我们可以考虑在上线完成后,先让一小部分调用方请求过来进行逻辑验证,待没有问题后再接入其他调用方,从而实现流量隔离的效果。

因为注册中心会维护所有服务提供方的信息,所以我们可以在注册中心中来做流量隔离吗?一般不采用这种方式,注册中心在RPC中的定位是用来存储数据并保证数据一致性,如果把复杂的请求隔离的计算逻辑放到注册中心里面,那么当集群节点变多时,会导致注册中心压力过大,而且大部分时候,我们采用开源软件来打架注册中心,要加入其他计算逻辑的话,还需要进行二次开发,所以从实际的角度出发,在注册中心中实现请求隔离是不划算的。

调用法发起RPC调用的整个流程中,在RPC发起真实请求的时候,有一个步骤就是从服务提供方节点集合里面选择一个合适的节点(也就是负载均衡),那么我们可以考虑在这个节点之前,加入一个“筛选逻辑”,把符合我们要求的节点筛选出来。

这个“筛选过程”,我们称之为“路由策略”。

我们可以设计不同的分路由策略:

  • IP路由,根据服务调用方的IP地址,来决定哪些服务提供方的实例可以处理相关请求。
  • 参数路由,根据服务调用方发送请求中的参数值,来决定哪些服务提供方的实例可以处理相关请求。

参数路由是比IP路由更灵活、粒度更细的路由规则,它为服务提供方应用提供了另外一个服务治理的手段。

灰度发布功能是RPC路由功能的一个典型应用场景,通过RPC的路由策略的组合使用可以让服务提供方更加灵活的管理、调用自己的流量,进一步降低可能导致的风险。

在RPC里面,不论是哪种路由策略,其核心思想是一样的,就是让请求按照我们设定的规则发送到目标节点上,从而实现流量隔离的效果。

标签:调用,服务,请求,Day9,笔记,RPC,节点,路由
From: https://www.cnblogs.com/wing011203/p/17067808.html

相关文章

  • JavaScript学习笔记—Date
    在JS中所有的和时间相关的数据都由Date对象来表示对象的方法(1)getFullYear()返回当前日期的年份(4位)(2)getMonth()返回当前日期的月份(0-11)(3)getDate()返回当前日期的几......
  • JavaScript学习笔记—Math
    工具类为我们提供了数学运算相关的一些常量和方法常量(1)Math.PI圆周率方法(1)Math.abs()求一个数的绝对值(2)Math.min()求多个值中的最小值(3)Math.max()求多个值中的......
  • 【模型检测学习笔记】1、系统分析相关基本概念
    验证方法模拟:动态验证,常用,如今最主流的验证方法。仿真:类似模拟,但依赖于硬件。形式化验证:静态验证,用数学方法对模型的功能、功能、规范做检验。验证的完备性高,但实施困难。......
  • 【个人笔记】2023年搭建基于webpack5与typescript的react项目
    写在前面由于我在另外的一些文章所讨论或分析的内容可能基于一个已经初始化好的项目,为了避免每一个文章都重复的描述如何搭建项目,我在本文会统一记录下来,今后相关的文章直......
  • 读Java8函数式编程笔记01_Lambda表达式
    1. Java8函数式编程1.1. 没有单子1.2. 没有语言层面的惰性求值1.3. 没有为不可变性提供额外支持1.4. 集合类可以拥有一些额外的方法:default方法2. 现实世界中......
  • 《RPC实战与核心原理》学习笔记Day8
    09|健康检测:这个节点挂了,为啥还要疯狂发请求?服务调用方在每次调用服务提供方的服务时,RPC框架会根据路由和负载均衡算法选择一个具体的IP地址,为了保证请求成功,我们需要确......
  • 【笔记】gitlab+openldap使用memberof筛选登录用户
    这几天在搞kerberos+nfs4没搞成之前搞了个openldap实现了分散控制集中管理(不是DCS...)gitlab和nexus也支持ldap虽然都不咋好用但是在搞gitlab的时候发现memberOf这个玩......
  • JavaScript学习笔记—Map
    Map用来存储键值对结构的数据(key-value)Map中任何类型的值都可以成为数据的key1.创建:newMap()2.属性和方法:(1)map.size()获取map中键值对的数量(2)map.set(key,val......
  • JavaScript学习笔记—使用JSON进行深复制
    constobj={name:"孙悟空",friend:{name:"猪八戒"}};//对obj进行浅复制constobj2=Object.assign({},obj);//对obj进行深复制constobj3=s......
  • JavaScript学习笔记—对象的序列化
    JS中的对象使用时都是存在于计算机的内存中序列化指将对象转换为一个可以存储的格式,在JS中对象的序列化通常是将一个对象转换为字符串(JSON字符串)序列化的用途,对象转换为......