前言
上文介绍了SOFA-RPC 的几种调用方式,包括单向调用、同步调用、Future调用、回调,引入了泛化调用和过滤器。本文将对 SOFA-RPC 的高级功能,包括参数配置、自定义线程池、预热权重和自动故障剔除等。
正文
1. 参数配置
提供了方便的参数设置方式。这些参数目前可以分为两个部分。一部分是如端口,注册中心地址等配置,这类配置在 中。另一部分是如超时时间等配置,这类配置在 中。
XML 配置
调用超时时间
如下是设置超时时间的方式,单位为 ms ,如果调用超过了这个时间则会抛出异常。服务端和客户端都可以设置,以客户端的超时时间设置优先。默认客户端为 3000 ,目前对 bolt,rest,dubbo 生效。
获取地址等待时间
如下是设置获取地址等待时间,单位为ms。在启动时如果服务引用方等待超过了这个时间则不会再等待地址,会继续启动。客户端设置,默认为-1,表示会一直等待到地址为止。目前对 bolt,rest 生效。
建立连接超时时间
如下是设置建立连接超时时间,单位为 ms 。在建立连接时如果耗时超过了这个时间则会抛出异常。客户端设,默认为 5000。目前对 bolt,rest 生效。
权重
如下是设置权重。客户端在发起调用时,如果采用的算法是随机调用,则会根据该权重来进行随机。服务端设置,默认为 100。目前对 bolt 生效。
lazy 连接
默认情况下客户端在注册中心推送地址到客户端时,就立即建立好连接,这个过程通常是在第一次调用之前进行的。如果设置服务引用的属性 lazy 为 true,客户端在第一次调用时才和所要调用的远程地址建立连接。默认为 false。
如下设置 lazy 连接方式,将 lazy 属性设为 true。目前支持 bolt 和 dubbo 协议。
check 属性
默认情况下客户端在启动时,服务引用不要求存在可用的地址和连接。如果设置服务引用的属性 check 为 true,客户端在启动时,服务引用会检查是否存在对应的地址和连接,如果不存在会抛出异常。默认为 false。
如下设置 check 连接方式,将 check 属性设为 true。目前支持 bolt 和 dubbo 协议。
重试次数
重试次数,即在第一次调用失败后重试的最大次数,如果重试成功则不再继续重试。默认为 0。如下设置调用次数,利用 retries 属性指定重试次数。目前支持 bolt 和 dubbo 协议。
负载均衡
如下选择负载均衡的方式,利用 loadBalancer 属性指定调用时候使用的负载均衡策略,默认为 random。
目前支持 random,localPref,roundRobin,consistentHash,weightRoundRobin 五种负载均衡策略,具体可见 SOFARPC 负载均衡相关介绍。目前支持bolt协议。
方法级别配置
如下,sofa:method 元素是方法级别的配置。方法级别的配置优先级比服务级别的更高。name 属性指定了方法的名字。支持调用超时时间,调用方式,回调类的设置。方法级别的配置与服务级别的配置所生效的协议一样。
Properties 配置
2. 自定义线程池
SOFA-RPC 支持自定义业务线程池。可以为指定服务设置一个独立的业务线程池,和 SOFA-RPC 自身的业务线程池是隔离的,多个服务可以共用一个独立的线程池。目前支持 bolt 协议。
在 SOFA-Boot 环境中可以为一个服务设置一个自定义线程池,配置如下:
声明自定义线程池
如下声明一个自定义线程池, 必须为 ,这是 提供的类, 也必须声明以进行初始化。
为服务设置自定义线程池
如下通过 元素的 属性为该服务设置自定义线程池。 是上面自定义线程池的 。
3. 预热权重
SOFA-RPC 提供了预热权重功能让客户端机器能够根据服务端的相应权重进行流量的分发。目前支持 bolt 协议。
SOFA-Boot 中提供了一系列参数属性,对指定服务进行预热配置。客户端机器能够自动解析这些参数,并按权重进行流量分发。
warm-up-time: 服务的预热时间
warm-up-weight: 服务设置预热期间权重
weight: 服务设置预热完后的权重
上述配置中,该服务的预热期为10s,在预热期内权重为10,预热期结束后的正常权重为100。
如果该服务一共发布到A,B两个机器上。A机器正处于预热期内,使用上述配置;B已经完成预热,正常权重为200。那么客户端在调用的时候,此时流量分发的比重为10:200;A机器预热结束后,流量分发比重为100:200。
4. 自动故障剔除
自动故障剔除会自动监控 RPC 调用的情况,对故障节点进行权重降级,并在节点恢复健康时进行权重恢复。目前支持 bolt 协议。
在 SOFA-Boot 中,只需要将自动故障剔除的参数配置到 即可。只配置自己关心的参数,其余参数会取默认值。需要注意的是, 是该功能的全局开关,如果关闭则该功能不会运行,其他参数也都不生效。
自动故障剔除的配置参数意义
上述配置中,默认打开了自动故障剔除功能和降级开关。当节点出现故障时会被进行权重降级,在恢复时会被进行权重恢复。
每隔 20s 进行一次节点健康状态的度量,20s 内调用次数超过 30 次的节点才被作为计算数据。
如果单个节点的异常率超过了所有节点的平均异常率的 6 倍,则对该节点进行权重降级,降级的比率为 0.5。权重最小降级到 1。如果单个节点的异常率低于了平均异常率的 6 倍,则对该节点进行权重恢复,恢复的比率为1.2。单个服务最多降级 2 个 IP。
小结
本文介绍了 的高级功能,包括参数配置,自定义线程池,服务预热和自动降级与权重恢复等用法。对于 提供的基本功能,以及整合 的配置和用法就介绍完了。对此有了初步的认识后,有利于后续深入实现原理和剖析源码。
欢迎关注公众号: 零壹技术栈
本帐号将持续分享后端技术干货,包括虚拟机基础,多线程编程,高性能框架,异步、缓存和消息中间件,分布式和微服务,架构学习和进阶等学习资料和文章。
领取专属 10元无门槛券
私享最新 技术干货