分库分表

利用中间件MyCat 客户端sharding-jdbc

优点: 

  • 解决了单库大数据,高并发的性能瓶颈
  • 拆分规则封装好,对应用端几乎透明,开发人员无需关系拆分细节
  • 提高了系统的稳定性和负载能力

缺点:

  • 拆分规则很难抽象
  • 分片事务一致性难以解决
  • 二次扩展时,数据迁移,维护难度大,比如: 开始我们按照用户id对2求模,但是随着业务的增长,2台数据库难以支撑,还是继续拆分为4个数据库,那么这时就需要做数据的迁移了

总结:

世界上的万物没有完美的,有利就有弊,就像数据切分一样,无论是垂直切分,还是水平切分,它们解决了海量数据的存储和访问性能问题,但也随之而来的带来了很多新问题,它们的共同缺点有:

  • 分布式的事务问题;
  • 跨库join问题
  • 多数据源的管理问题

针对多数据源的管理问题,主要有两种思路:

1.客户端模式,在每个应用模块内,配置自己需要的数据源,直接访问数据库,在各个模块内完成数据的整合

2.中间代理模式,中间代理统一管理所有的数据源,数据库层对开发人员完全透明,开发人员无需关注拆分的细节

MyCat: 

MyCat是一个开源的分布式数据库系统,前端的用户可以把它看成是个数据库代理,用MySql客户端和命令行工具都可以访问,而其后端则是用MySQL原生的协议与多个MySQL服务之前进行通信.MyCat的核心功能是分库分表,即将一个大表水平切分成N个小表,然后存放在后端的MySQL数据库中.

使用场景:

  • 单纯的读写分离,此时配置最为简单,支持读写分离,蛀虫切换
  • 分库分表,对于超过1000W的表进行分片,最大支持1000亿的数据
  • 多租户应用,每个应用一个数据库,应用只连接MyCat,程序本身不需要改造;
  • 代理Hbase,分析大数据

 

分布式事务解决方案:

 

分布式事务解决方案:
一:
1.XA协议的两阶段提交
XA是由X/Open组织提出的分布式事务的规范
由一个事务管理器(TM)和多个资源管理器(RM)组成
提交分为两个阶段:prepare和commit

MySQL5.7及以上均支持XA协议
MySQL Connector/J 5.0以上 支持XA协议
Java系统中,数据源采用Atomikos

2.Atomikos分布式事务(Spring)

二:
3.事务补偿机制
什么是事务补偿机制?
针对每个操作,都要注册一个与其对应的补偿(撤销)操作
在执行失败时,调用补偿操作,撤销之前的操作

优点: 逻辑清晰,流程简单
缺点: 数据一致性比XA还要差,可能出错的点比较多
TCC属于应用层的一种补偿方式,程序员需要写大量代码


三:
4.基于本地消息表
采用BASE原理,保证事务最终一致
在一致性方面,允许一段时间内的不一致,但最终会一致
在实际的系统当中,要根据具体情况,判断是否采用

优点: 避免了分布式事务,实现了最终一致性
缺点: 要注意重试时幂等性操作

四:
基于MQ的最终一致方案
原理.流程与本地消息表类似
不同点: 本地消息表改为MQ
定时任务改为MQ的消费者

优点:
不依赖定时任务,基于MQ更高校,更可靠
适合与公司内的系统

不同公司之前无法基于MQ,本地消息表更合适

 

posted @ 2021-08-07 21:32  泡沫幻影  阅读(57)  评论(0编辑  收藏  举报