cockroach官方文档翻译---2.1 架构概要

2. 架构

2.1 概要

cockroachDB是一种开源数据库,开发者希望去使用:一方面是因为可伸缩和一致性。开发者一般会有疑问我们如何达到这样,本篇指导将解释cockroach进程的内部实现细节。

不过,cockroachDB的使用者你不必理解潜在的架构,

本页为重要的用户及数据库的热衷者提供了高级框架,解释在hood下发生了什么。


**使用指南

本指南将详细解析cockroachDB的每一层,希望你能按顺序阅读每一层,从概要开始,然后是sql层。

如果你寻找对cockroachDB的更深层理解,你可以简单的阅读每一层的概要,对于更多的技术细节,例如你有兴趣作为项目的贡献者,你可以阅读组件部分


注意:本指导,只是解释cochroachDB的内部袭击日,不能解释如何去构建cockroachDB副本,请查阅读安装文档


**cockroach的目标

cockroach设计目标如下:

1)为了人类的生活更容易。这意味着对于管理者的低接触,高自动化,对于开发者更容易去查找原因

2)提供工业级一致性,即使在大规模的部署中。这意味着启动分发事务,同时解决最终一致性和读取陈旧数据的痛点。

3)创建不间断的数据库,在所有节点的读写不发生矛盾

4)灵活的部署在任意平台上,不捆绑任何的平台或者供应商

5)支持关系型数据使用的相同组件


--最终一致性:允许事务提交一段时间后,数据保持一致

综上,我们希望cockroachDB使团队容易的建立全球的,大规模的,有弹性的云服务。


**语汇表

集群:cockroachDb部署,表现为涵盖一个或多个数据库的单一逻辑复制

节点:一个单机器(唯一的ip:port)运行cockroachDb。多节点形成集群

range:你的集群中一个排序的邻近的数据

副本:你的range的一个复制集,保证至少有3个节点存储数据,确保数据的容忍能力。


**概念

cockroach严重依赖下列概念,将有利于理解我们的架构实现:

一致性:cockroachDB使用一致性表达ACIDCAP理论,即数据无异常。CAP理论:一致性(Consistency)/可用性(Availability)/分区容错性(PartitionTolerance)满足两个以上。一致性,每个读请求接收最近的写请求或者报错(每个节点读取的数据一致)。可用性,每个请求都会收到应答,不管最近的写是成功或者失败。分区容错性,在网络中断,消息丢失或者延迟,系统可以继续工作。


consensus:当一个range接受一个写,投票节点包括range的副本收到写。这意味着数据安全的存储,同时多数节点同意这个数据库状态,即使一些节点是下线的。当一个写没达到consensus,进程停止,保证集群的一致性状态。


**复制

同步复制提交之前,需要所有的写操作写入所有指定节点的数据副本,为了保证数据的一致性,这种复制是cockroachDB使用的。

异步复制只要求提交前单一节点接受到写操作,提交后再写入其他的数据副本。这种方式几乎等同于最终一致性,在NoSQL数据库中很流行,这种方式会导致异常和数据丢失。

**事务

一系列数据操作,满足ACID(原子性/Atomic,一致性/Consistency,隔离性/Isolation,持久性/Durability)。这是一个一致的的系统的关键特性,确保开发者可以信任数据库数据。

**多活可用性

基于一致性的高可用,使集群的每个节点可以读写部分存储数据(per-range)。相比于其他复制方式,例如:主-被动复制,活跃节点接受100%的请求高峰。主-主复制,所有的节点接收请求,但不能同时保证读的数据最新的和快速的。

2.1.5 概要

CockroachDB在机器上运行使用两条命令

1)cockroachstart—join参数,集群中所有初始化节点,这样进程知道所有可以被连接的其他机器

2)cockroach init对集群执行一次初始化

一旦cockroach进程运行,开发者通过SQL API连接cockroachDB,在PostgresSQL上进行模型化,由于所有节点的对称行为,你可以发送请求到任意一个节点,使cockroach很容易的做到负载均衡。

  接收SQL RPCs,节点将其转化为操作,工作在我们分发的key-value存储中。RPCs开始填充集群数据,cockroachDB算法开始在节点间分发你的数据,将数据打散为64M的chunk,我们把它叫做range。为了保证耐受性,每个range至少被3个节点复制。这样,如果某个节点停止工作,仍然存在数据的副本,可以用于读写,并复制数据到其他节点。

  如果一个节点可以接受读写请求但不能直接提供服务,它可以发现可以处理请求的节点并联系它,这样不必知道数据在哪里,cockroachDB会跟踪,为每个节点激活对称行为。

  对于range数据的任何更改,依赖于一致性算法,保证多数副本同意提交更改,业界领先的隔离机制保证提供复制一致性读,不管你连接的是哪一个节点。

  最后,使用高效的存储引擎进行数据写入或者磁盘读取,保证数据时间戳可以被跟踪,这样有利于支持SQL标准,AS OF SYSTEMTIME,可以获得一段时间的历史数据。

  不过,这只是一个高级概要描述cockroachDB如何运行,想知道cockroach进程的具体细节,需要对架构有更深的了解。

2.1.6 层

在最高层,cockroachDB将客户端的SQL语句转化key-value(KV)形式数据,在节点间分发,并写入磁盘。我们的架构,进程通过多层结构进行实现,对应用是不透明的。

下面描述了每层函数,忽略其他层的细节。这些函数对本层,对其他层是黑箱的API组件。层间的互动没有明确描述,为了理解整个进程,需要理解每层的函数。

 

顺序

目的

SQL

1

将客户端SQL语句转化成KV形式

事务

2

允许多KV实体更改的原子性

分发

3

提出将KV range作为一个单实体

复制

4

多节点间复制KV ranges满足一致性和同步性,本层通过租约提供一致性读

引擎

5

在磁盘中读写KV数据

 

你可能感兴趣的:(cockroach)