`
youyu4
  • 浏览: 426430 次
社区版块
存档分类
最新评论

互联网一致性架构设计 -- DB主从一致性

 
阅读更多

互联网一致性架构设计 -- DB主从一致性

 

 

需求分析

 

       大部分互联网的业务都是 “ 读多写少 ” 的场景,数据库层面,读性能往往成为瓶颈。如下图:业界通常采用 “ 一主多从,读写分离,冗余多个读库 ” 的数据库架构来提升数据库的读性能。


 

    这种架构的一个潜在缺点是,业务方有可能读取到并不是最新的旧数据:

 

  1. 系统先对DB-master进行了一个写操作,写主库
  2. 很短的时间内并发进行了一个读操作,读从库,此时主从同步没有完成,故读取到了一个旧数据
  3. 主从同步完成


 

 

 

 

解决方法

 

  • 半同步复制
  • 强制读主
  • 数据库中间件
  • 缓存记录写key

 

 

 

半同步复制

 

       不一致是因为写完成后,主从同步有一个时间差,假设是500ms,这个时间差有读请求落到从库上产生的。有没有办法做到,等主从同步完成之后,主库上的写请求再返回呢?答案是肯定的,就是大家常说的“半同步复制”semi-sync:


 

  1. 系统先对DB-master进行了一个写操作,写主库
  2. 等主从同步完成,写主库的请求才返回
  3. 读从库,读到最新的数据(如果读请求先完成,写请求后完成,读取到的是“当时”最新的数据)

 

    优点:利用数据库原生功能,比较简单

    缺点:主库的写请求时延会增长,吞吐量会降低

 

 

 

 

 

强制读主库

 

       如果不使用“增加从库”的方式来增加提升系统的读性能,完全可以读写都落到主库,这样就不会出现不一致了:


 

    优点:“一致性”上不需要进行系统改造

    缺点:只能通过cache来提升系统的读性能,这里要进行系统改造

 

 

 

 

 

数据库中间件

 

       如果有了数据库中间件,所有的数据库请求都走中间件,这个主从不一致的问题可以这么解决:



 

  1. 所有的读写都走数据库中间件,通常情况下,写请求路由到主库,读请求路由到从库
  2. 记录所有路由到写库的key,在经验主从同步时间窗口内(假设是500ms),如果有读请求访问中间件,此时有可能从库还是旧数据,就把这个key上的读请求路由到主库
  3. 经验主从同步时间过完后,对应key的读请求继续路由到从库

 

    优点:能保证绝对一致

    缺点:数据库中间件的成本比较高

 

 

 

 

 

缓存记录写key法

 

    既然数据库中间件的成本比较高,有没有更低成本的方案来记录某一个库的某一个key上发生了写请求呢?很容易想到使用缓存。

 

    当写请求发生的时候:


  1. 将某个库上的某个key要发生写操作,记录在cache里,并设置“经验主从同步时间”的cache超时时间,例如500ms。
  2. 修改数据库。

 

    而读请求发生的时候:



 

  1. 先到cache里查看,对应库的对应key有没有相关数据
  2. 如果cache hit,有相关数据,说明这个key上刚发生过写操作,此时需要将请求路由到主库读最新的数据
  3. 如果cache miss,说明这个key上近期没有发生过写操作,此时将请求路由到从库,继续读写分离

 

    优点:相对数据库中间件,成本较低

    缺点:为了保证“一致性”,引入了一个cache组件,并且读写数据库时都多了一步cache操作

 

 

  • 大小: 23.1 KB
  • 大小: 41.4 KB
  • 大小: 43.4 KB
  • 大小: 43.1 KB
  • 大小: 54.8 KB
  • 大小: 37.5 KB
  • 大小: 74.7 KB
分享到:
评论

相关推荐

    DB主从一致性架构优化4种方法

    DB主从一致性架构优化4种方法,DB主从一致性架构优化4种方法

    主从DB与cache一致性

    在“异常时序”或者“读从库”导致脏数据入缓存时,可以用二次异步淘汰的“缓存双淘汰”法来解决缓存与数据库中数据不一致的问题,具体实施至少有三种方案: (1)timer异步淘汰(本文没有细讲,本质就是起个线程...

    MySQL进阶-高可用、分布式、主从复制原理、备份恢复

    挑战:数据一致性、事务管理、数据分片、数据复制等。 策略:使用分布式数据库解决方案,如Cassandra, CockroachDB等。 主从复制原理 概述:数据从一个MySQL服务器(主)复制到一个或多个MySQL服务器(从)。 工作...

    He3Proxy是中移(苏州)软件技术有限公司基于PG协议专为He3DB打造的高性能数据库代理项目

    He3Proxy是中移(苏州)软件技术有限公司基于PG协议 专为He3DB 打造的高性能数据库代理项目,采用Go语言开发, He3Proxy为He3DB 提供读写分离、负载均衡、连接池管理、 读一致性等基础能力,让用户像使用单机一样...

    He3Proxy是中移(苏州)软件技术有限公司基于PG协议 专为He3DB 打造的高性能数据库代理项目

    He3Proxy是中移(苏州)软件技术有限公司基于PG协议 专为He3DB 打造的高性能数据库代理项目,采用Go语言开发, He3Proxy为He3DB 提供读写分离、负载均衡、连接池管理、 读一致性等基础能力,让用户像使用单机一样...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    接入层架构设计 DNS轮询 动静态分离 静态化 反向代理 LVS F5 CDN 逻辑层架构设计 连接池 串行化技术 影子Master架构 批量写入 配置中心 去中心化 通讯机制 同步 RPC RMI 异步 MQ Cron 数据层...

    mysql5.5 master-slave(Replication)主从配置

    一主一从: Master: OS:centos release 5.6 DB:mysql ...id、与log-bin两项 server-id=1 log-bin=/var/lib/mysql/mysql-bin datadir=/var/lib/mysql //为了使用事务的InnoDB在复制中最大的持久性和一致性,你应该指定

    开涛高可用高并发-亿级流量核心技术

    16.6 详情页架构设计原则 332 16.6.1 数据闭环 332 16.6.2 数据维度化 333 16.6.3 拆分系统 334 16.6.4 Worker无状态化+任务化 334 16.6.5 异步化+并发化 335 16.6.6 多级缓存化 335 16.6.7 动态化 336 16.6.8 弹性...

    消息顺序性设计实现

    (3)单点序列化,是一种常见的保证多机时序统一的方法,典型场景有db主从一致,gfs多文件一致; (4)单对单聊天,只需保证发出的时序与接收的时序一致,可以利用客户端seq; (5)群聊,只需保证所有接收方消息...

    redis非关系型数据库

    它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。 二、特点 1 Redis...

    MySQL面试题28道面试题

    13、你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做? 14、你们数据库是否支持emoji表情,如果不支持,如何操作? 15、你是如何维护数据库的数据字典的? 16、表中有大字段X(例如:text类型)...

    【MySQL面试题干货集合】20个经典常用面试题-需要找工作的一定要看 共11页.pdf

    13 你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做? 9 14 你们数据库是否支持emoji表情,如果不支持,如何操作? 9 15 你是如何维护数据库的数据字典的? 10 16 你们是否有开发规范,如果有...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    4.6 如何验证主从数据一致 121 4.7 binlog_ignore_db引起的同步复制故障 123 4.8 mysql5.5.19/20同步一个bug 124 4.9 恢复slave从机上的某几张表的简要方法 126 4.10 如何干净地清除slave同步信息 127 第5章 ...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    15.1.4 Java驱动的一致性 15.2 Java常用操作 15.2.1 Java对MongoDB的操作实例 15.2.2 对用户的操作 15.2.3 对集合的操作 15.2.4 对索引的操作 15.3 Java高级查询 15.3.1 通过游标获取所有的...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    15.1.4 Java驱动的一致性 15.2 Java常用操作 15.2.1 Java对MongoDB的操作实例 15.2.2 对用户的操作 15.2.3 对集合的操作 15.2.4 对索引的操作 15.3 Java高级查询 15.3.1 通过游标获取所有的...

    DDMQ消息队列-其他

    DDMQ 是滴滴出行架构部基于 Apache RocketMQ 构建的消息队列产品。作为分布式消息中间件,DDMQ 为滴滴出行各个业务线提供了低延迟、高并发、高可用、高可靠的消息服务。DDMQ 提供了包括实时消息、延迟消息和事务消息...

    计算机软件及应用数据库基础知识.pptx

    2、数据库(Database,简称DB) 数据库是存放数据的仓库,是长期存储在计算机内的、有组织的、可共享的数据集合。 3、数据库管理系统(DBMS) 是一种软件,如Access,负责数据库中的数据组织、数据操作、数据维护、...

    电子书:MongoDB权威指南(中文版)

    514.3.4 查询内嵌文档 534.4 $where 查询 554.5 游标 564.5.2 避免使用skip 略过大量结果 584.5.3 高级查询选项 604.5.4 获取一致结果 614.6 游标内幕 63第5 章 索引 655.1 索引简介 655.1.1 ...

Global site tag (gtag.js) - Google Analytics