Shardingsphere分库分表技术应用(一)

发布时间 2023-08-14 08:45:39作者: VincentYew
Shardingsphere分库分表技术应用(一)

1、开源的分布式数据库生态技术

  • ShardingShpere-JDBC 轻量级Java框架
  • ShardingShpere-Proxy 数据库代理
  • ShardingShpere-sidecar(规划中) -kubernates的云原生数据库代理

2、高性能数据库集群架构模式(V5.1.1)

海量数据,利用数据库集群提升性能;高性能集群架构模式:

  • 读写分离
  • 数据分片

3、读写分离架构

读写分离原理:将数据库的读写操作分散到不同的节点

 高性能架构模式-CAP定理:布鲁尔定理,一致性(consistence)、可用性(availability)、分区容错性(Partition Tolerance),当涉及读写操作时,只能保证三者中的两个,另一个必须被牺牲。

  • C一致性(Consistency): 对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。
  • A可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。
  • P分区容忍性(Partition Tolerance) : 当出现网络分区后,系统能够继续“履行职责”

CAP理论中的C在实践中是不可能完美实现的,即使无法做到强一致性,但应用可以采用适合的方式达到最终一致性

  • 基本可用(Basically Available) : 分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
  • 软状态(Soft State):允许系统存在中间状态,而该中间状态不会影响系统整体可用性。这里的中间状态就是CAP理论中的数据不一致。
  • 最终一致性 (Eventua Consistency) : 系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。

读写分离的问题:读写分离分散了数据库读写操作的压力,但没有分散存储压力,为了满足业务数据存储的需求,就需要将存储分散到多台数据库服务器上

4、数据库分片架构

数据分片:将存放在单一数据库中的数据分散地存放至多个数据库或表中,以达到提升性能瓶颈以及可用性的效果。数据分片的有效手段是对关系型数据库进行 分库和分表。数据分片的拆分方式又分为 垂直分片和水平分片

4.1 垂直分片

  • 垂直分库   不同的数据库存放不同的业务数据
  • 垂直分表  将列数比较多且不常用的列拆分出去

垂直分库:按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。

垂直拆分可以缓解数据量和访问量带来的问题,但无法根治。如果垂直拆分之后,表中的数据量依然超过单节所能承载的阈值,则需要水平分片来进一步处理。

垂直分表:适合将表中某些不常用的列,或者是占了大量空间的列拆分出去      用户表ID Name  age NickName Desc  

水平分表:表行数特别大,水平分表属于水平分片

4.2 水平分片

单表进行切分后,是否将多个表分散在不同的数据库服务器中,可以根据实际的切分效果来确定。
水平分表:单表切分为多表后,新的表即使在同一个数据库服务器中,也可能带来可观的性能提升,如果性能能够满足业务要求,可以不拆分到多台数据库服务器,毕竟业务分库也会引入很多复杂性;
水平分库:”如果单表拆分为多表后,单台服务器依然无法满足性能要求,那就需要将多个表分散在不同的数据库服务器中。

5、读写分离和数据分片实现方式

  1. 程序代码封装:在代码中抽象一个数据访问层(Dao/Mapper),实现读写分离和数据库服务器连接的管理
  2. 数据库中间件封装:独立一套系统出来,实现读写分离和数据库服务器连接的管理,对于业务服务器来说,访问数据库和中间件没有区别,在业务服务器来讲,中间件相当于数据库
  • 常用解决方案:
  • Apache ShardingSphere  (程序级别和中间件级别)
  • Mycat (中间件级别)