首页 > 其他分享 >如何设计兜底方案(高可用)

如何设计兜底方案(高可用)

时间:2024-06-04 22:16:11浏览次数:19  
标签:方案 兜底 服务 可用 配置 重试 job 设计

场景:
很多时候,在同步数据时,都会有一个重新推送的按钮,不管是重新推送还是重新拉去。这些动作都是失败后,再次操作,直到成功。
image

这种设计的原因是,程序的运行,不知道什么原因会失败。网络、数据库、服务器,B服务BUG都会导致这段代码执行失败,从而无法保证该功能准确执行。

设计的设计中都是需要兜底的方式,或者冗余的设计

  1. 系统自动重试
  2. 主动备份,通过备份能够继续访问
  3. 人为操作程序来完成错误后的流程

框架程序中兜底的设计

1.OpenFeign框架的重试

OpenFeign请求框,虽然默认情况下没有开启重试的机制,但是只需要配置,请求调用在失败后,会进行重试。


@Configuration  // 存储 Ioc
public class RetryerConfig {
    @Bean
    public Retryer retryer() {
        return new Retryer.Default(
            1000,  // 重试间隔时间
            1000,  // 最大重试间隔时间
            3  // 最大重试次数
        );
    }
}

2.Rocketmq中NameServer

rocketmq的nameServer挂了,本地已保存的配置在一段时间内能够保证服务能够送达。

试想我们有一个配置中心服务,它会定期更新线上各服务的配置参数。那么当我们设计服务时,其实是需要考虑到一旦配置中心出现故障,对我们服务的影响。

我们可以这么设计:首先提供一个本地配置文件(当然它的参数肯定比较过时了),作为任何异常情况下的兜底。其次将每次从配置中心上拉下来的配置参数,写一份到本地,这样即使后续读取失败,我们也会有一份比较新的配置参数可用。最后我们再开一个线程,实时拉取新的参数,进行更新操作。

按照这种方式,将服务从强依赖配置中心,改为了弱依赖。不过需要考虑到这种设计带来的复杂度,如拉取新的配置文件到写入本地磁盘,这一过程是原子操作的。

3.XXL-JOB的人工介入的重试

新开发的运营系统,需要每天凌晨跑一个job,这个job比较复杂,其中涉及到了多个端的调用
设计的方案:首先让它每隔一小时就启动判断一次,如果该任务当天已经完成了,就不再重新启动,否则开始运行当天的job;如果第一次job执行失败了,之后的job也会执行成功。
其次会假设万一当天执行的job失败了,我在配置文件中仍然会配置一个默认参数,这时直接使用该参数进行兜底。

高可用的实践方案

网络上高可用实践方案总结:

  • 1、对等节点的故障转移,Nginx和服务治理框架均支持一个节点失败后访问另一个节点。
  • 2、非对等节点的故障转移,通过心跳检测并实施主备切换(比如redis的哨兵模式或者集群模式、MySQL的主从切换等)。
  • 3、接口层面的超时设置、重试策略和幂等设计。
  • 4、降级处理:保证核心服务,牺牲非核心服务,必要时进行熔断;或者核心链路出问题时,有备选链路。
  • 5、限流处理:对超过系统处理能力的请求直接拒绝或者返回错误码。
  • 6、MQ场景的消息可靠性保证,包括producer端的重试机制、broker侧的持久化、consumer端的ack机制等。
  • 7、灰度发布,能支持按机器维度进行小流量部署,观察系统日志和业务指标,等运行平稳后再推全量。
  • 8、监控报警:全方位的监控体系,包括最基础的CPU、内存、磁盘、网络的监控,以及Web服务器、JVM、数据库、各类中间件的监控和业务指标的监控。
  • 9、灾备演练:类似当前的“混沌工程”,对系统进行一些破坏性手段,观察局部故障是否会引起可用性问题。

高可用的方案主要从冗余、取舍、系统运维3个方向考虑,同时需要有配套的值班机制和故障处理流程,当出现线上问题时,可及时跟进处理。

image

