一种简单的Failover机制

Dubbo Failover机制 背景:        某个服务有2台机器,但是其中一台机器挂了,dubbo的重试还是会调用这台机器,经过查资料,推荐使用Failover机制;   过程:         经过跟踪源码,发现dubbo默认的容错机制就是使用了Failover,在执行调用前会直接进入FailoverClusterInvoker.class的doInvoke中,翻开源码: public Result doI... 阅读详情

0?wx_fmt=png

在应用结构上有这样一个业务场景,机房里部署了多个物理数据库的Proxy无状态节点,业务端通过Proxy节点间接和存储DB交互。Proxy支持了分库分表的特性,管理下层多个物理DB,向上层提供单表抽象。为了支持高可用性,Proxy为多节点部署,业务端可以随机挑选Proxy收发消息。

这里我们讨论业务端SDK的Failover实现方案。SDK需要管理指向多个Proxy连接,每个请求都需要随机挑选某个Proxy连接进行收发消息。当Proxy都正常时,随机算法已经可以满足负载均衡了。但是Proxy是可能会突然宕机的,挂了一个Proxy节点后,SDK需要快速摘除宕机的Proxy连接,将所有的请求都转移到其它节点之上。当这个Proxy节点恢复后,又可以重新将这个节点放回Proxy列表中。

那这种快速的动态调整,SDK又该如何以最简单的方法进行实现呢?一般的思路如下

  1. 使用计数机制,当请求出现错误时,比如在一定的时间窗口里出现了N次错误,那就可以标记该Proxy已损坏,从Proxy正常列表中摘除掉该Proxy,同时在恢复列表中加入该Proxy

  2. 使用Retry机制,每隔一段时间对恢复列表中的Proxy进行重试,重试一旦正确,就立即将Proxy从恢复列表中转移至正常列表

  3. 如果所有的Proxy都损坏了,那最后一个Proxy是不可以随便摘的。如果直接摘掉了,会导致Retry窗口内服务不可用。即使Proxy快速恢复了,也需要等待Retry窗口的时间才可以检测到。一般的做法是,如果所有的Proxy都坏掉了,那请求的随机Proxy列表不再是正常Proxy列表,而是全体Proxy列表。

要对这种思路进行编码实现有一定的复杂度。比如下图是pylibmc的状态转移图,看一眼知道复杂度非同一般。

0?wx_fmt=png

为降低复杂性,我设计了一个非常简单的方案,可以很好的解决Proxy Failover的问题,步骤如下

  1. 给每个Proxy设定一个初值,比如说1024,该值作为随机权重使用

  2. 每次请求出现失败一次,就将权值除以一个数,比如说2,数字越大,降权越快。

  3. 当权值降低到最小值,比如说1时,不再继续降权。这样可以保持坏掉的Proxy以一个极低的概率得到重试。

  4. 只要有任何一个成功的请求,就将权值恢复到初值。

  5. 当SDK通过权重随机挑选了一个Proxy进行了一个失败的请求时,将重新随机挑选Proxy进行重试,记录重试次数,直到成功为止或者重试到了一个最大次数上限,向上层抛出异常。

这种方案的优势在于不需要划分出正常列表和恢复列表,没有复杂的状态迁移,而且不需要设置额外定时器进行重试。当所有的节点都坏掉的情况下,所有的Proxy权重也还是一样的。我尝试用代码实现了这个方案,用了非常简洁的十几行代码就搞定了Failover问题。

当然这种方案也不是完美的,它的缺点体现在需要仔细控制权重参数,初始值/降权系数/最小值,特别是最小值,如果设置的太小,而SDK的QPS又太低的话,Proxy可能会长时间得不到恢复,不过这种情况也没有关系,如果QPS太小,要那么多的Proxy做负载均衡也是多余的。

医疗影像分析实战:肺炎X光片分类与分割 医疗影像分析实战:肺炎X光片分类与分割 ,人工智能,计算机视觉,大模型,AI,在医疗领域,医疗影像分析技术凭借其高效、精准的特点,成为疾病诊断与治疗的重要辅助手段。肺炎作为一种常见的呼吸道疾病,严重威胁人类健康,通过 X 光片对肺炎进行诊断是临床常用方法。利用计算机技术实现肺炎 X 光片的自动分类与分割,不仅能减轻医生的工作负担,还能提高诊断的准确性和效率。本文将深入讲解肺炎 X 光片分类与分割的实战过程,结合大量代码示例和关键概念解析,帮助读者掌握相关技术。 阅读详情

相关推荐

华为昇腾NPU环境搭建:torch-npu安装避坑指南(附常见错误解决方案)

