写点什么

架构师训练营第 1 期第 6 周总结

用户头像
du tiezheng
关注
发布于: 2020 年 11 月 01 日

一、分布式数据库

1.1 MySQL复制



1 主从复制



主从复制的过程

1) 主服务器维护binlg与客户端线程;从服务器维护ralaylg与获取线程。

2) 主服务器更新数据时,除了写入本地数据集,还要写入binlg。

3) 从服务器的获取线程与主服务器客户端线程交互,将Binlg的更新同步到relaylg。

4) 从服务器的SQL执行线程观察relaylg的变更,依次读取变更命令并写入从服务器本地数据集。



一主多从的优点

分摊负载、专机专用、便于冷备、高可用



2 主主复制

一主多从架构支持读高可用,但不支持写高可用。通过主主架构,可进一步实现写高可用。



主主复制的过程

与主从复制类似,主主复制时两个主库会互相同步对方的binlg变更到自己的relaylg中,最后从relaylg同步回自己的本地数据集。



通常实现主主复制的集群,同时也会实现主从复制。

主主复制的服务器集群不能并发写入,会导致数据冲突和数据不一致。

复制只能增加都并发处理能力,不能增加些并发处理能力和存储能力。

更新表结构会导致巨大的同步延迟。



1.2 数据分片

数据复制并没有提升数据写并发能力,而通过数据分片,可以真正提升数据的写并发。



挑战

两种简单的分片方法:

1) 硬编码数据分片:应用代码将key映射成服务器编号。

2) 外部映射表数据分片:通过查找外部映射获取服务器编号。



无论硬编码,还是映射表,都有一些缺陷:

1)需要额外代码,增加了处理逻辑复杂性。

2)无法执行多片联合查询。

3)无法使用数据库事务。

4)对数据库伸缩性不友好。



中间件

分布式数据库中间件

数据库中间件将自己伪装成一个数据库,应用将sql提交给中间件,中间件内部进行分片逻辑转换,连接多个数据库操作。



常用中间件

mycat、Cbar



Cbar的组件模型:

SQL解析:解析sql和分片规则

SQL路由:找到对应多个分片

SQL执行代理:与分片数据库交互

结果合并:合并多个分片的返回结果



伸缩

与分布式缓存不同,数据库存储的是元数据,必须能被访问到。因此数据库的分片,不能仿照缓存分片的一致性哈希来进行伸缩。



在最开始归化分片集群时,数据规模较小,服务器实例较少时,就可以多创建些分片。比如100个分片,2个实例。可在在中间件中将100个分片均摊给2个实例。



向分片集群添加新的实例时,首先将已有数据库要迁移的那部分数据对新库做主从复制。

数据迁移完成后,重新修改分片中间件的路由规则,使其指向新的集群实例。



1.3 部署



数据库部署的演进

1 单一服务与单一数据库

2 数据库主从复制实现伸缩

3 多个服务与多个主从库集群

4 综合部署:数据库主主复制与分片集群



二、NoSQL



特征:不支持SQL,伸缩性更好



CAP

在分布式系统中,网络分区一定会发生,要么接受数据不可用,要么接受数据不一致。



最终一致性

在一段时间,由于网络延迟、故障,不同分区的客户端,访问的数据可能是不一致的,但是当故障恢复,数据同步完成后,最终是一致的。



最终一致性的处理

1、最终一致性写冲突:根据时间戳,最后写入覆盖。(数据库解决)

2、客户端冲突解决:一些业务数据库不理解客户端冲突逻辑,由客户端对冲突数据进行处理、合并。

3、投票解决冲突:

Cassandra的实现方式。

写入时,尝试写入三个节点,至少写入两个节点返回成功。

读取时,尝试读取三个节点,如果返回值不一致,投票解决。



HBase

具有良好的伸缩性。

顶层通过master节点定位到底层的hadoop分布式文件系统节点,数据存在多个备份。当需要伸缩时,只需要master将一些key分配给新加入的节点即可。甚至不需要数据迁移,因为HBASE本身不存储数据,而是存储到最底层的HDFS。

HBase的存储是LSM树,类似于B+树,但是LSM树是以lg方式顺序写入的。



事务处理

关系数据库的事务处理遵循ACID

原子性、隔离性、持久性、一致性

NSQL数据库的事务处理遵循BASE

基本可用、软状态、最终一致性



三、分布式一致性架构

待整理



四、搜索引擎



倒排索引

正排索引:文档包含的词有哪些

倒排索引:包含某个词的文档有哪些



带词频位置的倒排索引:

除了记录词包含的文档编号,还可以记录某个词文档中的词频数,便于排序。

也可以记录词出现在文档的位置,便于组合查找多个词所在文档。



Lucene



组件

analysis:负责词法分析及语言处理而形成term。

index:索引的创建,里面有IndexWriter。

store:索引的读写。

QueryParser:语法的分析。

search:索引的搜索。

similarity:相关性打分的实现。



倒排索引结构

字典+倒排表 (类似于hashmap)



索引实时更新

索引文件分段,索引修改针对段操作。

通过增加新段实现索引创建,通过添加.del文件模拟索引删除,创建+删除实现更新。

控制段数量,定期执行分段合并。



Elastic Search

待整理

用户头像

du tiezheng

关注

还未添加个人签名 2018.08.16 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期第 6 周总结