当我们使用某些功能的时候,有时候不一定会成功,那么我们将采取什么样的策略处理这种异常情况呢,下面我们通过例子说明
如上图所示,app2通过网络调用app1接口,app1是是由三台机器共同组成的集群
failfast快速故障
当系统发生错误,立即反馈错误
eg1:当app2携带错误Token访问app1接口时,app1立即反馈错误信息
failsafe故障安全
当系统发生错误,将故障在不会造成影响或尽量减少影响
eg1:当app2调用接口查询app1某些接口时,如查询IPhone 10终端手机的颜色,app1内部发生了异常,此时不反馈错误信息,而是返回“未知”
信息。对于app2来说,并不会感知接口调用发生异常,会按照正常情况继续处理
failover故障切换
当系统发生错误,我们再对其他系统进行尝试
eg1:当app2调用接口查询app1某些接口时,首先调用接口的app1(192.168.1.100),若失败,我们再尝试app1(192.168.1.101)、app1(192.168.1.102);系统处理一个高可用状态,停止其中任意一台应用,系统也可以正常运行
failback故障自动恢复
当系统发生错误,应用程序对故障进行自我修复处理;如何理解这个自我修复过程
- 网络抖动问题,有时候网络可能会出现故障,导致程序调用出现一些异常,程序收到异常以后,可以等一下再重试调用接口,等多久以及尝试多少次,怎么控制就是一个自我修复的手段
- 流量降级问题,当网络出现访问量急剧增大时候,我们的系统资源不够用,我们可以直接反馈用户等下试试
eg1:当app2调用接口查询app1某些接口时发生错误,剩下间隔30s再重试,重试不超过3次
以上即是容错机制错误的几种处理方式
dubbo容错方案
Failover Cluster
失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries=“2” 来设置重试次数(不含第一次)。
Failfast Cluster
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。