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数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CockroachDB (蟑螂数据库)是一个可伸缩的、支持地理位置处理、支持事务处理的数据存储系统,和谷歌的F1系统类似,支持分布式事务等特性。。CockroachDB 提供两种不同的的事务特性,包括快照隔离(snapshot isolation,简称SI)和顺序的快照隔离(SSI)语义,后者是默认的隔离级别。        为了保证在线的百万兆字节流量业务的质量,Google开发了Spanner系统,这是一个可扩展的,稳定的,支持事务的系统。许多参与开发CockroachDB的团队现在都服务于开源社区。就像真正的蟑螂(cockroach)一样,CockroachDB可以在没有数据头、任意节点失效的情况下正常运行。这个开源项目有很多富有经验的贡献者,创始人们通过社交媒体、Github、网络、会议和聚会结识他们并鼓励他们参与其中    蟑螂是一个分布式的K/V数据仓库,支持ACID事务,多版本值存储是其首要特性。主要的设计目标是全球一致性和可靠性,从蟑螂的命名上是就能看出这点。蟑螂数据库能处理磁盘、物理机器、机架甚至数据中心失效情况下最小延迟的服务中断;整个失效过程无需人工干预。蟑螂的节点是均衡的,其设计目标是同质部署(只有一个二进制包)且最小配置。    蟑螂数据库实现了单一的、巨大的有序映射,键和值都是字节串形式(不是unicode),支持线性扩展,理论上支持4EB的逻辑数据)。映射有一个或者多个Range组成,每一个Range对应一个把数据存储在RocksDB(LevelDB的一个变种,Facebook贡献)上的K/V数据库,并且复制到三个或者更多蟑螂服务器上,Range定义为有开始和结束键值的区间。Range可以合并及分裂来维持总大小在一个全局配置的最大最小范围之间。Range的大小默认是64M,目的是便于快速分裂和合并,在一个热点键值区间快速分配负载。Range的复制确定为分离的数据中心来达到可靠性(比如如下分组:{ US-East, US-West, Japan }, { Ireland, US-East, US-West}, { Ireland, US-East, US-West, Japan, Australia })    Range有一种变化,通过分布式一致性算法实例来调节确保一致性,蟑螂所选择使用Raft一致性算法。所有的一致性状态存在于RocksDB中。项目官网地址:http://www.cockroachdb.cn/ 标签:蟑螂数据库  国人开源

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值