总体架构

云溪数据库是一款基于RAFT分布式协议研发的新型NEWSQL数据库,相较于传统数据库具有以下特点:

  • 分布式架构,拥有良好的拓展性,支持在线扩缩容

  • 去中心化,所有节点均可对外提供服务

  • 支持高可用,在少数副本失效的情况下,数据库能够自己进行数据恢复和故障转移,对业务透明

  • 支持ACID事务,对强一致需求的场景友好

  • 全面兼容Mysql和PostGresql,大多数场景下可以直接替换Mysql和PostGresql

在架构设计上,云溪分布式数据库将整体架构拆分成多个模块,各模块之间互相连接组成完整的数据库,系统架构图如下:

总体架构 - 图1

SQL层:负责接收客户端的连接,执行sql的解析和优化,并生成分布式执行计划

事务层:负责确保数据的完整性和一致性,提供MVCC并发访问机制

分发层:维护集群信息,比如集群有哪些节点,数据在这些节点是如何分配的,这些节点是否还在线,如何实现跨节点调度和运算等,同时负责将客户端请求发送到需要返回数据的节点,

副本层:云溪数据库底层存储的是一个巨大的Key-Value键值对,我们将它划分为很多个不同的range,每个range都会有多个副本存储在不同的节点,每个range和它的副本通过RAFT协议确保数据的一致性

存储层:云溪数据库底层存储采用rocksdb,通过批量存储技术规避磁盘随机写入的问题,数据首先写入到内存中,构建一颗有序小树,随着小树越来越大,内存的小树会flush到磁盘上,磁盘中的树定期做merge操作,合并成一颗大树,同时去除重复的key-value值,以优化读写性能