`
cfyme
  • 浏览: 273576 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

failover机制的学习

 
阅读更多

转载学习地址:http://www.cnblogs.com/Creator/p/3189758.html

 

对于一个7*24小时无间断的线上服务来说,在服役时间内难免会遇到一些fail,例如db断开连接且短暂连接不上了, 下游的某个节点忽然挂了,运维部署上依赖的某一个东西不存在了等等场景。本文主要来讨论一下这些场景使用怎样的策略会比较好。

  最简单的方法,While(true) + sleep(固定时间)  不断的重试,直到成功为止。这个方法的优点就是简单,可依赖。缺点就是对于感知延迟要求比较严格的程序,会消耗大量的CPU,甚至因为一些不合理的逻辑导致CPU满载等等情况发生.这种简单粗暴的方法应用广泛,并且能解决实际问题,在很多场合还是非常可取. 我们暂且叫这种策略为粗暴法.

  我曾经在一个实时文件抓取程序中(类似于scribe这样的实时日志传输方案),使用了这样的策略,当fstat源文件发现文件不存在的时候,我会重试1000次,每次间隔sleep 10ms, 其间程序会输出很多warnning信息来支持一些报警等,重试完1000次之后(10s之后),将sleep间隔设置为固定时间,例如1s,在降低程序对CPU的消耗的同时,保证了一定的实时性,源文件无论什么时候出现都能够确保在1s内cover进来,而且这样的策略对于日志切分场景也非常实用,普通的日志切分(如切分nginx为每小时一个文件,crontab每小时mv access.log access.log.$date再 kill -USR1等)程序能够立马感知到并作出相应的策略调整。我们暂且叫这种策略为”重试N次后,将间隔时间调整为最大的可接受值”.

  再看看另外一种方法,最近看了下facebook scribe的源码(感兴趣的自己google,大家可以姑且的认为是一个多下游的日志转发工具),他在下游死掉了之后选择对sleep时间循序渐进的策略,每次将retryInterval *1.414; (sqrt(2)),再加上一个范围随机数(如1-100ms),同时来设定了一个最大值的方式来相对动态的判断下游状态. 为什么一定要设置最大值呢?因为这个策略在异常时间久了之后,滞后性会非常大,当一场恢复时,可能不能及时感知,所以需要一个最大值做保证。我们暂且叫这种策略为“重试时间循序渐进, 且确保不大于最大可接受值“.

  近两年来使用zookeeper(以下简称zk)的公司越来越多,很多公司都用zk来做大型分布式系统的协调,他的模式类似于:下游通过在zk上注册一个临时节点,告诉大家,我活着呢, 上游通过watch这个节点的变化来感知下游的变化。模式很简单,但是大家都是用zk是因为他提供了很多额外的东西,例如下游注册的临时节点在下游宕机,或者网络不可达(反正就是挂了)等等情况下会自动清除,并且通过回调函数实时让上游程序感知,作出相应变化,当下游活了之后,又注册一个临时节点宣称自己活了,上游程序也能通过回调函数实时感知。上游程序依赖zookeeper的一个Lib库。对于上游程序来说,他是一个观察者,套进设计模式就是观察者模式,好莱坞有句名言. “不要给我打电话, 我会给你打电话”.我们暂且叫这种策略为被动实时感知下游变化

  

分享到:
评论

相关推荐

    Apress,.Pro.SQL.Server.2008.Failover.Clustering.(2009),.1Ed.[1430219661]

    这涵盖了群集节点、共享存储、网络配置以及群集服务的运行机制。理解这些基础概念对于构建稳定的群集环境至关重要。 其次,读者将学习如何规划和设计故障转移群集,包括硬件选择、网络布局、存储架构和系统容量规划...

    redis 安装 主从配置 选举

    ### Redis安装、主从配置与选举机制详解 #### 一、Redis安装步骤 在开始之前,我们先了解Redis的基本安装过程。以下是在Linux环境下的安装步骤: 1. **下载源码包**:...希望本文能为您的Redis学习之旅提供帮助。

    Dubbo学习资料.zip

    - Failfast、Failsafe、Failover、Failback、ForcedRoute等容错策略,应对服务不可用情况。 7. **服务治理**: - 服务版本管理:通过版本号区分不同版本的服务,便于灰度发布和回滚。 - 服务路由:根据条件对...

    dubbo学习视频教程

    同时,还需要了解Dubbo的容错机制,如Failfast、Failsafe、Failover、Fallback等,以及它们在不同场景下的适用性。 故障转移和熔断也是学习的重点,Dubbo提供的Hystrix等组件可以实现服务间的熔断保护,防止因某个...

    dubbo学习例题代码资源

    - **容错机制**: 支持多种容错策略,如Failover(重试)、Failfast(快速失败)等。 - **负载均衡**:Dubbo内置多种负载均衡策略,如Random、RoundRobin等,确保服务请求的均匀分布。 4. **云原生特性**: - **...

    大规模机器学习在蚂蚁+阿里的应用

    协调器节点负责流程控制和故障转移(failover),服务器节点则用来存储和管理参数分片,工作节点则处理实际的数据分片,并实现算法计算如梯度更新等。 阿里巴巴集团和蚂蚁金服所使用的参数服务器框架特别强调了容错...

    大规模机器学习在蚂蚁+阿里的应用——周俊.pdf

    - **容错机制(Failover)**:系统必须具备强大的容错能力,确保即使部分组件出现故障,整体服务仍然能够持续运行。 - **模型可扩展性(Model Scalability)**:为了适应不断增长的数据量和复杂度,模型需要能够轻松...

    dubbo入门学习框架源码

    4. 容错机制:包括Failover、Failfast、Failsafe、Fallback等多种策略,应对服务不可用的情况。 四、Dubbo源码解析 1. 远程调用(RPC):Dubbo的Remoting层处理服务间的网络通信,包括协议解析、序列化、连接管理...

    个人学习DataGuard 心得

    首先,DataGuard的核心在于创建一个主数据库和一个或多个备用数据库,它们之间通过Redo Apply或Fast Start Failover等机制保持同步。主数据库执行事务处理,而备用数据库则接收并应用主数据库产生的redo日志,以保持...

    Dubbo学习专题.pdf

    【Dubbo学习专题】 Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心功能:服务治理、远程调用、集群容错。本篇将详细讲解Dubbo的一些关键知识点。 1. **Zookeeper作为注册中心** 当Dubbo使用...

    activemq学习心得.docx

    系统使用量是activemq中用于控制消息生产者流控的机制。activemq 5.3.2版本中,系统使用量的配置如下: ```xml ``` 这段代码配置了activemq的系统使用量,包括内存使用量、存储使用量和临时存储使用量三...

    dubbo学习视频

    - **集群容错**:提供多种集群容错策略,如Failover、Failfast等。 - **负载均衡**:内置多种负载均衡算法,可根据场景选择合适的方式。 #### 2. **服务路由** - **条件路由**:根据条件进行服务调用的路由,提高...

    dobbo基础学习文档

    - **软负载均衡及容错机制**:Dobbo内置了多种负载均衡策略和容错机制,如Failover、Failfast等,可以在服务出现故障时进行快速恢复,提高系统的整体稳定性。 - **服务自动注册与发现**:通过注册中心来动态管理服务...

    dubbo介绍与搭建学习hahaha

    Dubbo提供了多种容错机制,例如:Failover重试、Failfast快速失败、Failsafe静默失败、Fallback降级处理等。这些机制确保了在服务异常时,系统能够以预设的方式进行恢复或避免错误的传播。 6. **服务监控** Dubbo...

    dubbo学习笔记

    2. **集群容错**:Dubbo提供了多种集群策略,如Failover、Failfast、Failsafe、Fallback、Loadbalance等,以应对服务提供者不可用的情况,保证服务的高可用性。 3. **自动发现**:Dubbo通过注册中心(如Zookeeper、...

    Oracle 10G Data Guard 资料--全面详细,绝对值得学习!!!

    Oracle 10G Data Guard 是一个强大的高可用性和灾难恢复解决方案,它为Oracle数据库提供了额外的安全层,...通过深入学习这个资料,你将能够全面掌握Oracle 10G Data Guard的使用,为你的数据库系统提供强大的保护。

    Dubbo学习文档

    **集群失败容错**:在服务调用过程中不可避免会遇到各种异常情况,Dubbo提供了一套失败容错机制,包括Failover(失败重试)、Failback(失败回滚)等策略来处理这些问题,确保系统的稳定运行。 #### 二、服务治理与...

Global site tag (gtag.js) - Google Analytics