写失败数据写入成功_数据密集型应用系统设计重点总结

本文详细介绍了复制在提高系统可用性和读取吞吐量中的作用,探讨了单主复制、多主复制和无主复制的优缺点及解决策略,包括复制延迟、读写一致性问题。此外,还讨论了分区的概念,分析了不同分区手段如Key Range和Key Hash分区,以及分片与二级索引的实现和挑战。最后,提到了全序广播在保证消息顺序传递中的角色。
摘要由CSDN通过智能技术生成

复制

复制的作用

  1. 提高可用性。即使系统的一部分出现故障,系统也能继续工作

  2. 提高读取吞吐量。伸缩可以接受读请求的机器数量

  3. 减少延迟。数据与用户在地理上接近

复制算法

三种流行的变更复制算法:单领导者,多领导者和无领导者

单主复制

数据一致性问题:每一次向数据库的写入操作都需要传播到所有副本上,否则副本就会包含不一样的数据。如何确保所有数据都落在了所有的副本上?

最常见的解决方案被称为基于领导者的复制(主从复制),领导者接收写请求(且只允许领导者接收写请求),将数据同步到追随者。

其中同步操作分为同步,半同步,异步,通常在服务端可以配置。

设置新从库

  1. 获取主库的一致性快照

  2. 将快照同步到从库进行加载

  3. 从库连接到主库,根据日志序列号/坐标等标识,追上主库的数据变更

处理节点宕机的办法

  • 从库宕机:追赶恢复

  • 主库宕机:故障切换

自动故障切换的标准

  1. 确认主库宕机。手段是判断超时

  2. 选举新主库。共识问题:见分布式共识

  3. 重置请求路由。如果老领导回来了,确保他现在是从库

故障切换的问题

  1. 如果是异步复制。新主库未收到老主库宕机前最后的写入操作,老主库重新加入集群时,容易产生写入冲突(如mysql自增主键重复)

    解决方案是,丢弃老主库宕机前的写入。但会带来数据丢失的问题。如果数据库同时和外部存储联动,则还可能带来数据不一致的问题

  2. 脑裂问题。旧主库重新加入集群时,集群可能认为存在两个主。

    解决方案是,关闭其中一个,但不合理的实现可能会发生两个都被关闭

  3. 超时参数如何设置。

多主复制

0f450a144fb2d3e8e623f7860e6832e3.png

多领导者复制的最大问题是可能发生写冲突。

如协同编辑,两个用户同时编辑页面,用户1将页面的标题从A更改为B,并且用户2同时将标题从A更改为C。

写入冲突 每个用户的更改已成功应用到其本地主库。但当异步复制时,会发现冲突。

解决方法是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值