分库分表架构与框架

分库分表的实现方案分成三大类:客户端分片、代理分片和支持事务的分布式数据库。

 

  一、客户端分库分表框架

 使用分库分表的数据库的应用层直接操作分片逻辑,分片规则需要在同一个应用的多个节点间进行同步,每个应用层都嵌入切片的逻辑实现(分片规则),这一般通过依赖Jar包来实现,具体的实现方式分成三种:在应用层直接实现、通过定制JDBC协议实现、通过定制ORM框架实现。

分库分表架构与框架_第1张图片

1.1  在应用层直接实现 

  从应用层直接决定每次操作读取使用哪个数据库实例、哪个数据库、哪个表等。一般在公司内部会将这些逻辑进行封装,打包成Jar供公司内部项目使用。开源项目 dbsplit就是采用这种方式。

 优点:虽然侵入了业务,但实现起来比较简单,适合快速上线;

缺点:数据库保持的连接会比较多。

分库分表架构与框架_第2张图片

1.2 通过定制JDBC协议实现

流行的客户端分表框架Sharding JDBC便采用了这种方案。

优点:分库分表在JDBC内部实现,对业务层保持透明。

缺点:开发人员需要理解JDBC协议才能实现分库分表逻辑。

分库分表架构与框架_第3张图片

 

 

1.3 通过定制ORM框架实现

 在很多公司里是MyBatis配置文件的SQL中增加表索引来实现的。MyBatis配置文件如下:

分库分表架构与框架_第4张图片

 

二、代理分库分表框架

分片的路由规则配置在代理层,代理层对外提供与JDBC兼容的接口给应用层,应用层的开发人员不用关心分片规则,只需关心业务的实现逻辑。待业务 逻辑实现以后,在代理层配置路由规则即可。

分库分表架构与框架_第5张图片

 

通过代理分片实现 打框架有Cobar和Mycat等。

三、支持事务的分布式数据库。

有一些产品如OceanBase、TiDB直接对外提供可伸缩的体系架构,并提供一定的分布式事务支持,将可伸缩的特点和分布式事务的实现包装到分布式数据库内部实现,对使用者透明。

例如TiDB对外提供JDBC的接口,让应用层像使用MySQL等传统数据库一样来使用TiDB,而不需要关注其内部是如何伸缩、分片及处理分布式事务等等。

分库分表架构与框架_第6张图片

OceanBase:  由蚂蚁集团完全自主研发的金融级分布式关系数据库, 广泛应用于金融行业,低版本开源。

TiDB : TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(高可用架构HA)