前言

随着业务发展越来越快,数据量越来越多,用户也越来越多,业务出现故障的几率也越来越大,而可用性是衡量一个系统的关键指标,application 由于是无状态的,可用性很好保证,当一个应用挂掉,直接切到另一个即可,最关键的是数据库的高可用,则是最复杂的。

今天我们将尝试探讨数据库的异地多活高可用。注意,我们讨论的都是超大数据量(50TB 级别)的数据库。

第一种

直接上分布式数据库,目前市面上常见的有 3 种,TiDB,阿里云 POLARDB,亚马逊 Aurora。

虽然 TiDB 可以将数据 sharding 到各个城市,但由于各个城市的物理距离导致的网络消耗,查询的效率可想而知(或许可以通过 Hash 的方式解决?)。 POLARDB 和 Aurora 是相同的思路,计算节点是分布式的,存储使用共享存储,带来的问题还是单机房问题。

因此,分布式数据库解决的还是超大数据的存储和单机房的 HA,一旦跨越城市,目前还没有看到好的方案。

第二种

在分库分表就能无限扩容吗一文中,我们提到了单元化。单元化说白了,就是先分库分表,然后,将数据库划分为固定的几个单元,使固定的业务进入固定的单元,这样,就不会出现每个业务都需要连接所有的数据库 —— 从而减小连接数。

在单元化的基础上,我们可以实现异地多活。

解释一下上图: 我们将 数据分成了 3 个数据库,同时,我们有3个城市的机房,红色表示为写节点,每个 shard 库最好只保证只有一个地方写,尽量避免双写的问题。 另外,杭州机房作为主机房。

上海机房的 shard 1 库在写入数据后,会同步到杭州主节点,北京机房的 shard 3 节点在写入数据后,也会同步到杭州主节点,杭州机房的 shard 2 写入数据后,也会同步到上海机房和北京机房。

其中,非红色数据库都是备库或读库。

我们假设,上海机房断电。

此时,杭州机房将会接管 shard 1 库,变成写入节点。

我们再假设,杭州机房断电。

杭州机房断电后,上海机房将会接管 shard 2 节点,同时,将 shard 2 节点的数据同步到北京机房,仍然保证可用性。

注意,这里为什么是上海机房的 shard 2 接管,而不是北京机房的 shard 2 接管呢?实际上,我是随便写的,在生产环境中,如果有超过 2 个副本,那么就需要使用 Raft 这种一致性协议来决策到底由谁来接管,这里为了简单,就写上海了。

我们观察到,其中,同步是核心,注意,使用 mysql 自带的同步是不可靠的,通常会自行开发一个稳定的,HA 的高可用复制系统,称之为 DRC,即数据复制中心,主要处理多城市或多机房的数据复制。

其中,阿里云已经有商业版的 DRC ,即 DTS,支持数据同步,数据订阅,数据迁移。而其底层则是 otter + canal,已经开源,不过比较简陋,想上生产环境的话,还需要二次开发和优化。

总结

本文简单的讨论了数据库的异地多活的方案,我们认为,在单元化的方案中,同步是核心,稳定的同步是保证数据一致的关键,而这,在单个机房中,只需要通过简单的 RPC 即可解决,但在跨机房,跨城市的网络中,就显得尤为复杂。

那么,如何打造一个高可用,低延迟,可靠的一致性,高吞吐的同步系统呢?

如有错误或其它问题,欢迎小伙伴留言评论、指正。如有帮助,欢迎点赞+转发分享。

