title: cockroachDB学习笔记二
date: 2019-05-25 20:12:47
tags:
简介
cockroachDB是newsql的一种,是一个分布式关系型数据库。设计目标是,可扩展,强一致和高可靠性。集群在各个节点的地位对等,封装在二进制文件中,可做到直接部署。在linux环境下,直接wget,然后start便可以启动。
接入点的sql请求转换为KV操作,当节点积累的操作过多,可将该操作发送至其他节点进行处理
kv均为字符串。
kv map逻辑上按照范围被切割成大量发的key空间,每个空间称为Range。
每个range数据由 rocksDB,LevelDB的变体存储
range被复制多份被分布到多个 CockroachDB节点上,其副本的数量是可配置的。
默认大小为64M,合理的range大小有利于加速节点故障恢复和扩容,及均衡读写负载。
range大小根据系统压力进行设置,以便管理更多的range
理论上可支持4eb的数据存储
TODO:客户端的查询情求可以发送到集群任意节点?发送调度是如何的呢?是默认设置,还是根据负载
查询以分布式任务的方式在各个节点并发执行,通过增加节点数来提升单个查询的性能。
TODO:分布式任务调度流程?
range的多个副本之间使用一致性协议——raft同步数据,所有的一致性状态都存储在rocksDB中
强一致性:
对同一个range内数据的单一或批量修改,有raft保证range操作的ACID语义
涉及到多个range操作,cockroachDB使用高效的(todo)无锁分布式事务保障ACID语义
高可用性:
将range副本分布在一个数据中心,,可以确保低延迟复制,同时能容忍磁盘机器故障。如果将副本分布在不同的机架,即使某些网络交换机故障,cockroachDB仍可以提供服务。
Q:通过raft协议确保同步,因为分布的副本较多最不理想的情况下,存在指数形式的性能延迟,所以在传输效率上肯定是较低,但是考虑到现代硬件高速迭代,确保可靠性的需求更大,测试性能这方面需要横向比较。
range副本可以跨数据中心和跨地域分布,以应对来自数据中心电源中断或者网络中断的问题。
cockroachDB提供快照隔离(todo SI)和串行快照隔离(SSI)两种隔离级别,基于历史读写时间,提供外部一致的无锁读写(todo)。
在竞争激烈的系统中,会严重影响性能,用户需要选择合适的隔离级别
CockroachDB允许根据复制策略、存储设备类型或者数据中心位置把集群划分成任意个数据区域(Zone),以提升集群性能和可用性。与Spanner不同的是,区域是一个整体,不存在子区域。
考虑实际场景,当5个节点的集群,断掉两个节点,是不是还正常运行?
5节点的集群,断掉三个节点,是否还正常运行