互联网一致性架构设计 -- DB主从一致性
需求分析
大部分互联网的业务都是 “ 读多写少 ” 的场景,数据库层面,读性能往往成为瓶颈。如下图:业界通常采用 “ 一主多从,读写分离,冗余多个读库 ” 的数据库架构来提升数据库的读性能。
这种架构的一个潜在缺点是,业务方有可能读取到并不是最新的旧数据:
- 系统先对DB-master进行了一个写操作,写主库
- 很短的时间内并发进行了一个读操作,读从库,此时主从同步没有完成,故读取到了一个旧数据
- 主从同步完成
解决方法
- 半同步复制
- 强制读主
- 数据库中间件
- 缓存记录写key
半同步复制
不一致是因为写完成后,主从同步有一个时间差,假设是500ms,这个时间差有读请求落到从库上产生的。有没有办法做到,等主从同步完成之后,主库上的写请求再返回呢?答案是肯定的,就是大家常说的“半同步复制”semi-sync:
- 系统先对DB-master进行了一个写操作,写主库
- 等主从同步完成,写主库的请求才返回
- 读从库,读到最新的数据(如果读请求先完成,写请求后完成,读取到的是“当时”最新的数据)
优点:利用数据库原生功能,比较简单
缺点:主库的写请求时延会增长,吞吐量会降低
强制读主库
如果不使用“增加从库”的方式来增加提升系统的读性能,完全可以读写都落到主库,这样就不会出现不一致了:
优点:“一致性”上不需要进行系统改造
缺点:只能通过cache来提升系统的读性能,这里要进行系统改造
数据库中间件
如果有了数据库中间件,所有的数据库请求都走中间件,这个主从不一致的问题可以这么解决:
- 所有的读写都走数据库中间件,通常情况下,写请求路由到主库,读请求路由到从库
- 记录所有路由到写库的key,在经验主从同步时间窗口内(假设是500ms),如果有读请求访问中间件,此时有可能从库还是旧数据,就把这个key上的读请求路由到主库
- 经验主从同步时间过完后,对应key的读请求继续路由到从库
优点:能保证绝对一致
缺点:数据库中间件的成本比较高
缓存记录写key法
既然数据库中间件的成本比较高,有没有更低成本的方案来记录某一个库的某一个key上发生了写请求呢?很容易想到使用缓存。
当写请求发生的时候:
- 将某个库上的某个key要发生写操作,记录在cache里,并设置“经验主从同步时间”的cache超时时间,例如500ms。
- 修改数据库。
而读请求发生的时候:
- 先到cache里查看,对应库的对应key有没有相关数据
- 如果cache hit,有相关数据,说明这个key上刚发生过写操作,此时需要将请求路由到主库读最新的数据
- 如果cache miss,说明这个key上近期没有发生过写操作,此时将请求路由到从库,继续读写分离
优点:相对数据库中间件,成本较低
缺点:为了保证“一致性”,引入了一个cache组件,并且读写数据库时都多了一步cache操作
相关推荐
### DB主从一致性架构优化4种方法 #### 需求背景 在大多数互联网应用场景下,数据处理呈现出明显的“读多写少”特征。为了提高读取性能并满足大规模用户需求,很多系统采取了“一主多从”的数据库架构设计。这种...
### 主从DB与Cache一致性详解 #### 一、引言 在现代软件系统中,为了提高性能和可扩展性,通常采用主从数据库复制技术以及缓存机制。然而,在这种架构下,由于主从数据库之间的数据同步延迟以及并发读写操作的存在...
总的来说,云原生数据库通过创新的架构设计,如日志优化、链式复制、Quorum机制、计算与存储分离等,解决了传统数据库在云环境中的性能问题,提高了数据一致性和可用性,降低了运维成本。这些技术的出现,不仅推动了...
Patroni应配置为在故障切换后自动同步这些状态信息,确保一致性。 在实际操作中,可以参考`pg+patroni+timescaledb.docx`文档,它应该包含了详细的步骤和示例配置,帮助你更顺利地完成整个流程。同时,确保定期备份...
通过这样的架构设计,不仅可以提升系统的可用性和扩展性,还能有效降低单一数据库节点的压力,提高整体性能。 #### 二、MySQL主从配置 ##### 2.1 主库配置 **步骤1:修改配置文件** - **位置**:`C:\ProgramData...
MySQL 5.7主从复制是一种常见的数据库高可用性和负载均衡解决方案,允许数据在多个服务器之间同步,确保数据的一致性,并提供冗余以防止单点故障。以下是对这一技术的详细阐述: **1. MySQL主从复制的基本原理** ...
在现代的互联网应用中,数据库作为关键的数据存储层,其稳定性和可用性至关重要。为了提高数据库系统的可靠性和响应速度,许多企业会采用MySQL主从互备(Master-Slave Mutual Backup)方案。这种架构不仅可以实现...
MySQL 数据库主从配置 MySQL 数据库主从配置是指在 MySQL 数据库中实现主从复制的...MySQL 数据库主从配置是实现数据库实时同步的重要步骤,该过程需要在主服务器和从服务器上进行配置,以确保数据的安全和一致性。
- 定期检查主从节点的数据一致性,确保复制无误。 - 注意,如果主节点出现故障,需要手动干预来恢复并重新设置复制关系。 这个实施方案不支持自动的主从切换,因此在主节点出现问题时,需要人工介入完成数据同步...
数据库架构原则是设计数据库架构的基础,包括高可用、高性能、一致性和扩展性四个方面。 * 高可用:数据库架构应该能够提供高可用的服务,避免单点故障。 * 高性能:数据库架构应该能够提供高性能的服务,满足业务...
`锁定所有表,确保数据一致性。 - 备份MySQL数据目录,如`tar zcvf mysql.tar.gz mysql`,然后通过`scp`命令传输到从服务器。 - 在从服务器上解压备份文件,`tar zxvf mysql.tar.gz`,并使用`chown`命令更改所有权...
MySQL主从备份是一种常见的数据冗余和高可用性解决方案,它允许数据在多个服务器之间同步,确保即使主服务器出现故障,从服务器也能接管并继续提供服务。在这个场景中,我们有两台服务器:A服务器作为主服务器运行...
为了确保主从服务器之间的数据一致性,可以通过脚本来实现自动同步。这里给出一个简单的脚本示例,用于监控从服务器的复制状态,并在复制失败时重新连接主服务器: ```bash #!/bin/bash while true do status=`/usr...
- 复制冲突:主从数据库同时进行写操作可能导致冲突,需设计处理策略。 8. **适用场景** - 数据备份与恢复:从服务器可以作为数据备份,便于恢复。 - 负载均衡:读写分离,减轻主服务器压力。 - 高可用性:主...
1. **Docker**:一种轻量级的操作系统虚拟化技术,允许开发者将应用程序及其依赖项打包成一个便携的容器,从而提高部署的灵活性和一致性。 2. **MySQL**:全球最流行的开源关系型数据库管理系统之一,因其性能优越...
本文档旨在通过一个具体的实例来展示如何实现两台服务器之间的数据同步,并确保数据的一致性和可靠性。 #### 二、环境设置与准备 **环境详情:** - **主机A:** IP地址为192.168.1.43,用户名为backup,密码为...
5. **锁定表并获取状态信息**:为了确保数据的一致性,在复制过程中需要锁定表,并获取二进制日志的当前位置。 ```sql FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; ``` #### 三、备份主服务器数据 1. *...