mysql异地多活方案_最易懂的数据库异地多活方案相关推荐

  1. mysql异地多活方案_基于MGR高可用异地多活方案-阿里云开发者社区

    一.概述 主要目的实现MySQL高可用解决方案,实现异地多活. 二.实现构思 基于MGR实现高可用异地多活 首先要基于位置信息进行分片,例如华北 华中,华南,程序层要进行ip过滤和判断, 针对不同的i ...

  2. 腾讯云mysql高可用方案_腾讯云数据库团队:MySQL数据库的高可用性分析

    作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数 ...

  3. 智慧旅游建设方案_智慧灯杆及智慧交通设施建设方案

    路灯智能照明管理对于智慧城市建设的意义 1.促进智慧城市的功能落地: "智慧路灯"是未来城市物联网的重要信息采集,路灯智能物联管理平台的建设,是智慧城市的一个重要组成部分,能够实现 ...

  4. mysql增删改查脚本_脚本方式实现数据库增删改查

    哇塞,一个空格的问题花了一整天的时间终于找出了错~~~ 1.首先实现查询表中的所有数据: 查看数据库表中信息 String dbUrl= "jdbc:mysql://localhost:33 ...

  5. 微信抢红包的方案_免费公开实收20000的烤鸭店营销方案,餐饮行业可复用

    此篇分享,是来自内部学员的语音转文字,全篇删除了些许语气词,内容是完整的.逻辑上可能有点天马行空,但很适合餐饮人通过移动互联网迅速引爆客流. 主题:李总实操分享如何引爆一家烤鸭店客流量 我不太会分享, ...

  6. mysql分片库分页查询_准备开发一个数据库分片的中间件,请问下分页查询用什么样的算法效率较高?...

    假设你说的用户,不是开发人员,是终端用户,比如saas之类的系统用户. 如果对于用户是透明的,意味着每个用户只需要看到自己的数据,那么比较经济的处理方式是,把用户id的哈希值作为分配的条件,这样能够保 ...

  7. 程序员接私活平台_程序员去哪儿接私活?我系统总结了15个国内平台,绝对靠谱...

    和大家分享一下如何判断项目是否靠谱,有哪些接项目的渠道,以及其他接私活的经验. 首先判断项目是否靠谱,直接说给我开发一个什么软件,不说具体需求,没有需求文档的都不靠谱,这样的项目不要接. 需求文档越详 ...

  8. mysql 主键自增_还再使用数据库自增主键吗?

    加油站: 在数字经济时代,数据的重要性堪比石油.大数据的四个特点:Volume(数据体量大).Variety(数据类型繁多).Velocity(处理速度快).Value(商业价值高),只要合理利用数据 ...

  9. 定编定岗定员方案_[转载]定岗、定编、定员实施方案  (讨论稿)

    定岗.定编.定员实施方案 (讨论稿) 为规范机关的人员编制管理,优化人力资源配置,提高机关部门工作效率,转变工作作风,实现农信社改革发展的目标,根据<广东省农村信用社定编定岗定员管理暂行办法&g ...

最新文章

  1. 读后感与机翻《整体的三维场景解析和重建从单一的RGB图像》
  2. 2013-7-12学习笔记
  3. 在创建的Silverlight Control中使用图片
  4. 【MM模块】Material Planning - 物料计划
  5. 从架构理解价值-我的软件世界观
  6. Thinkphp5.0 阿里云OSS扩展类上传示例(轮子)
  7. 牛客题霸 [子数组的最大累加和问题] C++题解/答案
  8. srsLTE源码学习:网络附属存储抓包nas_pcap.h
  9. VJ—蟠桃记(C语言)
  10. 《阴阳师·2栀子女》原作:梦枕貘
  11. MySQL DUAL表的作用
  12. 【译】基于 Rust 用 Bevy 实现节奏大师游戏
  13. 怎样把d盘改成c盘!如何把收藏夹和桌面的路径设成D盘
  14. idea热部署插件JRebel激活(强烈推荐,试试就离不开了)
  15. mysql连接出错 mysqladmin flush-hosts 解决方法(mysqladmin 刷新主机解除阻塞)
  16. python中seaborn库_[Python学习笔记(四)] Seaborn库基础学习——01
  17. mysql数据库名称中包含短横线的对应方式
  18. 千锋逆战班学员教你从零基础了解HTML5的知识
  19. 当编程语言都变成女孩子 猿哥想想都觉得冲动
  20. zabbix 5.4 自定义模板

热门文章

  1. WPS 取消自动生成超链接
  2. 基于springboot在线竞价拍卖管理系统
  3. 如何在工作中保持稳定情绪?应对挑战和困扰的有效方法
  4. Lesson 2英语词类
  5. ELGAmal加密与解密
  6. 小米iot业务_小米AI与IoT这两大未来核心业务的战略布局
  7. 开箱即用!Linux 内核首个原生支持,让你的容器体验飞起来!
  8. java开源持久层框架集
  9. 干电池升压IC,电流大,功耗低
  10. 当我们讨论流畅度的时候,我们究竟在说什么?