本文详细解析了在华为昇腾NPU环境中安装torch-npu适配包的全流程与核心要点。从基础环境准备、严格的版本匹配策略,到针对‘RuntimeError: NPU error’、‘ImportError: libxxx.so’等高频错误的深度解析与解决方案,提供了一份实用的避坑指南,旨在帮助开发者高效搭建稳定的PyTorch开发环境。

weixin_29094979的博客 412

failover机制

简介 通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。这里的A和B可以存在于各种领域,但一般fail-over特指计算机领域的数据库、应用服务、硬件设备等的失效转移。 详细介绍 【电脑】失效备援 (为系统备援能力的一种, 当系统中其中一项设备失效而无法运作时, 另一项设备即可自动接手原...

coffeehot的专栏 2104

从PHY芯片看工业网络精准时钟:IEEE 1588v2(PTP)协议实现与选型指南

本文深入解析了工业网络中IEEE 1588v2(PTP)协议的实现与PHY芯片选型要点。通过对比KG7101、RTL8211F等芯片的关键参数,揭示硬件时间戳对纳秒级时钟同步的决定性作用,并提供PTP网络设计中的拓扑布局与配置优化技巧,助力工业自动化场景实现精准时间同步。

weixin_42628688的博客 507

常见容错机制:failover、failfast、failback、failsafe

常见容错机制:failover、failfast、failback、failsafe

一起coding,一起嗨。 1667

基于ESP32-C3的物联网硬件设计:从免费工具链到PCB打样全流程实战

在物联网和嵌入式开发领域,硬件设计是连接软件逻辑与物理世界的关键环节。其核心原理在于通过电路设计将微控制器、传感器、通信模块等电子元件有机整合,实现特定功能。掌握硬件设计能力的技术价值在于能够自主实现产品原型,优化成本与性能,并深入理解系统底层运作。常见的应用场景包括智能家居节点、环境监测设备、工业传感终端等。本文以热门的ESP32-C3 RISC-V物联网芯片和广泛使用的KiCad免费EDA工具为例,详细解析了从核心器件选型、射频电路布局、PCB设计规则到Gerber文件生产的完整流程,并分享了在嘉立创平

weixin_30918633的博客 338

Zemax单模光纤耦合仿真避坑指南:数值孔径、模式匹配与镀膜影响详解

本文详细解析了Zemax单模光纤耦合仿真中的关键避坑要点,包括数值孔径的多重定义与换算、模式匹配度评估及镀膜影响分析。通过实际案例和技术公式,帮助工程师避免常见仿真误差,提升激光通信和光纤传感系统的设计精度。特别针对OpticStudio用户提供了实用的参数设置建议和优化策略。

weixin_30836759的博客 468

Failover失效转移详解

定义:     失效转移通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。 这里的A和B可以存在于各种领域,但一般fail-over特指计算机领域的数据库、应用服务、硬件设备等的失效转移。 心跳线 连接工作机与备份机的网线,通过软件的方式监视工作机,备份机一旦发现工作机由于某种原因停止服务,则立

HH出状猿的专栏 1734

【以太网硬件六】1000base-T物理层编码究竟是怎么编的?

详述1000base-T物理层4D-PAM5的编码过程

highman110的博客 5325

常见容错机制以及实现原理:failover、failfast、failback、failsafe

在现代信息系统中,随着业务的不断扩展和对服务要求的提高,系统可用性变得越来越重要,为了系统能够在各种故障场景下继续运行,就需要提供对应的容错机制,本文将介绍常见的容错机制failover、failfast、failback、failsafe的概念和实现思路。

qq_40529346的博客 2283

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2174

PHP 网页游戏开发入门教程

我们还链接了一个名为 “game.js” 的 JavaScript 文件,稍后将在其中编写游戏逻辑。这只是一个简单的示例,但它演示了如何使用 PHP 和 JavaScript 开发一个基本的网页游戏。以下是一个示例游戏的源代码和解释。现在,您可以在浏览器中打开 “game.php” 文件,即可看到一个带有红色游戏角色的游戏板。在上述代码中,我们使用 JavaScript 创建了一个游戏角色元素,并将其添加到游戏板容器中。最后,我们需要将游戏元素的样式设置为绝对定位,以便能够正确地控制它们的位置。

KkowServer的博客 679

深入理解redis cluster的failover机制

社区版redis cluster是无中心节点P2P的集群架构,内部采用gossip协议传递维护集群的拓扑结构和集群元数据。社区文档地址:https://redis.io/topics/cluster-tutorial failover是redis cluster提供的容错机制,cluster最核心的功能之一。failover支持两种模式: ...

weixin_34366546的博客 5379

TIA博途中通过UDT实现IO地址映射到DB块中的具体方法

TIA博途中通过UDT实现IO地址映射到DB块中的具体方法

Robot_PLC_HMI_Automation 1万+

Redis Cluster:CLUSTER FAILOVER vs CLUSTER FAILOVER TAKEOVER 区别

问题点原因建议无法完成无法达到投票多数(失去 quorum)使用自动切换失效主节点不足,选举失败调整为更高可用的复制结构(如 1主2从、5主结构)从节点抢主需要人工介入执行TAKEOVER,或集群脚本恢复如你能贴出和当前拓扑图,我可以帮你一步步模拟出如何恢复两个挂掉的主节点并保持数据不丢失。是否需要?状态是否可迁移槽位建议行动✅ 可迁移使用 redis-cli 迁移槽位cluster_state:fail,failover 未恢复❌ 不建议优先恢复主从,修复集群结构。

喝醉酒的小白 1487

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flink Task退出流程与Failover机制

JobMaster收到TaskManager通过rpc发送的task执行状态变更信息,将通知当前Flink作业的调度器(SchedulerNG)处理,因为都是通过同个线程调用,后续对ExecutionGraph(运行时执行计划)、failover计数等有状态实例的read/write操作都不会出现线程安全问题。最后通过Task->TaskManager->JobMaster的传递链路将Task的终止状态通知给Leader JobMaster线程。Task 级别的故障重启,是系统自动进行的;

Direction_Wind的博客 2154

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

常见容错机制:failover、failback、failfast、failsafe

1、failover:失效转移 Fail-Over的含义为“失效转移”,是一种备份操作模式,当主要组件异常时,其功能转移到备份组件。其要点在于有主有备,且主故障时备可启用,并设置为主。 例如:Mysql的双Master模式,当正在使用的Master出现故障时,可以拿备Master做主使用 2、failback:失效自动恢复 Fail-over之后的自动恢复,在簇网络系统(有两台或多台服务器互联的网络)中,由于要某台服务器进行维修,需要网络资源和服务暂时重定向到备用系统。在此之后将网络资源和服务器恢复为由原始

weixin_51115925的博客 2930

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Oracle RAC Failover 详解

Oracle  RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。     Oracle 10g RAC 的Failover 可以分为3种: 1. Client-

Aamir 的专栏 1396

failover机制和NFS服务

学习记录 督促自己学习

克克克克业业的学习记录 752

05_RAC_FAILOVER特性

FAILOVER特性 1.failover 即节点故障后的切换,这是RAC的高可用特性之一。failover 的切换只能完成会话级别的切换。 也就是说,如果正在执行DML语句,当节点发生故障时,所有的事物都将被回滚,只有会话本身能被切换过去。如果执行的是select 查询语句,根据配置情况可以实现查询的切换。 2.通常应用服务器通过JDBC的方式连接到RAC数据库,由于JDBC不支持TAF,所以通...

wolihaito的博客 459

Oracle RAC Failover 说明

Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移)。 RAC Failover指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。 一、Oracle RAC 的Failover 可以分为3种: 1. Cli...

