前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容错处理

容错处理

作者头像
一个架构师
发布2022-06-27 15:23:52
5000
发布2022-06-27 15:23:52
举报
文章被收录于专栏:从码农的全世界路过

常见的容错机制一般有四种:fail-fast, fail-safe, fail-over, fail-back.

代码语言:javascript
复制
1.fail-fast 快速失败

fail-fast即为快速失败机制是Java集合中的一种保护机制, 是集合中在内部维护了一个字段:modCount, 用来记录这个集合增删, 替换元素, 排序等操作修改的次数, 在遍历过程中remove(),add()等方法会对这个字段值进行校验, 校验失败后会抛出异常ConcurrentModificationException.

代码语言:javascript
复制
@Test
public void testFailFast() {
  Listlist =new ArrayList<>();
  for (int i = 0; i < 10; i++) {
    list.add(i);
  }
  Iteratoriterator = list.iterator();
  while (iterator.hasNext()) {
    Integer i = iterator.next();
    list.remove(i);
  }
}
代码语言:javascript
复制
2.fail-safe 失败保护

fail-safe机制实现很简单, 就是将原来的集合copy一份, 复制一份快照, 然后基于新复制的快照集合进行遍历; CopyOnWriteArrayList是通过COWIterator遍历的, 通过源码也可以看出COWIterator持有对象的一份快照.

代码语言:javascript
复制
@Test
public void testFailSafe2() {
  Listlist =new CopyOnWriteArrayList<>();
  for (int i = 0; i < 10; i++) {
    list.add(i);
  }
  Iteratoriterator = list.iterator();
  while (iterator.hasNext()) {
    Integer i = iterator.next();
    list.remove(i);
  }
}
代码语言:javascript
复制
3.fail-over 失效转移

fail-over是一种备份操作模式,当主要组件或服务异常时,自动转移到备份组件或服务.

例如: mysql的双主集群; redis的哨兵或集群模式下的主从切换; keepalived下的双机热备, zookeeper集群.

4.fail-back 失效自动恢复

fail-back是组件或服务失效之后的自动恢复, 一般恢复过程中, 都依赖第三方或调用端的检测机制, 定时检测失效服务状态, 并在检测到服务正常后, 重新加入到原有集群中.

例如: mysql的双主集群是另一节点; redis的哨兵集群自然是依赖哨兵节点; redis集群模式下的检测是依靠集群中的其他节点投票决定; keepalived下的双机热备也是依赖keepalived本身的定期检查; Hystrix的fallback处理.

5.总结

通过上面的分析可以发现:

fail-fast和fail-safe是针对数据访问时做的安全检查;

而fail-over和fail-back是针对组件和服务出故障的时候, 保证组件和服务的稳定.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从码农的全世界路过 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档