标签:方案,兜底,服务,可用,配置,重试,job,设计
From: https://www.cnblogs.com/skyice/p/18231858

相关文章

  • 游戏开发:基础模块之任务系统设计方案
    写一写游戏项目的基础模块的实现思路,之任务系统:起引导、活跃、成就等作用的任务系统,是游戏常见的业务需求;实现上可以分为几个部分:任务类设计;任务对象管理;事件管理;hook机制;一.事件管理模块一个以事件类型(eventtype)为单位,进行注册和回调触发的管理模块。模块需要实现......
  • 【VS Code使用】仅当从 VS 开发人员命令提示符处运行 VS Code 时,cl.exe 生成和调试才
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、前言......
  • 1500PLC通过232自由口转profinet网关接ABB扫码枪通讯方案
    一、现状:在实际的生产环境中,越来越多的自动化设备采用扫码枪录入代替手动录入信息的方式进行操作。二、了解现场现场要求在不动其他设备和程序的情况下让ABB扫码枪与1500PLC通讯,在拿到现场的需求时兴达易控的专项技术为其制定了方案。 三、制定方案:在不动其他设备和程序的......
  • 杰理语音芯片AC1042A,变声喇叭玩具方案—云信通讯
    变声喇叭玩具内置多种声音效果,例如机器人声、怪兽声、动物声以及各种搞笑声,让孩子能够在玩耍过程中体验不同的声音变化。有一些变声喇叭还可以模拟名人声音,让孩子们仿佛变身成为自己心目中的英雄或者明星。无论是自由的想象力游戏还是模仿他人的声音,变声喇叭玩具都能让孩子乐在......
  • 满满的干货:AI大模型对网络五大需求及技术应对方案
    AI大模型对网络的需求主要体现在五个方面,即超大规模组网、超高带宽、超低时延、超高稳定性及网络自动化部署。为了应对这五个方面的需求,本文对业内一些主要的应对技术、思路和方案进行了梳理,供读者进行系统优化时做参考,不对具体技术实现细节做过多论述,对应的思维导图如下,仅......
  • (性能测试)--记录一次高可用场景导致CPU资源升高
    测试场景:高可用场景--限流测试;被测交易:查询类交易,HTTP协议;交易链路:jmeter-web-coimpre(前置服务)--coimbp--cobp(coimbp、coimpre都会访问同一个数据库);注:cobp为合肥机房,其他服务均为北京机房,要注意跨网段存在网络延迟(会导致TPS波动情况);场景配置:配置coimpre服务的......
  • 二进制部署etcd-三个集群方案
    etcd的二进制部署还有什么问题,想咨询的,加群:582337768。这个群不是我的,但是我在里面,但是还是那句话,我也不懂。三个节点信息node01ip=192.168.1.11node02ip=192.168.1.12node03ip=192.168.1.13创建证书#下载制作证书的二进制文件wget--no-check-certificatehttps://p......
  • MySQL数据库:Lock wait timeout exceeded; try restarting transaction问题解析及解决方
    MySQL数据库:Lockwaittimeoutexceeded;tryrestartingtransaction问题解析及解决方案一、背景描述二、原因分析三、解决方案3.1方案一事务信息查询3.2方案二如果杀掉线程依然不能解决,可以查找执行线程耗时比较久的任务,kill掉3.3方案三innodb_lock_wait_timeout锁定等......
  • 基于mac-vlan的网络准入控制方案
    网络拓扑图如下:SW1配置vlan1020304000#创建vlaninterfaceGigabitEthernet1/0/1#进入接口portlink-typehybrid#接口模式设为hybridporthybridvlan1020304000untagged#vlan1020304000数据包没有tagporthybridpvidvla......
  • Mysql实时数据监听高可用
    一、需求:数据实时监听在项目中有着重要的意义,例如某些项目需要监听数据库的变化,生成对应的元数据块,这个数据块为前端接口提供数据支撑或者数据计算使用,监听到某些数据的变化,及时提醒上游或下游服务等等。如何保证数据监听的高可用?本文用自身项目结构简易阐述,不喜勿喷。二、......