MatrixCube简介

    我们首先需要阐明一些MatrixCube的核心概念。

    MatrixCube分布式系统包括一定数量的主机,数据正是存放在这些机器中——我们把集群中的每台计算机称之为Store

    Shard

    数据库中的数据是按逻辑组织成表,而数据又可以分成不同的分区进行存储,如此可以得到更好的扩展性。因此,数据在Matrixcube集群中分片存储,每个数据分片我们称之为一个Shard,而一个Store中可以管理多个Shard;当Shard的存储容量超过限制时,会进行分裂(Split)。

    Replica

    为了保证存储服务的高可用性,每个Shard的数据需要存储多份,并且分布在不同的Store上,Shard的一个数据副本我们称之为一个Replica。所以一个Shard会包含多个Replica,并且每个Replica中的数据都是相同的。

    Raft-group与Leader

    多个数据副本存储在不同的Store上,一旦其中的一个副本更新,其他的副本也必须与之保持一致。无论客户端向哪个副本发出查询请求,都将得到相同的结果。为了保证数据的一致性,我们采用Raft协议来实现数据共识,一个Shard的多个Replica会组成一个Raft-Group
    在每个Raft-group中,将会选出一个Leader来代表整个组,所有的读写请求仅仅由这个处理。

    更多相关信息:

    Prophet

    Prophet是一个调度模块,主要职责是实现Auto-Rebalance,从而维持每个ShardReplica数目均衡(本质上是为了保持Store之间的存储量与吞吐量均衡)。集群中初始的三个Store便是全部的Prophet Nodes

    更多相关信息:

    Raftstore

    Raftstore 是MatrixCube的核心组件,实现了MatrixCube中大多数重要功能:

    • Metadata storage:存储StoreShardRaft-log的元数据信息。

    • Multi-Raft management:管理了StoreShardReplicaRaft-Group之间的相关关系,实现多个Raft-Group,Leader选举和再选举。

    • Global Routing:ProphetEvent Notify机制构建了一个全局路由表;读写路由将也基于此路由表。

    强一致性*

    MatrixCube实现了强大的一致性,它保证在任何数据成功写入之后,之后的读取将获得最新的值,而无论来自哪个节点。

    MatrixCube实现的分布式存储服务具有容错性、高可用性。若一个Shard拥有2*N+1Replicas,那么只要失效的Replicas不超过N个,系统都将正常运转。
    例如,有3个Stores的集群可以在1个Store下线时继续运转;有5个Stores的集群可以在2个 Stores下线的情况运转。

    Shard Splitting

    Shard容量大小有一定限制。每当Shard超过其存储容量限制时,MatrixCube将Shard分裂为两个,并保持分裂后的每个Shard具有相同的存储量。
    你可以在此处了解有关此过程的详细叙述:。

    Auto-Rebalance

    分布式系统应该充分利用所有节点的计算能力和存储能力。对于MatrixCube集群,当增加或减少Stores时,将发生Auto-Rebalance,它将在Store之间转移数据,以达到每个Store的负载平衡。

    详情请见[Auto-Rebalance的工作机制]:(matrixcube-auto-rebalance-scheduling.md)。

    Scale-out

    通过shard splittingauto-rebalance,MatrixCube分布式系统能够横向扩展,集群存储和吞吐量能力与Stores的数量成比例。

    MatrixCube对集群中每个数据存储引擎没有限制。换言之,任何存储引擎只要实现了MatrixCube定义的DataStorage接口,都可以搭建起基于MatrixCube的分布式系统。默认情况下,MatrixCube提供了一个基于Pebble的Key-Value存储引擎(是RocksDB的Go语言版本)。

    用户自定义读写