
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 Spanner和
F1的启发下创建产品的事实。 但是,中国开发商坚持“选择技术时的最佳实践和解决方案”。 特别是,他们选择了一种算法来解决
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外部)更积极地开发其代码库)。
聚苯乙烯
另请参阅我们的博客: