高可用实践之服务隔离(四)

隔离方案

对于服务隔离,常见的隔离方案有:

  1. 线程隔离:
    1. 在同一个进程里,可以区分不同的服务方法,对于核心的服务方法,用单独的线程池执行核心的服务方法,确保在特定线程池出现故障时,不会影响到其他线程池资源。
    2. 除此之外,可以有另外一个隔离纬度,如对特定服务方法的执行时间进行统计,对于执行时间长的服务方法,放在一个独立的慢线程池处理,其他放在默认线程池处理。
  2. 进程隔离/读写服务隔离:读服务流量大,和读服务进行隔离,用不同的进程部署,核心服务与非核心服务也可以进行隔离,避免相互影响。
  3. 分组隔离,对于一条完整的调用链路,对每一个链路节点划分出一个个分组,未划分的都归为默认分组。这样,特定分组的上游服务会调用特定分组的下游服务,不同分组的服务实现逻辑可能一致,但调用互不干扰,达到了调用链路的隔离,以便在不同的链路完成不同的需求,如全链路压测、beta测试,灰度测试等。
  4. 集群隔离。又或者出于安全或其他因素考虑,限制服务只能在同机房或同网域下访问。
  5. 资源隔离:如隔离核心服务和非核心服务在不同的网络带宽,避免非核心服务的带宽占用影响核心服务访问

对于除线程隔离外的其他隔离方案,笔者没有太多的实践经验,这里主要看看基于线程隔离和后续的分组隔离的相关实现。

线程隔离

在RPC服务中,可以根据服务方法的不同特性或调用情况,为特定的服务方法配置指定配置的线程池,如根据服务方法是否核心、读或写操作,方法执行快慢等特性,用不同线程池进行隔离。

参考Pigeon比较好的一个实践,是将服务方法和线程池配置的对应关系放到配置中心。在程序中监听配置变更,来为不同服务方法动态创建相关配置的线程池,来达到对线上服务流量的动态隔离。

具体配置示例如下:

  1. 配置特定参数的线程池:
    [ {
         
     "poolName" : "pool1",
     "corePoolSize" : 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值