程序员必备!关系型数据库架构的超强总结( 二 )


2. 数据一致性:为尽可能少的减少数据丢失 , 推荐开启单向半同步技术 。同时在老Master恢复后会尽可能的弥补未及时同步到新Master的数据 。由于同步依赖Binlog , 理论上也是无法保证主从数据绝对一致 。
3. 扩展性:可以做读写分离 , 可以新增slave扩展读服务能力 。
B. MHA (Master High Availability)

程序员必备!关系型数据库架构的超强总结

文章插图
架构说明:
1. 从MySQL主从同步架构衍生出来的 , 使用半同步技术 , 所以至少有两个从实例(Slave) 。所以整体架构为一主两从 , 两个从库不是级联关系 。
功能:
1. 高可用:Master不可用时 , 自动从两个Slave里选出包含Binlog最多的Slave , 并提升为Master 。同时更改另外一个Slave的Master为新的Master 。Master异常时 , Slave上的拉取的Binlog如果有丢失(master或者slave故障时) , 很容易出现复制中断 , 因此这种高可用机制并不总是有效 。
2. 数据一致性:为了尽可能少的丢失Binlog , 主从同步推荐使用半同步技术 。在网络异常的情况下 , 半同步有可能降级为异步同步 。MHA只是尽最大程度保证数据不丢失 。且由于同步依赖的是Binlog , 主从的数据理论上也并不能保证严格一致 。
3. 扩展性:可以提供读写分离服务 , 可以新增slave节点扩展读服务能力 。
C. PXC (Percona XtraDB Cluster)
程序员必备!关系型数据库架构的超强总结

文章插图
架构说明:
1. 可以两个节点 , 推荐三个节点(防脑裂) , 组成一个Cluster 。三节点同时提供读写服务 。数据是独立的三份 , 不是共享存储 。
2. 事务提交是同步复制 , 在所有从节点都同步提交 。
功能:
1. 高可用:三节点同时提供读写服务 , 挂任意一个节点都没有影响 。
2. 数据一致性:数据强同步到所有节点 , 不丢数据 。要求有主键 , 某些SQL不支持同步 。
3. 扩展性:事务提交是同步复制 , 性能受限于最差的那个节点 。
4. 其他:多主复制 , 但不能同时写同一行数据(乐观锁 , 会报死锁类错误) 。另外 , 有写放大弊端 。
4. 分布式数据库中间件的架构方案A. 分布式数据库DRDS
程序员必备!关系型数据库架构的超强总结

文章插图
架构说明:
1. DRDS Server节点是一组无状态的程序 , 响应SQL请求并做分库分表路由转换和SQL改写、聚合计算等 。支持库和表两级维度拆分 , 支持多种灵活的拆分策略 , 支持分布式事务 。
2. MySQL节点主要是存储数据、主备双向同步架构 , 外加MySQL的PaaS平台提供高可用切换、自动化运维能力 。
3. 围绕这个架构的还有数据同步组件(精卫) , 实现小表广播、异构索引表等能力 。
4. 该架构最新版本在只读实例基础上实现了MPP并行计算引擎 , 支持部分OLAP查询场景 。
功能:
1. 高可用:计算节点(DRDS Server节点)的高可用通过前端负载均衡设备实现 , 存储节点(MySQL)的高可用靠ADHA实现 。RTO在40s左右 , RPO>=0 。
2. 数据一致性:MySQL主备同步是半同步或者异步 。ADHA最大可能的降低MySQL故障切换时的主备不一致概率 , 理论上无法保证绝对强一致 , RPO>=0 。
3. 扩展性:计算和存储节点都可以分别扩容 。存储的扩容通过MySQL实例的增加以及数据的迁移和重分布等 。
4. 运维:故障时 , 主备强切后 , 会有一定概率出现主备同步因为数据不一致而中断 。
B. 分布式数据库TDSQL
程序员必备!关系型数据库架构的超强总结

文章插图
架构说明:
1. 计算节点:由一组无状态的网关节点组成 , 负责SQL路由、MySQL主故障时的路由切换等 。
2. 调度系统:用zk集群做元数据管理、监测故障和做数据库故障切换、弹性伸缩任务等 。
3. 存储节点:MySQL主备架构 , 一主两从 , 做强同步或者异步同步 。
4. 支持全时态数据模型
功能:
1. 高可用:网关前端推测也有负载均衡 , MySQL主备切换依赖zk判断 , RTO在40s左右
2. 数据一致性:一主两备使用强同步的时候 , 基本可以保证RPO=0. 如果是异步 , 可能切换时会有延迟 。


推荐阅读