daf380的专栏 1914

Flink——Task退出流程与Failover机制

Flink——Task退出流程与Failover机制 目录Flink——Task退出流程与Failover机制1 TaskExecutor端Task退出逻辑2 JobMaster端failover流程2.1 Task Execute State Handle2.2 Job Failover2.2.1 Task Failure Handle2.2.2 Restart Task2.2.3 Cancel Task:2.2.4 Start Task 1 TaskExecutor端Task退出逻辑 Task.doRu

qq_30708747的博客 3208

Druid连接池的Failover机制如何实现?

Druid 是一个 Java 语言下的数据库连接池实现,它不仅是一个数据库连接池,还提供了数据源和 JDBC 组件的监控。Druid 提供了一个代理模式(DruidProxyDataSource),在这个模式下,可以通过编程的方式更灵活地控制连接池的行为,包括实现自定义的 Failover 策略。例如,在使用多数据源时,你可以为每个数据源指定一个名称,并且在应用程序中通过这个名称来访问不同的数据源。请注意,这只是一个简化的例子,实际的配置可能会有所不同,取决于你的具体需求和使用的框架或环境。

qq_33240556的博客 484

redis cluster源码研究--failover

failover

whycold的专栏 3721

Failover机制

Failover 失效转移  通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。  这里的A和B可以存在于各种领域,但一般fail-over特指计算机领域的数据库、应用服务、硬件设备等的失效转移。

Java面试辅导-海龟老师 2405
上一篇: 如何解决Java线程池队列过饱问题
下一篇: Lettuce快速入门
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值