第 2 章 CockroachDB 架构
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
软件系统的架构定义了实现系统目标的高层次设计决策。 正如第 1 章所述,CockroachDB 的目标是提供一个可扩展、高可用性、高性能、强一致性、地理分布式、SQL 驱动的关系型数据库系统,能够在各种硬件平台上运行。 CockroachDB 的架构与这些目标相一致。
CockroachDB 有多种架构。 在集群层面,CockroachDB 部署由一个或多个无共享、无领导节点组成,这些节点相互协作,呈现出分布式数据库系统的单一逻辑视图。 在每个节点内,我们可以将 CockroachDB 架构观察为一系列提供基本数据库服务的层,包括 SQL 处理、事务处理、复制、分发和存储。
在本章中,我们将努力为你提供 CockroachDB 架构的全面概述。 本章旨在为你提供基本概念,帮助你在模式设计、性能优化、集群部署等方面做出明智的决定。
CockroachDB 集群架构
从远处看,CockroachDB 部署由一个或多个数据库服务器进程组成。 每个服务器都有自己的专用存储空间--这就是我们熟悉的 "无共享 "数据库集群模式。 CockroachDB 集群中的节点是对称的,没有 "特殊 "或 "主 "节点。 这些存储通常直接连接到运行 CockroachDB 服务器的机器上,不过数据也有可能位于共享存储子系统上。 数据根据关键范围分布在集群中。 每个范围至少复制给集群的三个成员。
数据库客户端--应用程序、管理控制台、CockroachDB shell 等--连接到集群中的 CockroachDB 服务器。
数据库服务器和数据库客户端之间的通信是通过 PostgreSQL线协议格式进行的。 该协议描述了如何在 PostgreSQL 客户端和 PostgreSQL 服务器之间传输 SQL 请求和响应。 由于 CockroachDB 使用的是 PostgreSQL 线协议,因此任何 PostgreSQL 驱动程序都可以用来与 CockroachDB 服务器通信。在更复杂的部署中,一个或多个负载均衡器进程将负责确保这些连接在各节点间均匀合理地分布。 负载平衡器将把客户端连接到集群中的一个节点,该节点将成为连接的网关服务器。
客户端请求可能涉及读取 并将数据写入单个节点或群集内的多个节点。 对于任何给定的键值范围,租用者节点将负责控制对该范围的读写。 租用者通常也是Raft 的领导者,有责任确保数据的副本得到正确维护。
图 2-1展示了其中一些概念。 数据库客户端连接到作为 CockroachDB 集群代理的负载平衡器 (1)。 负载平衡器将请求引导至可用的 CockroachDB 节点(2)。 该节点成为此连接的网关节点。 该请求需要范围 4 中的数据,因此网关节点会与该范围的租赁器节点 (3) 通信,租赁器节点会将数据返回给网关,而网关又会将所需数据返回给数据库客户端 (4)。
图 2-1. CockroachDB ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access