前言:
在云计算和大数据的浪潮中,TiKV 以其卓越的性能和创新的架构,成为了云原生数据库领域的明星。作为一款开源的分布式事务型键值数据库,TiKV 不仅在技术上实现了突破,更在社区和生态建设上展现了其独特的魅力。本文将带您深入了解 TiKV 的核心特性、发展历程以及它在云原生技术生态中的重要作用。
TiKV 是一个开源的分布式事务型键值数据库。与传统的 NoSQL 系统不同,TiKV 不仅提供经典的键值 API,还提供符合 ACID 标准的事务 API。TiKV 采用 Rust 语言编写,由 Raft 驱动,最初由 PingCAP[1] 创建,用以补充 TiDB[2],这是一个兼容 MySQL 协议的分布式 HTAP 数据库。
TiKV('Ti' 代表钛)的设计灵感来自 Google 的一些杰出分布式系统,如 BigTable、Spanner 和 Percolator,以及近年来学术界的最新成就,例如 Raft 共识算法。
如果您对贡献 TiKV 感兴趣,或想从源代码构建它,请参见 CONTRIBUTING.md[3]。
TiKV 是 Cloud Native Computing Foundation[4](CNCF)的一个毕业项目。如果您是一个组织,想要帮助塑造以容器封装、动态调度和微服务导向的技术的演进,请考虑加入 CNCF。有关谁参与以及 TiKV 如何发挥作用的详细信息,请阅读 CNCF 的 公告[5]。
TiKV 通过 Rust 中实现的 Raft 共识算法以及存储在 RocksDB 中的共识状态,确保了数据一致性。引入的 Placement Driver (PD)[6] 实现了自动分片,使自动数据迁移成为可能。事务模型类似于 Google 的 Percolator,但有一些性能改进。TiKV 还提供了快照隔离(SI)、带锁的快照隔离(SQL:SELECT ... FOR UPDATE
)以及分布式事务中的外部一致性读写。
TiKV 具有以下关键特性:
地理复制
TiKV 使用 Raft 和 Placement Driver 支持地理复制。
水平可扩展性
凭借 PD 和精心设计的 Raft 组,TiKV 在水平可扩展性方面表现出色,可以轻松扩展到 100+ TB 的数据。
一致的分布式事务
类似于 Google 的 Spanner,TiKV 支持外部一致的分布式事务。
协处理器支持
类似于 HBase,TiKV 实现了协处理器框架以支持分布式计算。
与 TiDB[7] 协作
得益于内部优化,TiKV 和 TiDB 可以协同工作,成为一个具有高水平可扩展性、外部一致性事务、支持 RDBMS 和 NoSQL 设计模式的强大数据库解决方案。
治理
请参见 治理[8]。
文档
有关 TiKV 的部署、配置和维护的说明,请参见我们的 网站[9] 上的 TiKV 文档。有关 TiKV 背后的概念和设计的更多详细信息,请参见 深入 TiKV[10]。
注意:
我们已经将文档从 TiKV 的 wiki 页面[11] 迁移到了 官方网站[12]。原始的 Wiki 页面已停用。如果您对文档有任何建议或问题,请在 这里[13] 提供反馈。
TiKV 采用者
您可以查看 TiKV 采用者[14] 的列表。
TiKV 软件栈
Placement Driver: PD 是 TiKV 的集群管理器,定期检查复制约束以自动平衡负载和数据。 Store: 每个 Store 内都有一个 RocksDB,并将数据存储到本地磁盘。 Region: Region 是键值数据移动的基本单位。每个 Region 被复制到多个 Nodes。这些多个副本形成一个 Raft 组。 Node: 集群中的物理节点。在每个节点内,有一个或多个 Stores。在每个 Store 内,有许多 Regions。
当节点启动时,节点、Store 和 Region 的元数据被记录到 PD 中。每个 Region 和 Store 的状态定期报告给 PD。
快速开始
使用 TiUP 部署 playground
尝试 TiKV 与 TiDB 的最快捷方式是使用 TiUP,这是 TiDB 的组件管理器。
您可以在 这个页面[15] 上找到逐步教程。
使用二进制文件部署 playground
TiKV 可以与 PD 单独运行,这是最小的部署需求。
下载并解压二进制文件。
$ export TIKV_VERSION=v7.5.0
$ export GOOS=darwin # 仅支持 {darwin, linux}
$ export GOARCH=amd64 # 仅支持 {amd64, arm64}
$ curl -O https://tiup-mirrors.pingcap.com/tikv-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
$ curl -O https://tiup-mirrors.pingcap.com/pd-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
$ tar -xzf tikv-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
$ tar -xzf pd-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
启动 PD 实例。
$ ./pd-server --name=pd --data-dir=/tmp/pd/data --client-urls="http://127.0.0.1:2379" --peer-urls="http://127.0.0.1:2380" --initial-cluster="pd=http://127.0.0.1:2380" --log-file=/tmp/pd/log/pd.log
启动 TiKV 实例。
$ ./tikv-server --pd-endpoints="127.0.0.1:2379" --addr="127.0.0.1:20160" --data-dir=/tmp/tikv/data --log-file=/tmp/tikv/log/tikv.log
安装 TiKV Client(Python) 并验证部署,需要 Python 3.5+。
$ pip3 install -i https://test.pypi.org/simple/ tikv-client
from tikv_client import RawClient
client = RawClient.connect("127.0.0.1:2379")
client.put(b'foo', b'bar')
print(client.get(b'foo')) # b'bar'
client.put(b'foo', b'baz')
print(client.get(b'foo')) # b'baz'
使用 TiUP 部署集群
您可以参见 @c4pt0r 呈现的生产环境集群部署的 手册[16]。
从源代码构建
请参见 CONTRIBUTING.md[17]。
客户端驱动程序
Go[18] (最稳定且广泛使用的) Java[19] Rust[20] C[21]
如果您想尝试 Go 客户端,请参见 Go 客户端[22]。
安全
安全审计
由 Cure53 进行的第三方安全审计。查看完整的报告 这里[23]。
报告安全漏洞
要报告安全漏洞,请发送电子邮件至 TiKV-security[24] 小组。
请参阅 安全[25] 了解 TiKV 项目遵循的流程和政策。
结语:
TiKV 的毕业标志着其在云原生技术生态中的成熟与稳定。随着越来越多的企业和开发者采用 TiKV 作为数据存储的解决方案,其在未来的技术发展和应用场景中无疑将扮演更加关键的角色。让我们期待 TiKV 继续引领数据库技术的创新,为云原生应用提供更加强大、灵活的支撑。
PingCAP: https://en.pingcap.com
[2]TiDB: https://github.com/pingcap/tidb
[3]CONTRIBUTING.md: ./CONTRIBUTING.md
[4]Cloud Native Computing Foundation: https://cncf.io/
[5]公告: https://www.cncf.io/announcements/2020/09/02/cloud-native-computing-foundation-announces-tikv-graduation/
[6]Placement Driver (PD): https://github.com/pingcap/pd/
[7]TiDB: https://github.com/pingcap/tidb
[8]治理: https://github.com/tikv/community/blob/master/GOVERNANCE.md
[9]网站: https://tikv.org/docs/4.0/tasks/introduction/
[10]深入 TiKV: https://tikv.org/deep-dive/introduction/
[11]TiKV 的 wiki 页面: https://github.com/tikv/tikv/wiki/
[12]官方网站: https://tikv.org/docs
[13]这里: https://github.com/tikv/website
[14]TiKV 采用者: https://tikv.org/adopters/
[15]这个页面: https://docs.pingcap.com/tidb/stable/quick-start-with-tidb#deploy-a-local-test-environment-using-tiup-playground
[16]手册: ./doc/deploy.md
[17]CONTRIBUTING.md: ./CONTRIBUTING.md
[18]Go: https://github.com/tikv/client-go
[19]Java: https://github.com/tikv/client-java
[20]Rust: https://github.com/tikv/client-rust
[21]C: https://github.com/tikv/client-c
[22]Go 客户端: https://tikv.org/docs/4.0/reference/clients/go/
[23]这里: ./security/Security-Audit.pdf
[24]TiKV-security: mailto:tikv-security@lists.cncf.io
[25]安全: SECURITY.md