写点什么

架构师训练营 - 学习总结 第 6 周

用户头像
铁血杰克
关注
发布于: 2020 年 07 月 15 日

分布式数据库:

MySQL主从复制的原理:MySQL主库承担写的任务,写redo_log和undo_log,同时异步写bin_log;MySQL从库读主库的bin_log,加载到自己的relay_log中,再由SQL执行线程消费relay_log将数据入库。一主多从的架构中,主机负责写,从机可分摊读的并发压力,也便于数据备份。

MySQL主主复制也是利用bin_log,目标是为了保证写的高可用,一台主机down了可以切换到另一台主机,做自动的故障检测和失效转移。

为了增加并发写能力和突然单机存储瓶颈,需要引入数据分片技术。分片技术有硬编码和映射表等手段,需要引入数据库中间件,来实现路由配置、执行代理、结果合并等功能。

总之,只需要读的高并发,可采用主主复制+主从复制。还需要写的高并发,则需要引入分片后的多主多从。实际业务处理中,考虑先按业务类型不同做垂直分库,再针对特定的业务库做优化。



NoSQL:

CAP原理:一致性,可用性,分区耐受性。在分布式系统必须满足分区耐受性的前提下,可用性和一致性无法同时满足。而AP又引入了BASE的概念,去实现最终一致性。

最终一致性的写冲突:简单处理策略是根据时间戳,最后写入覆盖;或者使用投票解决冲突(Paxos[zk采用的zab算法], Raft[etcd采用]等算法)。



Hbase架构:HMaster通过zk来实现热备和故障转移,做元数据管理;数据保存在HRegionServer的

HRegion中,底层是HFile,通过HDFS来实现副本冗余。

重点是HBase中的LSM存储思想:The Log-Structured Merge-Tree.

LSM-tree 是专门为 key-value 存储系统设计的,最大的特点就是写入速度快,主要利用了磁盘的顺序

写,pk掉了需要随机写入的 B-tree。首先是内存的 C0 层,保存了所有最近写入的 (k,v),这个内存结构是有序的,并且可以随时原地更新,同时支持随时查询。剩下的 C1 到 Ck 层都在磁盘上,每一层都是一个在 key 上有序的结构。

写入流程:

1)一个 put(k,v) 操作来了,首先追加到写前日志(Write Ahead Log,也就是真正写入之前记录的日志)中,接下来加到 C0 层。当 C0 层的数据达到一定大小,就把 C0 层 和 C1 层合并,类似归并排序,这个过程就是Compaction(合并)。

2)合并出来的新的 new-C1 会顺序写磁盘,替换掉原来的 old-C1。当 C1 层达到一定大小,会继续和下层合并。合并之后所有旧文件都可以删掉,留下新的。

3)写入过程基本只用到了内存结构,Compaction 可以后台异步完成,不阻塞写入。

查询流程:

1)在写入流程中可以看到,最新的数据在 C0 层,最老的数据在 Ck 层,所以查询也是先查 C0 层,如果没有要查的 k,再查 C1,逐层查。

2)一次查询可能需要多次单点查询,稍微慢一些。所以 LSM-tree 主要针对的场景是写密集、少量查询的场景。

总之,LSM-tree 被用在各种键值数据库中,如 LevelDB,RocksDB,还有分布式行式存储数据库 Cassandra 也用了 LSM-tree 的存储架构。



Zookeeper:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。作用有:主主备份(数据库、HMaster等等);

它实现了分布式选举算法Zab(Paxos的简化版实现),具体见其技术文档。集群中任何时候都有一个leader,多个follower;若leader宕机就会重新选举出一个leader。

Zookeeper的最大特点:

1)树状记录结构

2)临时节点,临时顺序节点(临时的节点会在连接主机断开连接后自动删除);持久节点,持久顺序节点。 所有节点都可用观察者模式监听,从而实现各种应用:主机选举;集群管理(负载均衡);分布式锁等等。



Doris:

Doris是阿里研发的分布式KV存储系统。从这个案例中主要学习到如何在大公司中申请一个中间件项目,分析业务现状、现有产品的缺陷、阐述开发的必要性和价值;阐述产品的具体目标,目标要体现先进性;并且以上都要有数据支撑;阐述产品的核心架构思路;阐述产品的投入资源和分阶段的里程碑计划等等。

发布于: 2020 年 07 月 15 日阅读数: 67
用户头像

铁血杰克

关注

还未添加个人签名 2017.12.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 学习总结 第 6 周