DDIA读数笔记【第五章】
复制,这是为了增加系统容错性而产生的概念。
复制意味着在通过网络连接的多台机器上保留相同数据的副本。
- 使得数据与用户在地理上接近(从而减少延迟)
- 即使系统的一部分出现故障,系统也能继续工作(从而提高可用性)
- 扩展可以接受读请求的机器数量(从而提高读取吞吐量)
复制的困难在于数据会随着时间变化而改变,不然就根本不是问题了。改变似乎也是软件开发中遇到的最常见、困难的问题,需求变更、表结构变更……每个都会让我这种低段位开发码农很痛苦。
三种流行的复制变更算法:单领导者(single leader),多领导者(multi leader)和无领导者(leaderless)。
主库与从库,领导者与追随者。领导者可以读、写,追随者只可以读。
同步与异步复制,概念就和js的同步异步差不多啊,同步就是所有库写完了,才能写下一个,异步就是主库只管写,从库慢慢更新。然后介绍了几种错误的处理方式。
复制的实现方法
1、基于语句,就是记录下所有执行SQL发给从库,但SQL会使用返回随机值的函数,这样就会让数据对应不上了。
2、传输预写日志,
3、逻辑日志,基于行,
然后就是复制延迟引发的问题了,无非是读写不一致。
单调读:每个用户只从一个从库读数据,不会引发数据错乱的问题。
复制延迟:数据库的事务功能。单节点上已实现的很好,但在分布式上,数据库并没有实现。
多主复制,类似关系数据库多对多的关系,即是领导者,又是追随者。
解决多主的写入冲突,分布式的最好解决方案是避免冲突,
无主复制
By:努力向前的菜B