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
分享到:
相关推荐
分布式认知理论在学习环境设计中的应用,不仅提升了教学实践的科学性和系统性,也为教育工作者提供了更为宽广的视角来理解学习和认知过程,为实现教育的创新和改革提供了有力的理论支持。通过实际应用这一理论,可以...
《分布式系统理论》是一份深入探讨分布式计算领域的珍贵笔记,由James Aspnes撰写并发布在2020年。这份笔记涵盖了异步分布式计算系统的模型、并发与同步的基本概念,以及通信、可靠性和时间复杂性的核心主题。此外,...
分布式系统设计理论,可以进行参考,不做定论,,,不对可以提出来
分布式系统设计是现代互联网服务和企业级应用的核心技术之一,它涉及到多个计算机节点通过网络进行协同工作,共同处理任务和数据。在这个领域,我们需要深入理解并掌握一系列关键知识点,以构建高效、可扩展且容错的...
在SPOC课程中,分布式认知理论能够指导教学设计,强调教学过程的系统性和连贯性,将学习任务分解为多个认知环节,利用各种资源和工具,促进学生对知识的综合理解。 应用分布式认知理论于SPOC课程,首先可以提升教学...
在具体设计原则方面,该研究提出了五个基于分布式认知理论层级关系的设计原则,分别是知识设计、技能设计、动机激励设计、记忆设计和社交设计。知识设计需要考虑如何在游戏环境中合理地引入课程知识,技能设计关注...
分布式认知理论是现代认知科学的一种重要理论框架,它在21世纪80年代由赫欣斯等人提出,打破了传统认知理论中将认知过程局限于个体头脑内部的观念。根据分布式认知理论,认知活动并非孤立地发生在单个个体的头脑中,...
然而,尽管分布式认知理论带来了诸多益处,其研究仍面临一些挑战,比如如何更准确地量化和模型化分布式认知过程,以及如何更好地将理论应用于实际系统的设计和优化。这些问题的解决将进一步推动分布式认知理论的发展...
拜占庭将军问题这篇论文是分布式领域的一个经典问题,同样由Leslie Lamport撰写,它引入了拜占庭错误模型,为后续容错分布式系统的设计提供了理论基础。 Leases这篇论文探讨了分布式缓存一致性问题,并提出了租约...
### 分布式控制理论与技术的关键知识点解析 #### 一、问答题解析 **1. 分布式控制理论与技术的发展过程经历了哪些阶段?各阶段的特点是什么?** 分布式控制理论与技术的发展大致可以分为以下几个阶段: - **初期...
分布式理论与架构设计是现代大型互联网系统的核心组成部分,它们涉及到如何将复杂的业务逻辑拆分成多个独立的服务,并通过网络进行通信,以实现高可用性、可扩展性和高性能。自定义RPC(Remote Procedure Call)框架...
在本文中,将详细探讨分布式控制理论在火电厂协调控制系统中的应用情况。火电厂的协调控制系统是一个多变量控制系统,对于整个火电厂的运行具有决定性意义。其特点主要表现为多变量、强耦合性、大时滞性、非线性、...
为了控制规模, 在开始讨论分布式系统的协议、原理与设计之前,首先给出在本文中研究的分布式系统在分布式层面的基本问题模型。后续所有的讨论都限定在这个模型的范围内,超过模型范围的内容则不在本文中讨论。本文...
分布式学习理论是认知心理学的一个流派,强调认知不仅存在于个体内部,还广泛分布于个体与外界环境交互的过程中。该理论认为,学习过程应该重视学习者的中心地位,并应广泛利用各种环境因素和社会文化资源,以促进...
通过理解和应用分布式认知理论,图书馆员和信息服务者可以更好地设计和实施与用户环境相融合的服务,提高服务的质量和效率,实现信息资源与服务的优化配置。这些理论和实践的发展无疑有助于促进知识的传播和应用,...
标签中提到了“毕设”,这意味着这些资料可能特别适合那些正在进行毕业设计的学生,他们可能需要将所学的理论知识应用到实际项目中,比如构建一个基于Web的分布式应用,使用Node.js作为后端服务,而MongoDB作为数据...
总之,分布式认知理论为构建大学生移动学习空间提供了理论框架,它强调环境、个体和资源的互动,有助于设计出更加符合学习者需求的移动学习环境,从而提高学习质量和效率。在信息化教育背景下,理解和运用这一理论...
例如,在系统构建方面,研究者可能会设计出适应分布式压缩感知理论的硬件和软件架构,以在具体的应用中优化性能和降低成本。 目前,分布式压缩感知的研究仍然处于积极发展的阶段。随着信号处理技术和相关硬件设备的...
分布式认知理论,是一种认知科学理论,它强调认知活动不仅局限于个体大脑内部,而是可以分布于个体之间、不同媒介、环境、文化、社会乃至时间等多个维度。它提倡要研究整个认知系统,而不仅仅是研究单一个体的心智。...