ShardingSphere

106 阅读6分钟

一、分布式数据库的核心功能

1、分布式存储

数据的存储不再受单机存储的制约,可以通过服务器的数量增加存储量

2、计算存储分离

数据量多了,对应的算例也多了,如果每一台分布式存储里面都有一个计算节点,那么就会造成浪费。存储和计算的需求对系统的要求可能是不同的。用计算存储相分离,当我们需要提高算力的时候增加计算几点,当我 们需要增加存储量的时候增加存储节点,而计算节点是无状态的。

3、分布式事务

因为我们把数据库通过分布式的形式分开了之后,事务就是一个很麻烦的事情。所以做一个高性能的、完全支持ACID原义的分布式事务引擎

4、弹性伸缩

可以随时随地动态地对数据节点进行扩容和缩容

5、多数据副本

自动将数据以强一致、高性能的方式复制至跨机多副本

6、HTAP

当我们先将数据以行存、列存的方式进行存储的时候,我们完全可以通过同样的一条sql去访问OLTP事务型和OLAP分析型查询。实现方案

  • newsql(进取型)
    国内的tidb。以更高的性能换取稳定性的缺失和运维经验的不足。newsql是属于重新设计的数据库的存储结构。需要经过时间的积累去验证。
  • 中间件(稳定型)
    牺牲部分性能以保证稳定性和运维经验的复用。存储仍然用的mysql或oracle,添加了中间件性能一定会有所下降,因为中间肯定会做一些事情。

newSQL的分类

  • 新架构
  • 透明化分片中间件
  • 云数据库

二、实现与规划(4.x)

ShardingSphere由两个组件构成:Sharding-JDBCSharding-Proxy

  • Sharding-JDBC是和业务的应用端部署在一起的

  • Sharding-Proxy是一个独立的进程,是中心化的应用,是无状态的,跨语言的。dba可以把它当数据库去用。一般在管理端用。

  • 注册中心里面包含了相关配置,所以proxy和jdbc是共享的。

    项目结构

    1、数据分片

    项目结构

    2、分布式事务

    事务分为两种类型:

  • 强一致性事务:XA,谷歌的BigTable论文:Percolator等两阶段方式的分布式事务(刚性事务)。
    最大的问题就是:并发性能急剧下降,可用性急剧下降,提交阶段失败阶段

  • 柔性事务:base,一阶段事务。强调最终一致性,不要求强一致性
    问题:一致性和隔离性,业务侵入。

sharding-sphere提供了一个很好的事务管理:sharding-transaction

项目结构


参考: blog.csdn.net/ShardingSph…
分布式事务解决方案: JDTX

项目结构

MVCC引擎:JDTX的核心,基于内存的,比数据库要快。MVCC只会存当前事务的热数据 WAL模块:当事务已经进入了WAL模块之后,事务已经算是结束了,不用真正落到数据库去
JDTX设计亮点:

项目结构


参考: wenku.baidu.com/view/218d5d…
JDTX自研了一个MVCC的引擎,不管是mysql还是其他,都是用的mvcc去做的事务的隔离级别。

事务有两种实现方式:
一种是多版本快照(MVCC)
另一种就是加锁

mysql是加锁+MVCC

3、弹性伸缩

分为两部分:

  • 迁移引擎:把它当成了mysql的从库,迁移的时候有全量数据的迁移和增量数据的迁移,全量数据有一个历史数据迁移作业,它会把当前这一个位点的所有数据通过分布式调度迁移到新的库去,我们的业务数据还是写到旧库中去。通过订阅binlog的当时去把binlog伪装成一个mysql的从 库,通过ShardingScaling迁移到新库去。把应用切到新的数据库的访问去。
  • 调度引擎(用了elasticJob)

4、分布式治理

服务治理
  • 配置动态化

  • 跨机房高可用

  • 熔断、禁用、失效转移

    数据治理
  • 数据权限管理

  • 数据脱敏

  • 全链路数据压测

  • sql审核

  • sql防火墙

    可观察性
  • APM统计

  • 调用链

  • 应用拓扑图

  • 监控报警

三、开源与社区

1、可插拔架构

2、易用性提升

3、sql兼容度提升

4、多数据副本

5、云原生

6、多元数据融合平台