TiKV:云原生时代的数据库革新者

文摘   2024-07-31 21:13   美国  

unsetunset前言:unsetunset

在云计算和大数据的浪潮中,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 设计模式的强大数据库解决方案。

unsetunset治理unsetunset

请参见 治理[8]

unsetunset文档unsetunset

有关 TiKV 的部署、配置和维护的说明,请参见我们的 网站[9] 上的 TiKV 文档。有关 TiKV 背后的概念和设计的更多详细信息,请参见 深入 TiKV[10]

注意:

我们已经将文档从 TiKV 的 wiki 页面[11] 迁移到了 官方网站[12]。原始的 Wiki 页面已停用。如果您对文档有任何建议或问题,请在 这里[13] 提供反馈。

unsetunsetTiKV 采用者unsetunset

您可以查看 TiKV 采用者[14] 的列表。

unsetunsetTiKV 软件栈unsetunset

TiKV 软件栈
  • Placement Driver: PD 是 TiKV 的集群管理器,定期检查复制约束以自动平衡负载和数据。
  • Store: 每个 Store 内都有一个 RocksDB,并将数据存储到本地磁盘。
  • Region: Region 是键值数据移动的基本单位。每个 Region 被复制到多个 Nodes。这些多个副本形成一个 Raft 组。
  • Node: 集群中的物理节点。在每个节点内,有一个或多个 Stores。在每个 Store 内,有许多 Regions。

当节点启动时,节点、Store 和 Region 的元数据被记录到 PD 中。每个 Region 和 Store 的状态定期报告给 PD。

unsetunset快速开始unsetunset

使用 TiUP 部署 playground

尝试 TiKV 与 TiDB 的最快捷方式是使用 TiUP,这是 TiDB 的组件管理器。

您可以在 这个页面[15] 上找到逐步教程。

使用二进制文件部署 playground

TiKV 可以与 PD 单独运行,这是最小的部署需求。

  1. 下载并解压二进制文件。
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
  1. 启动 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
  1. 启动 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
  1. 安装 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]

unsetunset客户端驱动程序unsetunset

  • Go[18] (最稳定且广泛使用的)
  • Java[19]
  • Rust[20]
  • C[21]

如果您想尝试 Go 客户端,请参见 Go 客户端[22]

unsetunset安全unsetunset

安全审计

由 Cure53 进行的第三方安全审计。查看完整的报告 这里[23]

报告安全漏洞

要报告安全漏洞,请发送电子邮件至 TiKV-security[24] 小组。

请参阅 安全[25] 了解 TiKV 项目遵循的流程和政策。

unsetunset结语:unsetunset

TiKV 的毕业标志着其在云原生技术生态中的成熟与稳定。随着越来越多的企业和开发者采用 TiKV 作为数据存储的解决方案,其在未来的技术发展和应用场景中无疑将扮演更加关键的角色。让我们期待 TiKV 继续引领数据库技术的创新,为云原生应用提供更加强大、灵活的支撑。

参考资料
[1]

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


编程悟道
自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
 最新文章