用于数据库和可扩展性的容器

Containers for database and scalability

考虑 TiDB and the TiDB Operator 作为这个问题的例子。

TiDB

TiDB ("Ti" stands for Titanium) is an open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads. It is MySQL compatible and features horizontal scalability, strong consistency, and high availability.

TiDB 算子

The TiDB Operator automatically deploys, operates, and manages a TiDB cluster in any Kubernetes-enabled cloud environment.

数据库上线后,大致有两种情况。

  1. 非常只读查询率很高。
  2. 非常 写查询率很高。

在这两种情况下,容器化数据库的哪个组件可以扩展?读取副本?数据库 'engine' 本身?持久卷?以上都是?

容器化基础设施抽象存储和计算资源 (考虑 k8s 中的 PVPod),这些资源随着数据库的扩展而扩展。所以缩放的形式取决于数据库本身。

对于 TiDB,虽然它提供了 MySQL 兼容的 SQL 接口,但它的 architecture 与 MySQL 和其他传统关系数据库有很大不同:

  • SQL layer(TiDB) serves SQL queries and interacts with the storage layer based on the calculated query plan。它是无状态的,可以按需扩展读取和写入查询。通常,您扩展 out/up SQL 层以获得更多计算资源,用于查询计划计算、连接、聚合和服务更多连接。
  • Storage layer(TiKV) 负责为 SQL 层存储数据和提供 KV API。 TiKV 最有趣的部分是 Multi-raft 复制,存储层自动将数据切块并均匀分布到容器中。每个部分都是一个 raft 组,其领导者负责读写查询。规模in/out后,存储层会自动迁移数据块来平衡负载。因此,扩展存储层将为您提供更好的 read/write 吞吐量和大数据容量。

回到问题,问题中提到的所有组件都有比例。为SQL查询服务的read/write个副本可以伸缩,为KV查询服务的数据库"engine"(存储层)可以伸缩,PV也随着存储层的伸缩过程向外扩展.