赣州网站建设百家号,wordpress主题 导出,工程建设管理条例,做网页原型图一张多少钱数据主从同步的由来 互联网的很多业务#xff0c;特别是在高并发的场景下#xff0c;基本都是读远远大于写#xff0c;如果数据库读和写的压力都同在一台主机上#xff0c;这显然不太合理。 于是#xff0c;把一台数据库主机分为单独的一台写主库#xff08;主要负责写操… 数据主从同步的由来 互联网的很多业务特别是在高并发的场景下基本都是读远远大于写如果数据库读和写的压力都同在一台主机上这显然不太合理。 于是把一台数据库主机分为单独的一台写主库主要负责写操作而把读的数据库压力分配给读的从库而且读从库可以变为多台这就是读写分离的典型场景如下 为了进一步的降低数据库端的压力高并发的瓶颈这个时候也会在业务层部署分布式缓存集群redis、memcached等把读的压力转移给应用服务器端其实与数据主从的设计是遵循同一个原则降低后端数据库的压力。 问题 读写分离提高了资源的利用效率的同时也引出了一个问题就是由于延时网络传输操作而引起的数据库主从不一致的问题以下会详细谈相关的数据一致性解决方案。 数据同步一致性解决方案 1.半同步复制 办法就是等主从同步完成之后等主库上的写请求再返回这就是常说的“半同步复制”。 实现方案 mysql的半同步复制方案下面我以mysql为例介绍。 MySQL半同步复制 MySQL的Replication默认是一个异步复制的过程从MySQL5.5开始MySQL以插件的形式支持半同步复制我先谈下异步复制这样可以更好的理解半同步复制。 1异步复制 MySQL默认的复制是异步的主库在执行完客户端提交的事务后会立即将结果返给给客户端并不关心从库是否已经接收并处理这样就会有一个问题主如果crash掉了此时主上已经提交的事务可能并没有传到从库上。 2半同步复制 介于异步复制和全同步复制之间主库在执行完客户端提交的事务后不是立刻返回给客户端而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制半同步复制提高了数据的安全性同时它也造成了一定程度的延迟这个延迟最少是一个TCP/IP往返的时间。所以半同步复制最好在低延时的网络中使用。 半同步复制原理 事务在主库写完binlog后需要从库返回一个已接受才放回给客户端 mysql5.5版本以后以插件的形式存在需要单独安装 确保事务提交后binlog至少传输到一个从库 不保证从库应用完成这个事务的binlog 性能有一定的降低 网络异常或从库宕机卡主库直到超时或从库恢复 该方案优点 利用数据库原生功能比较简单 该方案缺点 主库的写请求时延会增长吞吐量会降低 2.数据库中间件 流程 1所有的读写都走数据库中间件通常情况下写请求路由到主库读请求路由到从库 2记录所有路由到写库的key在主从同步时间窗口内假设是500ms如果有读请求访问中间件此时有可能从库还是旧数据就把这个key上的读请求路由到主库。 3在主从同步时间过完后对应key的读请求继续路由到从库。 相关的中间件有 1canal:是阿里巴巴旗下的一款开源项目纯Java开发,基于数据库增量日志解析提供增量数据订阅消费目前主要支持了MySQL。 2otter也是阿里开源的一个分布式数据库同步系统尤其是在跨机房数据库同步方面有很强大的功能。它是基于数据库增量日志解析实时将数据同步到本机房或跨机房的mysql/oracle数据库。 两者的区别在于 otter目前嵌入式依赖canal部署为同一个jvm目前设计为不产生Relay Log。 otter目前允许自定义同步逻辑解决各类需求。 该方案优点 能保证绝对一致 该方案缺点 数据库中间件的成本较高 缓存记录写key法 写流程 1如果key要发生写操作记录在cache里并设置“经验主从同步时间”的cache超时时间例如500ms 2然后修改主数据库 读流程 1先到缓存里查看对应key有没有相关数据 2有相关数据说明缓存命中这个key刚发生过写操作此时需要将请求路由到主库读最新的数据。 3如果缓存没有命中说明这个key上近期没有发生过写操作此时将请求路由到从库继续读写分离。 该方案优点 相对数据库中间件成本较低 该方案缺点 为了保证“一致性”引入了一个cache组件并且读写数据库时都多了缓存操作。 以上就是数据库主从同步一致性方案详解更多分布式大数据分布式文件系统和分布式数据库的一致性可以参考 阿里P8架构师谈分布式数据库数据一致性的原理、与技术实现方案 你可能也喜欢: 阿里P8架构师谈MySQL行锁、表锁、悲观锁、乐观锁的特点与应用 阿里P8架构师谈MySQL有哪些存储引擎各自的优缺点应用场景 阿里P8架构师谈架构设计之数据库垂直、水平拆分六大原则阿里P8架构师谈MySQL数据库的索引原理、与慢SQL优化的5大原则 阿里P8架构师谈分布式系统全局唯一ID简介、特点、5种生成方式最全MySQL面试60题和答案