当前位置: 首页 > news >正文

关于高可用,我们关注得好像有点窄

这是学习笔记的第 2171 篇文章

  之前关注了很多高可用方面的事情,但是似乎有一点我们忽略了,那就是我们所谓的高可用关注的更多是一种临界状态,更多是为了数据一致性和完整性努力,而对于切换时长存在一些问题,对于业务来说,这就会导致服务中断过长,服务不可用。对很多业务(除了一些交易系统)来说,能够最快恢复也许是重中之重,而在这个基础上能够延迟修复数据或者补数据,对于多方来说是一种性价比最高的事情。比如正常情况下,我们考虑了很多的异常,恢复业务需要10秒钟,但是如果我们采取最折中的方式,使得最快的切换方式保持在1秒或者毫秒,那么从这个层面我们可做的事情就很多了,所以有了这篇文章和两个相关方案,在此我们更多聊的是关于如何快速切换的方案。

1.方案概览

为了保证业务的可持续性,高可用方案主要覆盖三类场景:故障转移和主动切换和容灾切换。

分类

事件时间

切换预置条件

影响时长

适用场景

备注

故障切换

计划外,

不确定性

需要做故障预判和故障确认

秒级~分钟级

服务器故障,数据库宕机,网络异常

最大程度保证数据可用,可能存在部分数据丢失风险

主动切换

计划内

主动发起,故障预判和确认前置

秒级

更换OS硬件设备,更换存储,网络异常数据库重大配置变更(数据库重启)数据库升级,数据迁移

最大程度降低风险

容灾切换

重大决策

涉及前后端联动

分钟级+

机房故障

最大程度保证服务可用, 可能存在部分数据丢失风险

其中,

故障转移方案具有不确定性,需要做故障预判和故障确认后方可进行故障切换,预计影响时长在分钟级

而快速切换可以作为高可用的补充方案,是主动发起的方案,属于计划内任务,预计影响时长可以控制在秒级

容灾切换方案属于决策方案,在重大故障时需要前后端联动完成

其中主动切换方案是该方案讨论的重点,主要有以下的一些预设条件

l 业务低峰期

l 数据延迟控制在1s以内

l 应用层具有自动重连机制

l MySQL基于异步复制模式

切换前,整个服务状态如下,其中主库可读写,从库只读,通过Consul服务访问至主库

2.快速切换参考方案1

1)建立双向复制关系,主从均开启读写,但是从库无业务数据写入

2)主库置为Read_only状态,业务写入失败,业务读依然可用

3)Consul域名服务切换到从库,取消之前的双向复制改为单向

3.快速切换参考方案2:

1)将主库置为Read_only状态,业务数据写入失败,但是依然可以查询

2)检测从库的数据延迟,检测N次,偏移量稳定无变化

3)配置数据库双向复制,从库置为可写状态

4)Consul域名切换到从库

小结:两个方案中,第1个方案比第2个要少一个步骤,而且建立反向复制的过程可以提前验证,相对来说更加便捷和有效。

近期热文:

迁移到MySQL的业务架构演进实战

数据库修改密码风险高,如何保证业务持续,这几种密码双活方案可以参考

MySQL业务双活的初步设计方案

如何优化MySQL千万级大表,我写了6000字的解读

一道经典的MySQL面试题,答案出现三次反转

业务双活的数据切换思路设计(下)

业务双活的数据切换思路设计(一)

MySQL中的主键和rowid,看似简单,其实有一些使用陷阱需要注意

小白学MySQL要多久?我整理了10多个问题的答案

转载热文:

《吊打面试官》系列-Redis基础

唯一ID生成算法剖析,看看这篇就够了

关于大数据运维能力的一些思考

DBA菜鸟的进化简史:不忘初心,记工作中踩过的三个坑

美女主持直播,被突发意外打断!湾区网友却高喊: 我懂!超甜

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

在看,让更多人看到

相关文章:

  • 去IOE or Not?
  • 拉里·佩奇(Larry Page)的伟大归来
  • Linux系统——架构浅析
  • 解码Redis最易被忽视的CPU和内存占用高问题
  • 还能这样?把 Python 自动翻译成 C++
  • 华裔教授发现二次方程极简解法,我默默的做了下验算
  • 运维系统性能优化后思考,除了避免懒惰的麻木,还需要了解系统的“脾性”...
  • 用python重新定义【2019十大网络流行语】
  • 那些对我来说没有价值和有价值的事情
  • 关于MySQL GTID的一次深刻学习
  • 这才是真正的Git——Git内部原理揭秘!
  • MySQL 8.0与MariaDB 10.4,谁更易于填坑补锅?
  • 那些难忘的维护之夜
  • 《宣州谢眺楼饯别校书叔云》赏析
  • 无意中测试了下MySQL里面的join操作,发现还是存在理解偏差
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Angular Elements 及其运作原理
  • input的行数自动增减
  • isset在php5.6-和php7.0+的一些差异
  • java 多线程基础, 我觉得还是有必要看看的
  • java2019面试题北京
  • Linux Process Manage
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • spring-boot List转Page
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue2.0项目引入element-ui
  • 工作中总结前端开发流程--vue项目
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 深入浏览器事件循环的本质
  • 使用agvtool更改app version/build
  • 微服务核心架构梳理
  • Mac 上flink的安装与启动
  • python最赚钱的4个方向,你最心动的是哪个?
  • 第二十章:异步和文件I/O.(二十三)
  • ​一些不规范的GTID使用场景
  • #pragma once
  • (31)对象的克隆
  • (bean配置类的注解开发)学习Spring的第十三天
  • (LeetCode C++)盛最多水的容器
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转) Android中ViewStub组件使用
  • (转)Sublime Text3配置Lua运行环境
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .Net - 类的介绍
  • .NET Remoting学习笔记(三)信道
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net 受管制代码
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .net连接MySQL的方法