CAP
Consistence 一致性原则:读取的数据一定是最新的
Availability 可用性原则:每个操作都能在一定时间内返回
Tolerence Of Partition 分区可容忍性原则: 允许分布式系统中的某些分区down掉
CAP理论认为,三个条件不可同时存在
NWR策略:N表示需要N个数据备份,W表示数据写入N个节点才算成功,R表示需要读取R个节点的数据才能保证其中有一份是最新的。比如其中W+R>N。例如需要备份数为3份,写入2份即表示数据成功写入,则必须读取2份数据才能保证其中有一份是最新的。
主备策略:同一时刻,只有主可以写操作,备只能读取,并通过commit log保持异步数据更新。为防止一台主宕机导致数据丢失,可以采用两台写返回争取,才返回响应的策略。
动态数据均匀分布:一致性hash算法,保证动态增加节点后,不会产生数据抖动问题。
网络服务,单节点,数据一致性:通过数据版本号控制。
服务端原始数据D,版本号N,A、B客户端,通过网络获取数据并修改数据。A获取数据(D,N),B获取数据(D,N),A改变数据,并设置(D‘,N+1),B做数据操作,并设置(D’‘,N+1),服务器端收到数据设置请求后,加锁,判断版本号是否大于本地数据版本号,如果是则更新数据和版本号,然后解锁。
这里关键点事,网络服务中,客户端和服务端无法加锁。通过版本号控制数据的有效性。类似于CompareAndSet。
分布式数据容灾:
双写:客户端一次同时写两份。
异步同步:客户端写master server,异步线程将master的commit log同步至slave做数据同步
强同步:每个客户端请求,从slave到master,倒流水线的修改数据,全部完成后,返回成功
半同步:数据写入K》=1个slave和master后,返回成功。当master宕机后,slave变为master。剩下的slave可以通过异步同步。
Redis的数据持久化策略:
1、snapshot: 通过fork进程,父进程继续接受client的数据请求,子进程将fork后得到的进程内的数据全部dump到本地文件。(在下一次备份周期前,主进程crash会丢失部分数据)
2、aof(append only file),每次对redis修改操作都首先将commit log追加到本地文件,成功后才修改内存中的数据。但由于fwrite在操作系统有缓存,所以,如果主机断电,还是会有部分数据丢失。需要及时做fsync将数据持久化到磁盘。redis根据业务安全程度,可配置fsync的频率。频率越高,性能越差,数据容灾能力越强。
copy-on-write:保证读写效率,防止写操作影响频繁的读操作。每次更新数据,都是更新新copy的副本,完成更新后,原子更新指向数据的指针即可。这样在更新数据的同事,读操作仍然高效的在读取旧数据。
vector clock算法:结合NWR理论,解决多个节点读写一致性。 假设有节点A,B,C。通过每个节点对数据的保留节点版本号记录数据的有效性。写操作发送至A后,数据记录为D1(A1), 数据同步至B,C后,三个节点上的数据都是D1(A1)。写操作发送至B,数据记录在B上变为D2(A1、B1)。同时,写操作发送至C,数据在C上变为D3(A1、C1)。最后,根据NWR原理,客户端读取3份数据,为D1(A1)、D2(A1、B1)、D3(A1、C1),客户端发现D2、D3为最新数据,且有冲突。在客户端解决冲突,数据记录回A,此时A变为D4(A2、B1、C1),是合并后最新的数据。
分布式锁:
1、redis 通过redis的watch功能,实现原子操作的锁。 在修改一个变量前,先watch下,然后修改之,提交后,如果成功,代表是原子操作。失败则表示中间有其它请求修改了对应值,则失败。通过这种原子修改形式,加值锁。
2、通过zookeeper实现。对某个目录下,进行节点create操作,如果成功则表示加锁。如果失败,则表示锁失败。并且可以通过watch阻塞监听节点状态,待节点被删除后,接受到相应回调,然后再次尝试创建节点,即重新竞争锁。
分布式消息队列问题:
1、对于不可丢失的数据,数据项在入缓存队列前,必须持久化,这样保证其可靠性,但是大大降低了tps。比如邮箱的消息队列,比如AOF模式下的redis。
2、对于可丢失的数据,数据可以先入缓存队列,然后异步做持久化。这样会有高并发度。 比如redis
分享到:
相关推荐
分布式系统设计理论,可以进行参考,不做定论,,,不对可以提出来
#资源达人分享计划#
1分布式理论、架构设计(自定义RPC).zip
为了控制规模, 在开始讨论分布式系统的协议、原理与设计之前,首先给出在本文中研究的分布式系统在分布式层面的基本问题模型。后续所有的讨论都限定在这个模型的范围内,超过模型范围的内容则不在本文中讨论。本文...
分布式系统理论&常用组件深入分析.zip
为了提高FrP系统在并发多用户状态下的数据传输速率和响应速度,设计了基于分布式理论的新型FTP系统,将命令处理和数据处理分离,并应用JAVA RMI技术实现了该分布式FIP系统。介绍了分布式FIP系统的设计和实现过程,给...
分布式事务设计:分布式基础理论(TCC,BASE,2PS等),以及利用zookeeper作为控制中心设计分布式事物。
作为全球首款开源形式验证工具,“灵验”在用户输入RTL设计和SystemVerilog断言描述设计规范的情况下,可以自动进行语法解析、设计综合、断言解析,并且基于分布式计算理论自动调度引擎求解断言,加速验证收敛,从而...
2.2 并行/分布式程序设计语言概述 2.3 并行性的表示 2.4 进程通信与同步 2.5 远程过程调用 2.6 健壮性 第 3 章 分布式系统设计的形式方法 3.1 模型的介绍 3.1.1 状态机模型 3.1.2 佩特里网 3.2 因果相关...
第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,其中包括线程、通信、一致性、容错性、CAP 理论、安全性和并发等相关内容;同时讲述分布式系统的...
本书结合作者在阿里巴巴及淘宝网的实际工作经历,重点介绍大型分布式系统的架构设计,同时,为避免过度专注于理论而使得内容显得空洞,作者穿插介绍了很多实践的案例,尽量让每一个关键的技术点都落到实处,相信能够...
实战方面,首先通过对阿里巴巴的分布式数据库OceanBase的实现细节的深入剖析完整地展示了大规模分布式存储系统的架构与设计过程,然后讲解了大规模分布式存储技术在云计算和大数据领域的实践与应用。 《大规模...
第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,其中包括线程、通信、一致性、容错性、CAP 理论、安全性和并发等相关内容;同时讲述分布式系统的...
通过这门课程的教学,使学生对分布式系统的基本概念、有关体系结构、分布式系统设计原理与方法有一个系统的掌握,能深入理解一些典型的分布式计算系统,为以后从事分布式系统研究与设计打下良好的理论和工程实践的...
CAP理论与分布式系统设计.docx
如何架构与设计大规模分布式存储系统满足...本次课程,将会通过循序渐进、步步深入的方式讲解,理论结合实践,使同学可以熟练掌握分布式存储的知识原理、设计方案,一起动手设计一套满足海量数据的大规模分布式存储系
#资源达人分享计划#
#资源达人分享计划#
鉴于当前缺乏从系统设计理论的角度对其开展的相关研究,本文从 Hadoop 分布式 文件系统架构的建模入手,通过对模型各组成部分进行分析,并将其与传统的分布式文件系统进 行比较,总结出 Hadoop 分布式文件系统具有...