## 服务容错的基本概念 ### 服务访问失败的原因 - 分布式固有特性 网络问题导致的间歇性的失败 - 服务自身失败 服务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类在服务提供者端配置