TiKV-用于云原生的分布式键值数据库



8月28日,在Kubernetes,Prometheus和其他针对现代云应用程序的开放源代码项目的支持下,CNCF(云原生计算基金会) 宣布在其沙盒中采用一种新产品-TiKV

这个分布式,键值交易数据库是TiDB的附加产品, TiDB是一种分布式数据库管理系统,具有OLTP和OLAP功能,并与MySQL协议兼容...但是让我们一一讨论。

TiDB作为父母


让我们从中国公司PingCAP Inc.创建的“父” TiDB项目开始。



此DBMS的第一个主要公共发行版本-1.0-不到一年之前就已发布。 它的主要功能是“混合性”,结合了事务处理和分析数据处理(混合事务处理/分析处理,HTAP),以及已经提到的与MySQL协议的兼容性。 当提到其他功能对于新DBMS来说已经很常见时,TiDB就会变得更加完整,例如水平可伸缩性,高可用性和严格的ACID合规性。

TiDB的一般体系结构如下:



由于TiDB提供NoSQL可伸缩性和ACID保证,因此将其归类为NewSQL 。 作者并没有掩盖自己在NewSQL其他代表Google SpannerF1的启发下创建产品的事实。 但是,中国开发商坚持“选择技术时的最佳实践和解决方案”。 特别是,他们选择了一种算法来解决Raft共识问题(代替Spanner中使用的Paxos ), RocksDB存储(代替分布式文件系统)以及Go(和Rust)作为编程语言。

PingCAP的联合创始人兼首席执行官-Max Liu在报告“ 我们如何构建TiDB ”中可以找到有关TiDB设备的许多详细信息,我们将返回与TiKV密切相关的一些信息。 TiDB源代码在免费的Apache许可证v2下分发 。 在其主要用户中 ,提到了联想,魅族,北京银行,中国工商银行等。

TiKV是什么?TiDB(不仅在世界上)将发挥什么作用?

TiKV架构和功能


让我们回到TiDB的一般体系结构,稍有不同:



您可以看到TiDB本身提供了SQL实现和MySQL *兼容性,而其余的工作则分配给了TiKV集群。 这是什么“余下的工作”? 这是更详细的图:



*在有关TiDB中与MySQL兼容层的两张图片中。
表到键值的转换发生在查询中:

INSERT INTO user VALUES (1, "bob", "huang@pingcap.com"); INSERT INTO user VALUES (2, "tom", "tom@pingcap.com"); 

...事实证明:



TiDB中的索引是普通对,其值指示数据线:



TiKV方案说明:

  • KV API-一组用于写入/读取数据的程序接口;
  • 协处理器 -用于支持分布式计算的协处理器框架(与HBase相同);
  • 交易 -一种类似于Google Percolator的交易模型(分两个阶段提交协议;使用时间戳分配器;另请参见与Spanner的比较 );
  • MVCC (MultiVersion并发控制),用于不带锁和ACID事务的读取(数据带有版本标记;对当前事务所做的任何更改直到提交时才对其他事务可见);
  • Raft KV-已经提到的用于水平缩放和数据一致性的Raft算法; 它在Rust中的实现是从etcd移植的(已通过广泛利用进行了验证); 顺便说一句,TiKV的作者宣称“对100+ TB数据的简单可伸缩性”。
  • RocksDB-键值类型的本地存储,在大型生产项目中也已经建立了良好的应用(Facebook);
  • 布局驱动程序 -集群的“大脑”,根据Google Spanner的概念创建,负责存储有关区域的元数据,支持所需数量的副本,甚至负载分配(使用Raft)。



如果我们概括主要组件的互连,我们将得到以下信息:

  • 每个TiKV群集节点都有一个或多个存储库 (RocksDB)。
  • 每个存储库都有许多区域
  • 区域是“键值数据移动的基本单位”,它被复制(使用Raft)到许多节点。 这样的副本集形成了Raft组
  • 最后,如您所见,管理该群集的Placement Driver本身就是一个群集。

TiKV安装和测试


TiKV代码库主要是用Rust编写的,但也具有其他语言(如C ++中的RocksDB和Go中的gRPC)的多个第三方组件。 根据相同的免费Apache许可v2 分发

如本文开头所述,TiKV最初是TiDB的重要组成部分,但今天它既可以在此DBMS中运行,也可以单独运行。 (但无论如何,其操作都需要使用Go语言编写并作为单独组件分发的Placement Driver )。

与TiDB DBMS一起启动TiKV的最短指令要求使用Git,Docker(17.03 +),Docker Compose(1.6.0 +),MySQL Client,具体如下:

 git clone https://github.com/pingcap/tidb-docker-compose.git cd tidb-docker-compose && docker-compose pull docker-compose up -d 

这些命令的结果将是TiDB集群的部署,该集群默认包含以下组件:

  • 1个实际TiDB副本;
  • TiKV 3份;
  • 3个Placement Driver实例;
  • Prometheus和Grafana (用于监视和图形)
  • TiSpark 2份(主+从) (在TiDB / TiKV之上用于启动Apache Spark以执行复杂的OLAP请求的层)
  • TiDB-Vision的 1个实例(用于可视化Placement Driver)

扩展的DBMS的进一步工作:

  • 通过MySQL客户端连接: mysql -h 127.0.0.1 -P 4000 -u root ;
  • 用于查看群集状态的Grafana Web界面http://localhost:3000 admin / admin下的http://localhost:3000 ;
  • TiDB-Vision Web界面提供有关群集中的负载平衡和节点上的数据迁移的信息http://localhost:8010 ;
  • Spark Web界面http://localhost:8080 (通过spark://127.0.0.1:7077访问TiSpark)。

如果您想要一个不太标准的TiDB集群 (即调整其大小,使用的Docker映像,端口等),则在克隆tidb-docker-composit存储库后,您可以编辑Docker Compose的配置:

 $ cd tidb-docker-compose $ vi compose/values.yaml $ helm template compose > generated-docker-compose.yaml $ docker-compose -f generated-docker-compose.yaml pull $ docker-compose -f generated-docker-compose.yaml up -d 

要进行更多自定义,请参阅“ 自定义TiDB群集 ”以获取有关TiDB,TiKV,Placement Driver和其他详细信息的配置来源的信息。

为了方便地将TiDB部署到Kubernetes集群,已准备了同名操作员-TiDB Operator 。 它在Helm图表中,因此可以将安装简化为以下命令(来自TiDB DevConf 2018的演示幻灯片):



顺便说一句,同一演示文稿谈到了TiDB开发人员在监视此DBMS方面的观点。 不幸的是,文字描述是中文的,但可以从这些幻灯片中获得大致的想法:




直接返回主题TiKV-该项目已发布其发布指南以进行测试:


对于生产中TiKV部署,无论是否有TiDB,Ansible都可以进行现成的开发。

最后,提供了与TiKV一起使用的接口:


开发人员的计划还包括在Rust上创建一个客户端。

总结


TiKV作为中国公司一个较大的开源项目的一部分,已经在相当广泛的圈子中赢得了名声。 GitHub的统计数据不仅显示了3600颗以上的星星,而且还显示了将近500个fork,以及将近100个贡献者(尽管其中只有十二个贡献了10个以上的提交)。

将TiKV加入CNCF 项目的数量 ,这是此类项目中的第一个,这一事实也清楚地表明了云原生社区对该产品的认可...并应推动外部人员(即母公司及其DBMS外部)更积极地开发其代码库)。

聚苯乙烯


另请参阅我们的博客:

Source: https://habr.com/ru/post/zh-CN421903/


All Articles