分布式复制系统设计-总结

简介: 复制或多副本技术的目的:高可用即使某台器(或多台机器,或整个IDC)故障,系统也能保持正常运行连接断开与容错允许应用程序在网络中断时继续工作低延迟将数据放置在距离用户较近地,以更快交互可扩展性采用多副本,大幅提高系统的读吞吐量

复制或多副本技术的目的:


高可用


即使某台机器(或多台机器,或整个IDC)故障,系统也能保持正常运行


连接断开与容错


允许应用程序在网络中断时继续工作


低延迟


将数据放置在距离用户较近地,以更快交互


可扩展性

采用多副本,大幅提高系统的读吞吐量


多台机器保留多份相同的数据副本,需仔细考虑并发和所有可能出错并处理。至少,需处理好:


节点不可用

网络中断

这里甚至不考虑更隐蔽的失效场景,如由于bug导致的无提示的数据损坏。


多副本方案:


主从复制


所有客户端将写都发到单主节点,该节点将数据更改事件发送到其他副本(从节点)。每个副本都能接收读请求,但内容可能过期


多主复制

客户端发送每个写入到几个领导节点之一,任一都能接受写。领导者将数据更改事件流发送给彼此及所有跟随者节点


无主复制

客户端发送每个写到几个节点,并从多个节点并行读取,以检测和纠正具有陈旧数据的节点


每种方法都有优、缺点。单主复制很流行,因为易理解,无需担心冲突。出现故障节点,网络中断和延迟峰值时,多领导者、无领导者复制更稳健,但以更难推理并仅提供非常弱的一致性保证为代价。


复制可同步、异步,这在故障时对系统有深远影响。尽管系统平稳时异步复制很快,但复制滞后增加和服务器故障时要弄清楚会发生啥。若某领导者失败,且你提升了一个异步更新的追随者成为新的领导者,则最近提交的数据可能丢失。


一些可能由复制滞后引起的奇怪效应,也讨论了一些有助于决定应用程序在复制滞后时的行为的一致性模型:


写后读

用户应总看到自己提交的数据。

单调读

用户在某时间点看到数据后,不该在某更早时间点看到数据。

一致前缀读

用户应将数据视为具有因果意义的状态:如按正确顺序查看问题及其答复。

最后讨论多领导者、无领导者复制固有并发问题:因为他们允许多个写并发,这可能冲突。我们研究了一个DB可能使用的算法来确定:


一个操作是否发生在另一个操作之前

或它们是否同时发生

通过合并并发更新来解决冲突。

目录
相关文章
|
1月前
|
数据采集 存储 监控
公司监控软件:基于 PHP 的分布式监控系统设计
本文介绍了基于 PHP 的分布式监控系统的设计与实现。该系统包括监控节点、数据采集模块、数据传输模块和监控中心,能够高效地收集、传输和分析各节点的数据,确保系统的稳定运行和安全防护。通过示例代码展示了数据采集、传输及存储的具体实现方法,并强调了安全与可靠性的重要性。
51 3
|
5月前
|
缓存 搜索推荐 Java
Java面试题:简述CAP理论及其在分布式系统设计中的应用。请提供一个具体的例子,说明在系统设计中如何取舍一致性和可用性
Java面试题:简述CAP理论及其在分布式系统设计中的应用。请提供一个具体的例子,说明在系统设计中如何取舍一致性和可用性
66 0
|
7月前
|
存储 缓存 负载均衡
基于C++的高性能分布式缓存系统设计
基于C++的高性能分布式缓存系统设计
210 1
|
7月前
|
存储 缓存 负载均衡
基于Java的分布式缓存系统设计与实现
基于Java的分布式缓存系统设计与实现
96 1
|
JSON 网络协议 Shell
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 2
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
271 0
|
网络协议 Linux 测试技术
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 1
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
202 0
|
canal 存储 负载均衡
一举拿下高可用与分布式协调系统设计
一举拿下高可用与分布式协调系统设计
|
存储 运维 监控
盘古:阿里云飞天分布式存储系统设计深度解析
在10月19日的云栖社区在线培训上,来自盘古团队的吴洋分享了《盘古:飞天分布式存储系统实践》。他主要从以下三个方面进行了分享:盘古是什么?盘古是用来解决什么问题的?盘古是怎么解决问题的?他主要介绍了盘古的分布式系统架构和设计理念。
45142 9
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?

热门文章

最新文章