一致性

sun_abcd1 个月前
分布式·一致性
分布式数据一致性小结分布式一致性问题包括数据一致性问题和事务一致性问题。在此仅关注数据一致性问题,数据一致性问题是因为分布式系统下数据需要复制而导致的。
JinYD20182 个月前
分布式·分布式事务·一致性
分布式事务和一致性分布式事务是指在分布式系统中涉及到多个数据库或多个应用程序之间的事务处理,这些数据库或应用程序可能 布在不同的物理节点上,甚至可能位于不同的地理位置,在分布式事务中,需要确保所有参与者的事务操作都能 保持一致性,即所有参与者的事务要么全部提交成功,要么全部回滚。
xcg3401234 个月前
数据库·分布式·系统架构·一致性
【系统架构师】-案例篇(十四)数据库与分布式不满足3NF,导致的存储异常原关系模式航班(航班编号,航空公司,起飞地,起飞时间,目的地,到达时间,剩余票数,票价)
coffee_babe5 个月前
java·分布式·raft·一致性
分布式与一致性协议之常见疑惑(一)线性一致性(Linearizability),也称为原子性或强一致性,是分布式系统中的一个一致性模型,它定义了系统对读写操作的行为,以确保系统表现得好像只有一个数据副本,并且所有操作都是原子的。 在线性一致性模型中,系统的行为应该满足以下条件:
coffee_babe5 个月前
java·分布式·一致性·共识算法·gossip·一致性算法
分布式与一致性协议之Gossip协议有些人的业务需求具有一定的敏感性,比如监控主机和业务运行的告警系统,大家都希望自己的系统在极端情况下(比如集群中只有一个节点在运行)也能运行。在会以了二阶段提交协议和Raft算法之后,你会发现它们都需要全部节点或者大多数节点正常运行才能稳定运行,并不适合此类场景。而如果采用Base理论,则需要实现最终一致性,那么,怎样才能实现最终一致性呢? 在我看来,可以通过Gossip协议来实现这个目标。 Gossip协议,顾名思义,就像流言蜚语一样,是指利用一种随机、带有传染性的方式将信息传播到整个网络中,并在一定时
coffee_babe5 个月前
java·分布式·一致性·共识算法·quorum nwr
分布式与一致性协议之Quorum NWR算法不知道你在工作中有没有遇到过这样的事情:你开发实现了一套AP型分布式系统,实现了最终一致性,且业务接入后运行正常,一切看起来都那么美好。 可是突然有同事说,我们要拉这几个业务的数据做实时分析,希望数据写入成功后,就能立即读取到新数据,也就是要实现强一致性(Werner Vogels提出的客户端侧一致性模型,不是指线性一致性),即数据更改后,要保证用户能立即查询到,这时你该怎么办呢?首先你要明确最终一致性和强一致性有什么区别.
coffee_babe5 个月前
java·分布式·一致性·一致性算法·pbft
分布式与一致性协议之PBFT算法(一)前面提到了拜占庭将军问题之后,有人可能会感到困惑:口信消息型拜占庭问题直接在实际项目中是如何落地的呢?事实上,它很难在实际项目中落地,因为口信消息型拜占庭问题之解是一个非常理论化的算法,没有与实际场景结合,也没有考虑如何在实际场景中落地和实现。
coffee_babe5 个月前
java·分布式·一致性·共识算法·一致性算法
分布式与一致性协议之一致哈希算法(二)通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,警告过计算寻址到了编号为1的服务器节点A,如图所示。
coffee_babe5 个月前
java·分布式·一致性·共识算法·一致性算法·zab
分布式与一致性协议之ZAB协议(四)首先我们来看看ZooKeeper是如何实现成员身份的? 在ZooKeeper中,成员状态是在QuorumPeer.java中实现的,为枚举型变量
coffee_babe5 个月前
java·分布式·一致性·一致性算法·zab
分布式与一致性协议之ZAB协议(三)众所周知,系统在运行中不可避免会出现各种各样的问题,比如进程崩溃了、服务器死机了,这些问题会导致很严重的后果,让系统没办法继续运行。在ZAB协议中,写请求是必须在主节点上处理的,而且提案的广播和提交也是由主节点来完成的。既然主节点那么重要,如果它突然崩溃(宕机)了,该怎么办呢? 答案是选举出新的领导者(也就是新的主节点)。 在我看来,领导者选举关乎节点故障容错能力和集群可用性,是ZAB协议非常核心的设计之一。想象一下,如果没有领导者选举,主节点故障了,那么整个集群将无法写入,这将是极其严重的灾难性故障。理
coffee_babe5 个月前
java·分布式·一致性·一致性算法·zab
分布式与一致性协议之ZAB协议(八)相比写操作,读操作的处理要简单很多,因为接收到度请求的节点只需要查询本地数据,然后响应数据给客户端就可以了。读操作的核心流程如图所示。
coffee_babe5 个月前
java·分布式·一致性·一致性算法·zab
分布式与一致性协议之ZAB协议(七)你应该有这样的体会,如果你想了解一个网络服务,执行的第一个功能肯定是写操作,然后才会执行读操作。比如,你要了解ZooKeeper,那么肯定会在zkClient.sh命令行中执行写操作(比如create /geekbang 123)写入数据,然后再执行读操作(比如get /geekbang)查询数据。这样一来,你才会直观地理解ZooKeeper的使用方法。
coffee_babe5 个月前
java·分布式·raft·一致性·共识算法
分布式与一致性协议之一致哈希算法(三)我们一起来看一个例子,对于1000万个key的3节点KV存储,如果我们使用一致哈希算法增加1个节点,即3节点集群变为4节点集群,则只需要迁移24.3%的数据,如代码所示
coffee_babe5 个月前
java·分布式·一致性·共识算法·zab
分布式与一致性协议之ZAB协议(六)成员发现是通过跟随者和领导者交互来完成的,目标是确保大多数节点对领导者的关系没有异议,也就是确立领导者的领导地位。成员发现的实现流程如图所示。
coffee_babe5 个月前
java·分布式·一致性·共识算法·zab
分布式与一致性协议之ZAB协议(五)如果我们想把ZAB集群恢复到正常状态,那么新领导者就必须确立自己的领导关系,成为唯一有效的领导者,然后作为主节点"领导"各备份节点一起处理读写请求
coffee_babe5 个月前
java·分布式·一致性·一致性算法·zab
分布式与一致性协议之ZAB协议(二)如果用一句话解释ZAB协议到底是什么,我觉得它是能保证操作顺序性的、基于主备模式的原子广播协议。 接下来,还是以指令X、Y为例具体演示一下,帮助你更好地理解为什么ZAB协议能实现操作的顺序性(为了演示,我们假设节点A为主节点,节点B、C为备份节点)。 首先,在ZAB协议中,写操作必须在主节点(比如节点A)上执行。如果客户端访问的节点是备份节点(比如节点B),则备份节点会将写请求转发给主节点,如图所示。 接着,当主节点接收到写请求后,它会基于写请求中的指令(也就是X、Y)来创建一个提案(Proposal),
coffee_babe5 个月前
java·分布式·raft·一致性·共识算法
分布式与一致性协议之Raft算法(三)你可以把Raft算法的日志复制理解成一个优化后的二阶段提交(将二阶段优化成了一阶段)。优化后减少了一半的往返消息,也就是降低了一半的消息延迟,那日志复制的具体过程又是什么呢? 首先,领导者进入第一阶段,通过日志复制RPC消息将日志项复制到集群中的其他节点上。接着如果领导者接收到大多数的"复制成功"响应后,它会将日志项应用到它的状态机,并返回成功给客户端。如果领导者没有接收到大多数的"复制成功"响应,那么就返回错误给客户端。有人可能会有这样的疑问,领导者将日志项应用到它的状态机,为什么没有通知跟随者应用日志
coffee_babe5 个月前
java·分布式·raft·一致性·共识算法·一致性算法
分布式与一致性协议之Raft算法与一致哈希算法(一)有很多人把Raft算法当成一致性算法,其实它不是一致性算法而是共识算法,是一个Multi-Paxos算法,实现的是如何就一系列值达成共识。并且,Raft算法能容忍少数节点的故障。虽然Raft算法能实现强一致性,也就是线性一致性(Linearizability),但需要客户端协议的配合。在实际场景中,我们一般需要根据场景特点,在一致性强度和实现复杂度之间进行权衡。比如Consul实现了3种一致性模型。
coffee_babe5 个月前
java·分布式·raft·一致性·一致性算法
分布式与一致性协议之Raft算法(四)在日常工作中,你可能会遇到服务器故障的情况,这时你需要替换集群中的服务器。如果遇到需要改变数据副本数的情况,则需要增加或移除集群中的服务器。总的来说,在日常工作中,集群中的服务器数量是会发生变化的。也许你会问,Raft算法是共识算法,它对集群成员进行变更时(比如增加2台服务器),会不会因为集群分裂出现两个领导者呢?在我看来,的确会出现这个问题,因为Raft算法的领导者选举是建立在"大多数"的基础之上,那么当成员变更,集群成员发生变化时,就可能同时存在新旧配置的两个"大多数",出现两个领导者,从而破坏了Ra
coffee_babe5 个月前
java·分布式·一致性·一致性算法·paxos·multi-paxos
分布式与一致性协议之Paxos算法(二)想象这样一个场景,某地出现突发事件,当地村委会、负责人等在积极研究和搜集解决该事件的解决方案,你也决定参与其中,提交提案,建议一些解决方法。为了和其他村民的提案做区分,你的提案还得包含一个提案编号,以起到唯一标识的作用。与你的做法类似,在Basic Paxos中,兰伯特也使用提案代表一个提议。不过提案中除了包含提案编号,还包含提议值。为了方便表示,使用[n,v]表示一个提案,其中n为提案编号,v为提议值。