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

60 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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