DDIA读数笔记【第五章】

  复制,这是为了增加系统容错性而产生的概念。

  复制意味着在通过网络连接的多台机器上保留相同数据的副本。

  • 使得数据与用户在地理上接近(从而减少延迟)
  • 即使系统的一部分出现故障,系统也能继续工作(从而提高可用性)
  • 扩展可以接受读请求的机器数量(从而提高读取吞吐量)

  复制的困难在于数据会随着时间变化而改变,不然就根本不是问题了。改变似乎也是软件开发中遇到的最常见、困难的问题,需求变更、表结构变更……每个都会让我这种低段位开发码农很痛苦。

  三种流行的复制变更算法:单领导者(single leader),多领导者(multi leader)和无领导者(leaderless)。

  主库与从库,领导者与追随者。领导者可以读、写,追随者只可以读。

  

   

  同步与异步复制,概念就和js的同步异步差不多啊,同步就是所有库写完了,才能写下一个,异步就是主库只管写,从库慢慢更新。然后介绍了几种错误的处理方式。

  复制的实现方法

  1、基于语句,就是记录下所有执行SQL发给从库,但SQL会使用返回随机值的函数,这样就会让数据对应不上了。

  2、传输预写日志,

  3、逻辑日志,基于行,

  然后就是复制延迟引发的问题了,无非是读写不一致。

  单调读:每个用户只从一个从库读数据,不会引发数据错乱的问题。

  复制延迟:数据库的事务功能。单节点上已实现的很好,但在分布式上,数据库并没有实现。

  

  多主复制,类似关系数据库多对多的关系,即是领导者,又是追随者。

  解决多主的写入冲突,分布式的最好解决方案是避免冲突,

   

   无主复制

  

 

  

 

原文地址:https://www.cnblogs.com/weixin-tt/p/13940920.html