常见的六种容错机制:Fail-Over、Fail-Fast、Fail-Back、Fail-Safe,Forking 和 Broadcast
1、Fail-Over:故障转移
Fail-Over 意思是“故障转移,失败自动切换”,是一种备份操作模式。
它的主要思路是:主要组件出现异常时,将其功能转移到具有同样功能的备份组件上。
要点在于有主有备,且主发生故障时,可将备切换为主。比如 HDFS 的双 NameNode,当 Active NameNode 出现故障时,可以启用 Standby NameNode 来继续提供服务。
【最佳实践】
通常用于读操作;
不足:重试会带来更长的延迟。
2、Fail-Fast:快速失败
快速识别,就是只发起一次调用,失败后立即报错。
这用来尽可能早地发现系统中的错误,使系统能够按照事先设定好的错误流程执行,也就是“fault-tolerant(错误容忍)”。
以 Java 集合(Collection)的快速失败为例,当多个线程同时操作同一个集合中的元素时,就可能发生 Fail-Fast 事件。
再具体点:当线程 A 通过迭代器遍历某集合的时候,其他线程刚好修改了该集合中的元素,这时线程 A 还在访问此集合,就会抛出 ConcurrentModificationException 异常,产生 Fail-Fast 事件。
这里的并发修改异常,就是 发现错误时执行设定好的错误。
【最佳实践】
通常用于非幂等性的写操作;
不足:如果有服务正在重启,可能会出现调用失败。
3、Fail-Back:失效自动恢复
Fail-Back,就是在故障转移(Fail-Over)之后,发生故障的服务/机器 能够自动恢复。
比如:在后台记录失败请求,定时重发;
又如:在多台服务器互联的网络中,如果要维修某台服务器,需要把服务(或网络资源)暂时重定向到备用系统。
维修结束后,再将服务(或网络资源)恢复为 由原来维修的主机提供 的过程,称为自动恢复。
【最佳实践】
通常用于消息通知操作;
不足:不可靠,重启会丢失;
可用于生产环境注册(Registry)。
4、Fail-Safe:失效安全
出现异常时,直接忽略。可以认为,即使发生了故障,也不会对系统/服务造成伤害,或尽量减少伤害。
比如:红绿灯 - Traffic light 中,对红绿灯的“冲突监测”的示例:
如果冲突监控器检测到错误或冲突的信号时,交通信号灯将进入闪烁模式。
该信号可能会向主要道路显示呈琥珀色闪烁,向人行道路呈红色闪烁,或在所有方向上呈红色闪烁,也可以在交通不畅的白天使用闪光操作 —— 而不是全部显示为绿灯。
【最佳实践】
通常用于写入审计日志等操作;
可用于生产环境的监控(Monitor)。
5、Forking:并行调用多个服务
并行调用多个服务,只要一个成功即返回成功的结果。
比如:Dubbo 的 Forking 集群模式,需要设置最大并行数。
【最佳实践】
通常用于实时性要求较高的读操作;
不足:会浪费更多服务资源。
6、Broadcast:广播调用
广播调用所有服务,逐个调用,任意一个服务出错,则此次调用失败。
比如:Dubbo 的 Broadcast 集群模式。
【最佳实践】
通常用于更新提供方的本地状态;
不足:速度慢,任意一个服务出错将导致整个调用失败。
参考资料
版权声明
感谢阅读,公众号 「瘦风的南墙」 ,手机端阅读更佳,还有其他福利和心得输出,欢迎扫码关注
本文系转载,并在原文的基础上做了一定的补充和修改。如有侵权,请原作者联系博主,定当立即删除。
常见的六种容错机制:Fail-Over、Fail-Fast、Fail-Back、Fail-Safe,Forking 和 Broadcast的更多相关文章
- Dubbo服务集群,常见容错机制:failover ,failsafe,failfase ,failback,forking
http://blog.csdn.net/hongweigg/article/details/52925920 http://m.blog.csdn.net/article/details?id=51 ...
- Dubbo学习源码总结系列四--集群容错机制
Dubbo提供了哪些集群容错机制?如何实现的? 提供了六种集群容错机制,包括Failover(失败自动切换,尝试其他服务器).Failfast(失败立即抛出异常).Failsafe(失 ...
- Storm学习笔记 - 消息容错机制
Storm学习笔记 - 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spo ...
- Storm消息容错机制(ack-fail机制)
storm消息容错机制(ack-fail) 1.介绍 在storm中,可靠的信息处理机制是从spout开始的. 一个提供了可靠的处理机制的spout需要记录他发射出去的tuple,当下游bolt处理t ...
- nginx upstream 容错机制
熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一.nginx的upstream容错 1)nginx 判断节点失效 ...
- [源码解析] 并行分布式框架 Celery 之 容错机制
[源码解析] 并行分布式框架 Celery 之 容错机制 目录 [源码解析] 并行分布式框架 Celery 之 容错机制 0x00 摘要 0x01 概述 1.1 错误种类 1.2 失败维度 1.3 应 ...
- 总结Flink状态管理和容错机制
本文来自8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发. 本文主要内容如 ...
- JavaScript 常见的六种继承方式
JavaScript 常见的六种继承方式 前言 面向对象编程很重要的一个方面,就是对象的继承.A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. 大部分 ...
- Flink状态管理和容错机制介绍
本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...
随机推荐
- Java中的自增自减
情况①: for (int i = 0; i < 100; i++) { j = 1 + j++; } System.out.println(j); 结果是 0 !! 这是由于在进行后自增/自减 ...
- Lua控制语句
目录 1. 控制结构 if-else 单个 if 分支 型 两个分支: if-else 型 多个分支: if-elseif-else型 2. while 型控制结构 3. repeat控制结构 4. ...
- c++中的继承关系
1 什么是继承 面向对象的继承关系指类之间的父子关系.用类图表示如下: 2 为什么要有继承?/ 继承的意义? 因为继承是面向对象中代码复用的一种手段.通过继承,可以获取父类的所有功能,也可以在子类中重 ...
- 5000字2021最新Python基础知识第一阶段:数据类型
1 编程规范 注释 python注释也有自己的规范,在文章中会介绍到.注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的 ...
- Java基础00-常用API24
1. Math Math 1.1 Math类概述 1.2 Math类的常用方法 返回绝对值:是正数是时候直接返回参数本身,是负值的时候返回的是参数的相反数.参数是10时返回的是10,参数是-10的时候 ...
- Docker搭建Redis5.0并挂载数据
记录 Docker 搭建 Redis5.0 并挂载数据过程,搭建参考自 Docker Hub 系列文章欢迎访问:https://www.itwxe.com/posts/9e76db89/ 一.简单挂载 ...
- 小师妹学IO系列文章集合-附PDF下载
目录 第一章 IO的本质 IO的本质 DMA和虚拟地址空间 IO的分类 IO和NIO的区别 总结 第二章 try with和它的底层原理 简介 IO关闭的问题 使用try with resource ...
- 极致简洁的微前端框架-京东MicroApp开源了
前言 MicroApp是一款基于类WebComponent进行渲染的微前端框架,不同于目前流行的开源框架,它从组件化的思维实现微前端,旨在降低上手难度.提升工作效率.它是目前市面上接入微前端成本最低的 ...
- 开发工具IDE从入门到爱不释手(六)常用插件Git
Git 环境准备 本地基本操作 本地文件关联git管理 文件提交git Ctrl+K:提交 关联远程仓库 先注册github账号 连接本地 git菜单 撤销提交 追加提交 Code Review
- 如何在 NetCore 中定义我们自己的JSON配置文件的管理器。
一.介绍 微软已经对外提供了新的平台,我们叫它们是 Net Core 平台,这个平台和 Net Framework 平台有本质的区别,这个最本质的区别就是微软的C#代码可以跨平台了.当前我们主流的3大 ...