我是靠谱客的博主 活泼航空,这篇文章主要介绍常见容错机制:failfast、failsafe、failover、failback,现在分享给大家,希望可以做个参考。

failfast(快速故障)

描述:

  • 如果出现故障,则立即报错。
  • 通常用于非幂等性操作,如:下单操作,如果写入故障,则立即报错,不必重试。

示例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** * fail-fast: 快速故障 */ public Object failFast() { //保存订单 boolean result = MajorExternalService.saveOrder(); if (result) { return "success"; } else { //fail-fast throw new IllegalStateException("下单失败!"); } }

failsafe(故障安全)

描述:

  • 如果出现故障,则可以忽略,因为这种故障不会造成损失或损失在可接受范围内。
  • 通常用于辅助性操作,如:写入监控日志,如果写入故障,则忽略。

示例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** * fail-safe: 故障安全 */ public Object failSafe() { //写入日志 boolean result = MajorExternalService.saveLog(); if (result) { return "success"; } else { //fail-safe return "failed"; } }

failover(故障切换)

描述:

  • 如果出现故障,则重试备份操作模式。
  • 通常用于幂等性操作,如:MySql的双Master模式,如果主Master故障,则切换至从Master。
  • 重试通常会带来更多延时。

示例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/** * 默认情况下使用主要外部服务MajorExternalService */ private static boolean isMajorOK = true; /** * fail-over: 故障切换 */ public Object failOver() { //读取商品信息 Object goodsInfo; //默认情况下使用主要外部服务 if (isMajorOK) { try { goodsInfo = MajorExternalService.getGoodsInfo(); } catch (Exception e) { //fail-over: 调用主要外部服务发生故障,则切换为备用外部服务 isMajorOK = false; goodsInfo = MinorExternalService.getGoodsInfo(); } } else { // goodsInfo = MinorExternalService.getGoodsInfo(); } return goodsInfo; }

failback(故障恢复)

描述:

  • 故障切换之后,如果主要操作模式恢复,则自动从备份操作模式恢复主要操作模式。
  • 如:MySql的双Master模式,如果主Master故障,则failover至从Master;当主Master恢复之后,则自动切换至主Master。

示例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** * fail-back: 故障恢复 */ public void failBack() { //一直在监测主要外部服务的状态 while (true) { //通过某些方法得知主要外部服务已经恢复了 if (confirmMajorIsOk()) { //fail-back isMajorOK = true; break; } } }

最后

以上就是活泼航空最近收集整理的关于常见容错机制:failfast、failsafe、failover、failback的全部内容,更多相关常见容错机制内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部