其他分享
首页 > 其他分享> > 第二部分-分布式数据系统

第二部分-分布式数据系统

作者:互联网

第五章 数据复制

第六章 数据分区

6.1 数据分区与数据复制

可以组合使用主从复制模型和分区,分区拓展单机性能,主从模型中从节点作为容灾备份。
每个分区节点,既包含主副本,又包含从副本,副本可以隶属于不同分区。
image

6.2 键值数据的分区

如果分区不均匀,某些分区节点会承担更多的数据量或者查询负载,成为倾斜,负载严重不成比例的分区即成为系统热点。

基于关键字区间分区

基于关键字哈希值分区

一致性哈希

分区策略综合

Cassandra采用了这种的方式,表可以声明为由多个列组成的符合主键。只有第一部分可以使用哈希分区,其他列则用作组合索引来对SSTable中的数据进行排序。
因此,它不支持再第一列区间查询,但是固定第一列时,则可以对其他列执行高效的区间查询。

负载倾斜与热点

哈希分区的极端情况是,所有读写操作针对一个关键字,即所有请求都被路由到同一个分区。
解决办法:
在应用层来减轻倾斜程度,比如某个关键字被确认为热点,可以在关键字开头或者结尾增加随机数,这样写请求会被分配到多个分区节点上。
问题就是任何读取都需要额外的工作,必须从所有分区读取数据再合并,所以通常只会对少量的热点关键字附加随机数才有意义。

6.3 分区与二级索引

二级索引:通常不能唯一标识一条记录,一般用来加速特定值的查询
前面的分区方案无法很好地适应二级索引存在的场景,主要挑战是二级索引不能规整的映射到分区中,主要有两种方案,基于文档分区和基于词条的分区。

基于文档的分区

image

基于词条的分区

image

6.4 分区再平衡

查询压力增加、数据规模增加、单节点故障,都有可能需要我们进行分区再平衡,即将数据和请求从一个节点转移到另外一个节点。

不能直接取模

固定数量分区

image

动态分区

按节点比例分区

自动 or 手动

让管理员介入到再平衡是个更好的选择,比全自动响应慢一点,但是可以有效防止意外发生

6.5 请求路由

服务发现

典型的服务发现问题,任何通过网络访问的系统都有这样的需求,尤其是当服务目标支持高可用时。
主要有三种策略,
1.允许客户端链接任意节点,如果节点不包含数据,则转发给下一个合适的节点
2.客户端请求全部发送到路由层,路由层充当分区感知的负载均衡器,不处理请求
3.客户端感知分区和节点分配关系,直连目标节点
许多分布式数据系统依赖独立的协调服务(ZooKeeper/Etcd/Consul)跟踪集群范围内的元数据,每个节点向协调服务注册自己,协调服务维护了最终的映射关系。
其他数据系统,有的使用了Helix,也有的使用gossip协议来同步集群状态,由节点负责转发请求到真正的节点。这种方式增加了数据库节点的复杂性,但是避免了对外部协调服务的依赖。

并行查询执行

对于大规模并行处理(Massively Paallel Processing, 主要用于数据分析的关系数据库),查询复杂得多,可能会包含多个联合、过滤、分组和聚合操作,MPP查询优化器会将复杂查询分解为许多执行阶段和分区,以便在集群的不同节点并行执行。

第七章 事务

7.1 深入理解事务

7.2 弱隔离级别

7.3 串行化

第八章 分布式系统的挑战

8.1 故障与部分失效

8.2 不可靠的网络

8.3 不可靠的时钟

8.4 知识,真相与谎言

参考文献

1.ddia中文翻译

标签:索引,第二,查询,关键字,哈希,数据系统,分布式,节点,分区
来源: https://www.cnblogs.com/boqianliu/p/15408490.html