我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019年全年资料内部公开36码 > 强一致性 >

分布式系统副本强一致-(4)

归档日期:07-30       文本归类:强一致性      文章编辑:爱尚语录

  副本一致性是分布式系统的基本问题之一。副本问题是组通信问题,达成副本一致有很多种方式,在介绍具体算法之前,先从更高的层面上看看通信模型。

  如果你想进一步了解分布式系统的基本特征以及consensus问题,那么欢迎戳它:分布式系统上下层概念抽象-(2)

  如果你想进一步了解分布式系统时钟,向量时钟等问题,那么欢迎戳它:分布式系统时钟和有序-(3)

  从组通信的角度,同步副本是一个N-to-N的模型。也就是说在客户端返回之前,所有的server必须事先完成处理。

  从性能的角度,客户端的响应latency最终取决于最慢的server,这也就是说此模型对网络延迟很敏感。

  从可用性容错的角度,N-N意味着任何server都不能发生故障,只要有一个故障,系统就不能接受写入请求。

  从可靠性角度,系统能保证最强的durability,只有全部N个servers故障,才可能导致写入丢失。

  从组通信的角度,异步副本是1-to-N的模型,也即是只要一个server写入成功立刻返回客户端,这个server内部负责随后的通信。

  从性能的角度,延迟低,不需要等待全部的servers,而且对网络延迟并不敏感;

  从可用性容错的角度,只要剩下至少一个节点,系统依然可以对外提供写服务;

  从可靠性的角度,系统提供概率性的保证,理想情况下所有副本最后都同步成功,然而碰巧同步之前这个server故障,数据可能丢失。

  异步副本并不能保证系统的所有的节点都是一致的状态的。如果发生网络分区,不同分区的节点都可能承担了写入操作,那么客户端读取的时候,可能读取到不一致的结果。上面的讨论主要涉及写入,并未涉及读取操作,当读取的时候,我们总希望尽可能读取更少的节点,同时有具有数据的一致性保证。

  对于第一种single-copy systems,这个系统确实像一个单机系统一样工作,能够保证副本的一致性,且阻止网络分叉。这类问题就是很有名的consensus问题。对于consensus,它有以下属性:

  同步:2条消息,先向slave发起update请求,然后等待slave的回复;

  异步模式只有weak保证:例如Mysql的master使用log异步复制的方式来保持master和slave的同步,然而master和slave总是会相差至少一个update。如果master更新完local之后,还未向slave发起update消息就挂了,那么这个更新就丢了。

  同步模式只有weak保证:这个可能很难理解。假如master向slave发起更新请求,且更新成功。在master向客户端返回结果之前,master挂了,这样client以为没有成功,然后slave却成功提交了请求。

  PB模式只能提供best-effort的一致性保证,特别是当节点在不合时宜的时候挂掉,很容易导致丢失更新或者错误更新的问题,另外它也很难抵御脑裂(双主)这种情况。

  两阶段提交协议存在于很多传统的数据库中,像Mysql cluster就是使用的2PC协议。

  第一阶段:投票阶段,如果选择voting,那么参与者将结果保存在临时的区域(write-ahead log)

  第二阶段:决策阶段,协调者根据参与者的反馈执行相应的操作,只有当所有参与者都投票,协调者才会通知参与者将临时的结果持久保存下来。

  第一个阶段给取消操作提供了可能。不同于PB Replication,主发送update请求,备立刻执行,2PC采用了两个阶段,第一阶段可认为是尝试执行阶段,第二阶段是确认执行阶段。 可以看出这是一个N-to-N的模式,对故障和延迟很敏感,而且存在单点和脑裂问题。

  网络出问题的情形有两种:1)分区故障,2)很高的网络延迟,3)远端的节点故障,例如卡住或者crash

  2PC无法处理分区故障,那我们来考虑一下除分区故障之外的故障下如何保证一致性的? 首先要明确的是协调者和参与者的所有操作都写入了日志,很多恢复操作都是因为有日志才可行。

  当协调者重启之后,收集参与者中的信息,只要有参与者执行了commit或者abort,那么表明第一阶段已经结束,直接要求全部的参与者执行相应的commit或者abort(注意所有的参与者要不执行commit,要不执行abort,不会出现不一致)。最难处理的是,未宕机的所有参与者都处于prepare阶段,而宕机节点不知道处于什么状态。如果宕机节点处于commit或者abort阶段,这种就无法处理了,只能等待宕机节点恢复。

  参与者B和C由于网络或者请求还未完全发出去等各种可能的问题,未收到commit请求;

  协调者宕机恢复后,发现B和C依然处于第一个阶段,A节点宕机,节点状态未知;

  这个时候协调者就懵逼了,不知道是应该commit事务,还是abort事务,从而无法保证数据一致。(

  ,还希望有知晓的同学帮忙解答,协调者在发出commit请求之前难道不应该先写入日志吗?有了日志之后协调者重启之后就知道它上次执行的请求是commit,那么直接要求所有节点执行commit不就OK了?重复执行commit应该是没问题的吧?)

  2PC协议不能解决分区故障,因为新选出的协调者可能和旧协调者处于不同的网络分区中,从而独立服务。

  网络分区的概念已经说过多次,简单说来就是整个网络拆分成了两个部分(或者更多),两个部分各自为战,形成了两个子网络,分别对外提供写服务,导致数据不一致。

  解决分区故障的共识算法主要基于多数派具有话语权的思路,只要这个网络中多于一半的节点可正常工作,那么就可对外提供服务,因此节点总数目为奇数。当发生网络分区,具有大半节点的网络对外服务,而另个分区就停止了服务。

  Paxos和Raft中的正常操作的一个阶段被称为epoch。每个epoch中只有一个节点被指派为leader,且服务到这个epoch窗口结束。

  epoch如同一个逻辑锁一样,可用来标记哪些节点是异常或者落后的节点。例如一个故障或者在分区之外的节点加入了进来,它的epoch number落后于本分区内的正常节点,从而它的命令就会被忽略。

  初始状态下,所有的节点在启动之后都是Follower,它和系统中的leader通过心跳保持交互。如果某个Follower发现leader挂掉,那么它会尝试当leader。它首先将自己的状态修改为candicate状态(候选人),并将自己的term号增加1,然后发起proposal,也就是告诉大家我要竞选leader了,你们同意不。

  关于Paxos,我准备另开一个博客,介绍阅读的paxos made simple的一些收获。

  除了paxos,还有Zookeeper使用的ZAB,简单版本的共识协议Raft,都会有专门的博客来分析。

  分布式系统概要昨天晚上看到了一本很有用的小册子,大约60多页,名字叫做Distributedsystemsforfunandprofit,内容涉及了分布式系统的方方面面:有基本的分布式系统的概念,有复...博文来自:低下自己的心,准备起飞了-_-

  很晚了,一致性hash的理论不再多说,直接上我写的c++代码代码功能:1,初始化一些实际的server节点,每个server节点生成一堆虚拟节点2,将所有的虚拟节点根据它的名字生成的hashkey散布...博文来自:低下自己的心,准备起飞了-_-

  角度分布式系统采用RS(k,m)编码故障类型有(磁盘,节点,扇区,机架,机房等故障)机房故障,系统降级,降级情况下的可靠性copyset下的系统可靠性被动和主动的可靠性数据部分修复的故障率数据散布而非...博文来自:低下自己的心,准备起飞了-_-

  如何写一个对扩展开发对修改关闭的推送消息处理中心?前一段时间做的推送消息处理,总是要根据不同的消息类型,进入到不同的消息处理流程中。由于消息处理流程的总体框架大同小异,只是具体的很小的一块代码不同。于...博文来自:低下自己的心,准备起飞了-_-

  分布式存储系统中,副本在节点间的分布策略,对于快速定位数据的位置,以及整个系统的网络流量、节点间io负载均衡,非常重要。副本分布策略,大致分为三种:1.基于统计和监控的副本分布策略;2.基于一致性ha...博文来自:load2006的专栏

  本人参加了DTCC2018数据库大会,将各大公司明星产品的特点进行了个人总结,目前分布式数据库、存储领域内采用的比较领先的技术和技术趋势。RDMA、HTAP、用户空间文件系统以及底层高性能硬件的引入必...博文来自:六神的博客

  多副本的存在是提升一个分布式系统可靠性、可用性、性能以及可扩展性的必要手段,有点像“狡兔三窟”,一个出口堵上了,还有其它的备选出口可供逃生。复制可以提高系统的可靠性显而易见,多个副本可以用于分流(如数...博文来自:csq_year的专栏

  为啥出现一致性问题在传统单体架构中,数据状态的处理都在同一个服务和数据库中,而具有ACID特性的数据库支持强一致性,就是说数据库本身是不会出现不一致的状态的,比如我们常用的关系型数据库MySQL就是通...博文来自:Vioaos Blog

  分布式系统基本概念异常类型1服务器down机(随时发生、内存数据丢失(因此需要考虑数据持久化)、down机重启之后要恢复内存信息)2网络异常(消息丢失、消息乱序(UDP)或者网络包数据错误、区域内可通...博文来自:qq100440110的专栏

  区块链系统,首先是一个分布式系统,一致性问题是分布式领域最为基础也是最重要的问题。1、定义一致性(consistency),是指对于分布式系统中的多个服务节点,给定一系列操作,在约定协议的保障下,试图...博文来自:小熊划水博

  分布式系统原理Quorum机制Quorum机制是一种简单有效的副本管理机制。本节首先讨论一种最简单的副本控制规则write-all-read-one,在此基础上,放松约束,讨论quorum机制。1.约...博文来自:从零开始

  分布式系统中的一致性协议之两阶段提交协议(2PC)     两阶段提交协议是很常见的解决分布式事务的方式,他可以保证分布式事务中,要么所有参与的进程都提交事务成功,要么都取消事务,这样做可以在分布式环...博文来自:chenglinhust的专栏

  本文主要讲述分布式系统中的弱一致性模型,本文中的全部内容全部来自于清华大学分布式课程网站,网站地址博文来自:少年锦时

  在分布式系统中,选择采用多副本方案,就要面对数据一致性问题;数据一致性主要是指在多副本的情况下,如何保证各个副本间数据的一致性。...博文来自:动静之间

  多副本一致性主从同步方式主从异步方式Oracle中的应用CAP理论多副本一致性这是分布式一致性算法的一个典型应用场景。在分布式存储系统中经常使用多副本的方式实现容错,这样部分副本的失效不会导致数据的丢...博文来自:chao2016的博客

  库存冻结现状目前购物车添加商品、删除商品、修改商品数量、购物车过期库存解冻、成单后清空购物车,都涉及库存变化。以添加商品为例,目前实现逻辑为:1、调用库存系统扣减库存2、购物车写库3、第2步失败时,调...博文来自:weixin_43029798的博客

  分布式系统原理:数据分布方式1.哈希方式哈希方式是最常见的数据分布方式,其方法是按照数据的某一特征计算哈希值,并将哈希值与机器中的机器建立映射关系,从而将不同哈希值的数据分布到不同的机器上。哈希分布数...博文来自:从零开始

  分布式理解分布式这个概念这几年越来越火热,今天也来谈谈项目改造过程中对于分布式系统的理解,传统的应用是将所有的模块放在单体tomcat上运行,所以方法间的调用范围都是在同一个jvm内。这在业务初期时很...博文来自:nongfuyumin的专栏

  概述内部因素es的一致性主要有两个方面:使用lucene索引机制带来的refresh问题使用分片和复制带来的副本...博文来自:微尘的世界

  该文章来自于阿里巴巴技术协会(ATA)精选文章。背景可用性(Availability)和一致性(Consistency)是分布式系统的基本问题,先有著名的CAP理论定义过分布式环境下二者不可兼得的关系...博文来自:yizich的专栏

  阿里大数据平台分布式存储-笔记需求1.大存储容量2.高吞吐量3.数据高可靠4.服务高可靠5.高效运维6.低成本挑战1.单机硬件/系统的不完美(小概率出错)2.大规模下需要水平扩展(管理大量的机器)在大...博文来自:lemonTree的博客

  文章目录三个场景火车站售票银行转账网上购物对上述三个场景进行抽象进一步抽象:一致性级别三个场景火车站售票无论在哪个售票窗口,每时每刻的余票都必须是准确无误的。银行转账实时扣除的账户金额,到另一个账户上...博文来自:chao2016的博客

  时间同步(外网)方法一:与一个已知的时间服务器同步中time.nist.gov是一个时间服务器.删除本地时间并设置时区为上海rm-rf/etc/localti...博文来自:风轻云淡的博客

  在《分布式系统之中心副本控制协议(Primary-secondary协议)》中略微提及到了Quorum,但没有进行详细的阐述,这篇文章将带你走进Quorum.1.Quorum介绍首先,先认识发音和基本...博文来自:华仔的逆袭的专栏

  原文出自:服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date...博文来自:每天进步一点点...

  在一些对数据有强一致性要求的应用中,数据库宕机导致数据丢失是我们一定要避免的情况。所以保证数据的一致性对我们而言非常重要。如何做到主从的强一致性呢?在单机数据库中为了保证事务更新操作不会丢失会使用WA...博文来自:的博客

  分布式系统是由多个不同的服务节点组成,节点与节点之间通过消息传递进行通信和协调。根据消息传递的不同,分布式系统的运行模型可以分为异步模型系统和同步模型系统。本文首先将介绍同步通信与异步通信的概念,然后...博文来自:JH_Zhai的博客

  分布式系统原理日志技术日志技术是宕机恢复的主要技术之一[3]。日志技术最初使用在数据库系统中。严格来说日志技术不是一种分布式系统的技术,但在分布式系统的实践中,却广泛使用了日志技术做宕机恢复,甚至如B...博文来自:从零开始

  当我们开发大数据应用时,通常会接触到数据一致性,通常为了提高数据的高可用性,防止单点数据故障,我们会提供数据副本,这时候冗余副本的数据库一致性问题就是需要考虑的问题。在此处整理了三种方式,并展现了HD...博文来自:weixin_34226182的博客

  1.一致性协议和算法2PC协议:两阶段提交协议3PC协议:Paxos算法:ZAP协议:2.远程通信...博文来自:Owen Fang的博客

  Hash大家都知道,把某个要存储的内容的索引key通过某个规则计算一下,算出来一个值,这个值往往范围比原来小,且概率意义上不会冲突。由于Hash计算复杂度往往比查找要快,被大量应用到各种大规模的系统中...博文来自:yeasy的专栏

  在互联网时代信息量巨大,需要非常强的节点计算能力,不但要对用户的响应速度快,还要求吞吐量足够,于是单节点的服务器无法满足人们的需求,服务节点开始集群化,应用进行拆分。拆分为为两种:水平拆分:指一个节点...博文来自:weixin_33755554的博客

  下面的一篇文章讲解的很好:充分的说明了分布式系统的数据最总一致性问题,以“订单”---gt;“支付”---gt;“库存”系统为例:1、订单--》支付,订单成功,支付失败或响应超时...博文来自:fdzhang001的博客

  副本(replica/copy)指在分布式系统中为数据或服务提供的冗余。分为数据副本和服务副本,对于数据副本指在不同的节点上持久化同一份数据,当出现某一个节点的存储的数据丢失时,可以从副本上读到数据。...博文来自:qq100440110的专栏

  ElasticSearch汇总请查看:ElasticSearch教程——汇总篇 一致性概念在分布式环境下,一致性指的是多个数据副本是否能保持一致的特性。在一致性的条件下,系统在执行数据更新操作之后能够...博文来自:东天里的冬天

  hey,你机器怎么老出问题,是不是时间同步有问题呀,有问题你就直说呀,你说了我才知道时间同步有问题嘛,你不说我怎么知道时间同步有问题呢,大家要讲道理嘛,真是时间同步有问题吗,不是真的时间同步有问题吧,...博文来自:敏叔_VIP

  前言在大型的分布式系统中,经常会涉及到状态的改变,这里的状态变化可以分很多种,最极端的情况是,任何状态之间都可以互相切换。这种状态之间的切换,转变,更加官方一点的称为叫状态机。这个词可能很多人会感到比...博文来自:走在前往架构师的路上

  系统实现可扩展性的方法有很多,可以通过增加副本个数或者缓存提高读取能力,将数据分片使得每个分片可以被分配到不同的工作节点以实现分布式处理,把数据复制到多个数据中心等等方式。可扩展性的衡量不能简单地通过...博文来自:kevin_zhao_zl的博客

  要是证明题考到这个,我还真的不能说什么,所以麻烦你掌握!注:一致性就是相合性,注意说法,不是什么新内容。课本对于它们的定义:放一起我就发现问题明朗了,无偏性的判别就是常规解题格式,相合性的判别就是看是...博文来自:weixin_42682806的博客

  lipeng08:[reply][/reply] 还有注意:变量未声明和lib无关。 仔细读这篇文档,特意区分了头文件未添加,lib未添加,以及dll未添加三者的区别,它们带来的错误分别是找不到头文件,函数找不到,执行找不到dll。考虑到学习编译原理一般是在大学,更细节的编译以及运行期的原因就不再展开了。

本文链接:http://ravynhart.com/qiangyizhixing/458.html

上一篇:浅析数据一致性

下一篇:没有了