ray-note/极客时间学习/Java 实战训练营/分布式服务/分布式服务容错.md

2.3 KiB
Raw Blame History

服务容错的基本概念

服务访问失败的原因

  • 分布式固有特性 网络问题导致的间歇性的失败
  • 服务自身失败 服务bug修改
  • 服务依赖失败 (会导致服务链路失败,雪崩效应)

服务雪崩效应

  • 服务A
    • 服务B
      • 服务C
      • 服务D
      • 服务E
  • 上面提到的服务逐层依赖当服务A不可用之后服务B会不断重试会导致自身资源耗尽最后服务B也不可用后面依赖服务B的那些服务也一样这样会导致大量服务不可用即雪崩效应。
  • 解决办法,出现问题的服务,直接从集群中踢掉,避免雪崩的出现

服务失败的解决思路

  • 超时
    • 如果服务未能在这个时间内响应,将回复一个失败消息
  • 重试
    • 为了降低网络瞬态异常所造成的网络通信问题,可以使用重试机制

容错思想

  • 集群容错
    • 集群的建立已经满足冗余条件,而围绕如何进行重试就产生了集中常见的集群容错策略
    • 集群容错
  • 服务降级
    • 对服务进行分级管理,必要时,关闭对不重要服务的访问入口,节省资源用于处理重要服务的请求
    • 本地伪装和存根

Dubbo集群容错

负载均衡基本概念

  • 负载均衡的路由问题
    • 分布式服务,在访问一个集群时,具体访问哪一个,的决策 --> 路由
  • 负载均衡机制:
    • Random随机
    • RoundRobin轮询
    • LeastActive: 最少活跃调用数
    • ConsistentHash: 一致性Hash

容错机制

  • Failover -- 失败转移;一个服务实例不可用,立即访问另一个服务实例,作为重试,会设置重试次数
  • Failfast -- 直接抛异常,结束
  • Failsafe -- 记录错误日志,退出,等查看日志,解决问题
  • Failback -- 定时重试
  • Forking --
  • Broascast

Dubbo容错策略使用方法

  • cluster 配置项: 代表集群容错机制,可任选一种
  • retries配置项 重试次数,当调用发生失败时重新发起请求的次数

服务降级

  • 本地伪装
    • 当某个服务提供者全部失效后客户端不抛出异常而是通过Mock数据返回失败
    • Mock类在服务消费者端配置
  • 本地存根
    • 服务的提供方也有在本地执行部分逻辑的场景 (例如原先校验参数,从而间接实现服务容错)
    • Stub类在服务提供者端配置