享学堂-架构师网课笔记-数据库-L1(Mysql数据架构)

Mysql 数据架构篇

MySQL在单表过大的时候,可以通过索引优化。例如postgresql提供了字段上的分表功能,通过某个字段取hash把数据平均分配到多个表中,一条sql可以通过分表索引,查找到具体哪个表再定位到哪个分表中。同时也可以通过中间件和代码逻辑进行分表分库。

MySQL架构设计

MySQL高可用架构设计可以通过数据库扩展来解决热备份,多活,故障切换,负载均衡,读写分离等。

Replication常用架构
常规复制架构(Master–Slaves)

在常规的使用中90%都是一个主多个从,都是从一个Master 复制到Slaves中。但是缺点也相当明细1)Master 不能停机,存在单点问题,停机不能进行写请求。2)slave过多会进行延时。
当master节点需要进行停机维护时,需要把一个slave节点进行提升,并且master会失去记录停机时间的binlog文件和post文件的位置。

在这里插入图片描述

Master 复制架构(Master–Master)–Master)

这里为了解决单点写问题,设置了两个master,从一个master读,同步到另外一个master然后从另外一个master写。并且可以通过一个第三方工具keepalive做IP漂移,当一个节点挂掉会自动同步到另外一个节点上去。
在这里插入图片描述

级联复制架构(Master — Slaves — Slaves …) …)

如果多个slave存在会增加master的压力,所以先同步到少量的slave中,然后再同步到多个slave中,这样的缺点是同步的延时更大了。
在这里插入图片描述

Dual Master 与级联复制结合架构(Master - Master - Slaves)

这种架构比较均衡,设置两个master作为写节点,其中一个master复制同步,另外一个负责接收写请求,这样可以解决单点master的问题,也解决了slave级联机延时问题。
在这里插入图片描述

Replication机制的实现原理

在这里插入图片描述
MySQL同步复制有两种方式,比较旧的就是异步复制,就是主机器的dump thread线程把文件发送到对方机器的IO thread 中并不进行等待对方同步完成回应后,就继续客户端操作,而slave节点并没有进行SQL thread,这样做容易造成数据不一致。一般来说,如果使用半同步复制,失败时会自动转为异步复制。
半同步复制过程如下
1,用户产生数据操作到binlog中
2,事件监听到binlog存在日志变化,如果有变化则通知dump线程
3,此时通知到slave机器有数据进行同步
4,从relay-log中获取binlog文件和pos位置,告诉master binlog文件和pot位置
5,把slave后面请求的文件位置和pos文件后的内容同步到slave,写relay-bin 日志,SQL根据根据进程relay-log 日志在slave中执行
6,relay-log 写完后给master答应成功。
7,这里有两个答应时机是在AFTER SYNC 还是 AFTER COMMIT,指的是在提交事务前进行应答wait等待,一般默认是after commit 即收到slave同步完成后进行客户端响应。

数据切分

何为数据切分,就是将一个数据库进行切分,保存到多个数据库中,以减轻单个数据库的压力。例如在项目初期的时候会把订单系统,物流系统的表全部统一到一个数据库中,造成当节点压力过大,而随着业务的发展会把库切分,而数据切分分为两种,垂直切分和水平切分。

垂直切分

垂直切分就是根据业务把表拆分到不同的数据库中,例如物流的库,商品库,订单库等分到不同的库中。垂直切分的优缺点很明显
优点就是
1,数据切规则简单明了,拆分规则明确
2,应用程序模块清晰,易于维护
3,数据维护容易维护
缺点:
1,存在跨库的join问题,需要在应用层面进行处理,需要业务的让步还是数据处理,需要平衡
2,对于单库访问非常频繁的大数据量的表依然存在问题,需要进行拆表处理,仍然存在问题
3,事务的处理复杂
4,切分到一定程度后会存在扩展性限制,过多的切分会带来系统的复杂而难以维护

在这里插入图片描述

数据的水平拆分

数据的水平拆分指定是根据表的某个字段,根据某种规则拆分到不同的数据表中,这种拆分根据单个表的
优点是
1,对业务影响较小,表的关联查询几乎能在数据库端完成
2,不会存在高性能数据库段和高负荷表遇到的瓶颈问题
3,应用程序段的架构改动较小
4,事务的处理相对简单
5,只要规则的切分定义得好,基本很难遇到扩展困难。
缺点是:
1,切分的规则相对复杂,很难分出一个能够满足的整个数据库
2,后期的数据维护难道有所增加,人工定位更加困难
3,应用的耦合程度高,可能对后面的数据迁移存在困难
4,夸节点合并整合问题,数据分页问题
在这里插入图片描述
几种典型分片的规则:
1,根据用户ID来求模,具有相同用户的数据放到同一个数据库中
2,按照日期,将不同日期的数据分散放到不同的数据库中
3,按照某个字段求模,或者根据特定范围分散到不同的数据库中

总结

在数据切分后数据的join也有了难度,所以在做数据切分的时候要做好合适的规划,提前切分好;能不切分的尽量不去切分;尽量通过数据冗余或者表分组(Table Group)来降低跨域join的可能性;数据中间件对join的优劣实现难以实现,尽量通过读取量小的join。
综上诉述,对数据进行切分会带来三个问题:
1,分布式事务问题
2,跨节点join问题
3,跨节点合并排序join问题
在PostgreSQL 中有pg_pathman 可以代替实现类似的功能,进行分区分表,可以值得研究。对比后续的应用端的插件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值