2.3 KiB
2.3 KiB
服务容错的基本概念
服务访问失败的原因
- 分布式固有特性 网络问题导致的间歇性的失败
- 服务自身失败 服务bug,修改
- 服务依赖失败 (会导致服务链路失败,雪崩效应)
服务雪崩效应
- 服务A
- 服务B
- 服务C
- 服务D
- 服务E
- 服务B
- 上面提到的服务逐层依赖,当服务A不可用之后,服务B会不断重试,会导致自身资源耗尽,最后服务B也不可用;后面依赖服务B的那些服务也一样,这样会导致大量服务不可用,即雪崩效应。
- 解决办法,出现问题的服务,直接从集群中踢掉,避免雪崩的出现
服务失败的解决思路
- 超时
- 如果服务未能在这个时间内响应,将回复一个失败消息
- 重试
- 为了降低网络瞬态异常所造成的网络通信问题,可以使用重试机制
容错思想
- 集群容错
- 集群的建立已经满足冗余条件,而围绕如何进行重试就产生了集中常见的集群容错策略
- 集群容错
- 服务降级
- 对服务进行分级管理,必要时,关闭对不重要服务的访问入口,节省资源用于处理重要服务的请求
- 本地伪装和存根
Dubbo集群容错
负载均衡基本概念
- 负载均衡的路由问题
- 分布式服务,在访问一个集群时,具体访问哪一个,的决策 --> 路由
- 负载均衡机制:
- Random:随机
- RoundRobin:轮询
- LeastActive: 最少活跃调用数
- ConsistentHash: 一致性Hash
容错机制
- Failover -- 失败转移;一个服务实例不可用,立即访问另一个服务实例,作为重试,会设置重试次数
- Failfast -- 直接抛异常,结束
- Failsafe -- 记录错误日志,退出,等查看日志,解决问题
- Failback -- 定时重试
- Forking --
- Broascast
Dubbo容错策略使用方法
- cluster 配置项: 代表集群容错机制,可任选一种
- retries配置项: 重试次数,当调用发生失败时重新发起请求的次数
服务降级
- 本地伪装
- 当某个服务提供者全部失效后,客户端不抛出异常,而是通过Mock数据返回失败
- Mock类在服务消费者端配置
- 本地存根
- 服务的提供方也有在本地执行部分逻辑的场景 (例如原先校验参数,从而间接实现服务容错)
- Stub类在服务提供者端配置