范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

分布式数据库如何保证数据在分布式场景下的高性能?

  一致性是高可用的必备条件
  在现实世界中,分布式数据库的节点并不总是处于活动状态且相互能够通信的。但是,以上这些故障不应该影响数据库的可用性。换言之,从用户的角度来看,整个系统必须像没有遭到任何故障一样继续运行。系统高可用性是分布式数据库一个极其重要的特性,甚至在软件工程中,我们始终致力于实现高可用性,并尽量减少停机时间。
  为了使系统高度可用,系统需要被设计成允许一个或多个节点的崩溃或不可访问。为此,我们需要引入如上一讲所说的复制技术,其核心就是使用多个冗余的副本来提高系统的可用性。但是,一旦添加了这些副本,我们将面临使多个数据副本保持同步的问题,并且遭遇故障后如何恢复系统的问题。
  这就是 MySQL 复制发展历程所引入的 RPO 概念,也就是系统不仅仅要可用,而且数据还需要一致。所以  高可用必须要尽可能满足业务连续性和数据一致性这两个指标  。
  而我们马上要介绍的 CAP 理论会告诉我们还有第三个因素——网络分区会对可用性产生影响。它会告诉我们可用性和一致性在网络分区下是不能同时满足的。  CAP 理论与注意事项
  首先,  可用性是用于衡量系统能成功处理每个请求并作出响应的能力  。可用性的定义是用户可以感知到的系统整体响应情况。但在实践中,我们希望组成系统的各个组件都可以保持可用性。
  其次,  我们希望每个操作都保持一致性  。一致性在此定义为原子一致性或线性化一致性。线性一致可以理解为:分布式系统内,对所有相同副本上的操作历史可以被看作一个日志,且它们在日志中操作的顺序都是相同的。线性化简化了系统可能状态的计算过程,并使分布式系统看起来像在单台计算机上运行一样。
  最后,  我们希望在容忍网络分区的同时实现一致性和可用性  。网络是十分不稳定的,它经常会分为多个互相独立的子网络。在这些子网中,节点间无法相互通信。在这些被分区的节点之间发送的某些消息,将无法到达它的目的地。
  那么总结一下,  可用性要求任何无故障的节点都可以提供服务,而一致性要求结果需要线性一致  。埃里克·布鲁尔(Eric Brewer)提出的 CAP 理论讨论了一致性、可用性和分区容错之间的抉择。
  其中提到了,异步系统是无法满足可用性要求的,并且在存在网络分区的情况下,我们无法实现同时保证可用性和一致性的系统。不过我们可以构建出,在尽最大努力保证可用性的同时,也保证强一致性的系统;或者在尽最大努力保证一致性的同时,也保证可用性的系统。
  这里提到的"最大努力"意味着,如果一切正常,系统可以提供该特性的保证,但是在网络分区的情况下,允许削弱和违反这个保证。换句话说,CAP 描述了一种组合性选择,也就是要有取舍。从 CAP 理论的定义,我们可以拥有以下几种系统。  CP 系统:一致且容忍分区的系统。更倾向于减少服务时间,而不是将不一致的数据提供出去。一些面向交易场景构建的 NewSQL 数据库倾向于这种策略,如 TiDB、阿里云 PolarDB、AWS Aurora 等。但是它们会生成自己的 A,也就是可用性很高。  AP 系统:可用且具有分区容忍性的系统。它放宽了一致性要求,并允许在请求期间提供可能不一致的值。一般是列式存储,NoSQL 数据库会倾向于 AP,如 Apache Cassandra。但是它们会通过不同级别的一致性模式调整来提供高一致性方案。
  CP 系统的场景实现思路是需要引入共识算法,需要大多数节点参与进来,才能保证一致性。如果要始终保持一致,那么在网络分区的情况下,部分节点可能不可用。
  而 AP 系统只要一个副本就能启动,数据库会始终接受写入和读取服务。它可能最终会丢失数据或产生不一致的结果。这里可以使用客户端模式或 Session 模型,来提供一致性的解决方案。
  使用 CAP 理论时需要注意一些限制条件  。
  CAP 讨论的是网络分区,而不是节点崩溃或任何其他类型的故障。这意味着网络分区后的节点都可能接受请求,从而产生不一致的现象。但是崩溃的节点将完全不受响应,不会产生上述的不一致问题。也就是说,分区后的节点并不是都会面临不一致的问题。而与之相对的,网络分区并不能包含真实场景中的所有故障。
  CAP 意味着即使所有节点都在运行中,我们也可能会遇到一致性问题,这是因为它们之间存在连接性问题。CAP 理论常常用三角形表示,就好像我们可以任意匹配三个参数一样。然而,尽管我们可以调整可用性和一致性,但分区容忍性是我们无法实际放弃的。
  如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入。也就是,当有写入请求时,系统不可用。这与 A 冲突了,因为 A 要求系统是可用的。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。
  如下图所示,其实 CA 类系统是不存在的,这里你需要特别注意。
  图 1 CAP 理论
  CAP 中的可用性也不同于上述的高可用性,CAP 定义对请求的延迟没有任何限制。此外,与 CAP 相反,数据库的高可用性并不需要每个在线节点都可以提供服务。
  CAP 里面的 C 代表线性一致,除了它以外,还有其他的一致模式,我们现在来具体介绍一下。  一致性模型
  一致性模型是分布式系统的经典内容,也是入门分布式数据库的重要知识点。但很少有人知道,其实一致性模型来源于单机理论中的共享内存。
  从用户的角度看,分布式数据库就像具有共享存储的单机数据库一样,节点间的通信和消息传递被隐藏到了数据库内部,这会使用户产生"分布式数据库是一种共享内存"的错觉。一个支持读取和写入操作的单个存储单元通常称为寄存器,我们可以把代表分布式数据库的共享存储看作是一组这样的寄存器。
  每个读写寄存器的操作被抽象为"调用"和"完成"两个动作。如果"调用"发生后,但在"完成"之前该操作崩溃了,我们将操作定义为失败。如果一个操作的调用和完成事件都在另一个操作被调用之前发生,我们说这个操作在另一个操作之前,并且这两个操作是顺序的;否则,我们说它们是并发的。
  如下图所示,a)是顺序操作,b)和 c)是并发操作。
  图 2 顺序操作&并发操作
  多个读取或写入操作可以同时访问一个寄存器。对寄存器的读写操作不是瞬间完成的,需要一些时间,即调用和完成两个动作之间的时间。由不同进程执行的并发读/写操作不是串行的,根据寄存器在操作重叠时的行为,它们的顺序可能不同,并且可能产生不同的结果。
  当我们讨论数据库一致性时,可以从两个维度来区别。  滞后性。它是数据改变的时刻与其副本接收到数据的时刻。这是上一讲所介绍的复制延迟场景,一般被归类为"客户端一致性"范畴。我们将在"15 | 再谈一致性:除了 CAP 之外的一致性模型还有哪些"中进一步讨论。  顺序性。讨论的是各种操作在系统所有副本上执行的顺序状态。这是本讲一致性模型所讨论的重点。
  现在我们对顺序性再做进一步的探讨。
  当面对一系列读写操作时,作为人类,我们对它们的执行顺序是有一个主观判断的。甚至,对于一个单机数据而言,这些操作的顺序也是可以确定的。但是,在分布式系统中做出这种判断就不是那么容易了,因为很难知道什么时候确切地发生了什么,并且很难在整个集群中立刻同步这些操作。
  为了推理操作顺序并指出真正的结果,我们必须定义一致性模型来保障顺序性。
  我们怎么来理解模型中"保障"的含义呢?它是将一致性模型视为用户与数据库之间的一种约定,每个数据库副本如何做才能满足这种顺序保障?并且用户在读取和写入数据时期望得到什么?也就是说,即使数据是被并发读取和写入的,用户也可以获得某种可预测的结果。
  需要注意,我们将要讨论单一对象和单一操作一致性模型,但现实的数据库事务是多步操作的,我们将在下面"事务与一致性"部分进一步讨论。
  下面我按照顺序性的保障由强到弱来介绍一致性模型。  严格一致性
  严格的一致性类似于不存在复制过程:任何节点的任何写入都可立即用于所有节点的后续读取。它涉及全局时钟的概念,如果任何节点在时刻 T1 处写入新数据 A,则所有节点在 T2 时刻(T2 满足 T2>T1),都应该读到新写入的 A。
  不幸的是,这只是理论模型,现实中无法实现。因为各种物理限制使分布式数据不可能一瞬间去同步这种变化。  线性一致性
  线性一致性是最严格的且可实现的单对象单操作一致性模型。在这种模型下,写入的值在调用和完成之间的某个时间点可以被其他节点读取出来。且所有节点读到数据都是原子的,即不会读到数据转换的过程和中间未完成的状态。
  线性一致需要满足的是,新写入的数据一旦被读取出来,那么所有后续的读操作应该能读取到这个数据。也就是说,一旦一个读取操作读到了一个值,那么后续所有读取操作都会读到这个数值或至少是"最近"的一个值。
  上面的定义来自早期的论文,我将里面的关键点提炼一下,如下所示。  需要有全局时钟,来实现所谓的"最近"。因为没有全局一致的时间,两个独立进程没有相同的"最近"概念。  任何一次读取都能读到这个"最近"的值。
  下面我通过一个例子来说明线性一致性。
  现在有三个节点,其中一个共享变量 x 执行写操作,而第三个节点会读取到如下数值。  第一个读操作可以返回 1、2 或空(初始值,两个写操作之前的状态),因为两个写操作仍在进行中;第一次读取可以在两次写入之前,第一次写入与第二次写入之间,以及两次写入之后。  由于第一次写操作已完成,但第二次写操作尚未完成,因此第二次读操作只能返回 1 和 2。  第三次读只能返回 2,因为第二次写是在第一次写之后进行的。
  下图正是现象一致性的直观展示。
  图 3 线性一致性
  线性一致性的代价是很高昂的,甚至 CPU 都不会使用线性一致性。有并发编程经验的朋友一定知道 CAS 操作,该操作可以实现操作的线性化,是高性能并发编程的关键,它就是通过编程手段来模拟线性一致。
  一个比较常见的误区是,使用一致性算法可以实现线性一致,如 Paxos 和 Raft 等。但实际是不行的,以 Raft 为例,算法只是保证了复制 Log 的线性一致,而没有描述 Log 是如何写入最终的状态机的,这就暗含状态机本身不是线性一致的。
  这里推荐你阅读 TiKV 关于线性一致的实现细节,由于线性一致性价比不高,这里就不进行赘述了,我们接下来说说顺序一致性和因果一致性。  顺序一致性
  由于线性一致的代价高昂,因此人们想到,既然全局时钟导致严格一致性很难实现,那么顺序一致性就是放弃了全局时钟的约束,改为分布式逻辑时钟实现。顺序一致性是指所有的进程以相同的顺序看到所有的修改。读操作未必能及时得到此前其他进程对同一数据的写更新,但是每个进程读到的该数据的不同值的顺序是一致的。
  下图展示了 P1、P2 写入两个值后,P3 和 P4 是如何读取的。以真实的时间衡量,1 应该是在 2 之前被写入,但是在顺序一致性下,1 是可以被排在 2 之后的。同时,尽管 P3 已经读取值 1,P4 仍然可以读取 2。但是需要注意的是这两种组合:1->2 和 2 ->1,P3 和 P4 从它们中选择一个,并保持一致。下图正是展示了它们读取顺序的一种可能:2->1。
  图 4 顺序一致性
  我们使用下图来进一步区分线性一致和顺序一致。
  图 5 区分线性一致和顺序一致
  其中,图 a 满足了顺序一致性,但是不满足线性一致性。原因在于,从全局时钟的观点来看,P2 进程对变量 x 的读操作在 P1 进程对变量 x 的写操作之后,然而读出来的却是旧的数据。但是这个图却是满足顺序一致性,因为两个进程 P1 和 P2 的一致性并没有冲突。
  图 b 满足线性一致性,因为每个读操作都读到了该变量的最新写的结果,同时两个进程看到的操作顺序与全局时钟的顺序一样。
  图 c 不满足顺序一致性,因为从进程 P1 的角度看,它对变量 y 的读操作返回了结果 0。那么就是说,P1 进程的对变量 y 的读操作在 P2 进程对变量 y 的写操作之前,x 变量也如此。因此这个顺序不满足顺序一致性。
  在实践中,你就可以使用上文提到的一致性算法来实现顺序一致。这些算法可以保证操作在每个节点都是按照一样的顺序被执行的,所以它们能保证顺序一致。
  如 Google Megastore 这类系统都是使用 Paxos 算法实现了顺序一致性。也就是说在 Megastore 内部,如果有一个数据更新,所有节点都会同步更新,且操作在各个节点上执行顺序是一致的。  因果一致性
  相比于顺序一致性,因果一致性的要求会低一些:它仅要求有因果关系的操作顺序是一致的,没有因果关系的操作顺序是随机的。
  因果相关的要求有如下几点。  本地顺序:本进程中,事件执行的顺序即为本地因果顺序。  异地顺序:如果读操作返回的是写操作的值,那么该写操作在顺序上一定在读操作之前。  闭包传递:和时钟向量里面定义的一样,如果 a->b、b->c,那么肯定也有 a->c。
  那么,为什么需要因果关系,以及没有因果关系的写法如何传播?下图中,进程 P1 和 P2 进行的写操作没有因果关系,也就是最终一致性。这些操作的结果可能会在不同时间,以乱序方式传播到读取端。进程 P3 在看到 2 之前将看到值 1,而 P4 将先看到 2,然后看到 1。
  图 6 因果一致性
  而下图显示进程 P1 和 P2 进行因果相关的写操作并按其逻辑顺序传播到 P3 和 P4。因果写入除了写入数据外,还需要附加一个逻辑时钟,用这个时钟保证两个写入是有因果关系的。这可以防止我们遇到上面那张图所示的情况。你可以在两个图中比较一下 P3 和 P4 的历史记录。
  图 7 逻辑时钟
  而实现这个逻辑时钟的一种主要方式就是向量时钟。向量时钟算法利用了向量这种数据结构,将全局各个进程的逻辑时间戳广播给所有进程,每个进程发送事件时都会将当前进程已知的所有进程时间写入到一个向量中,而后进行传播。
  因果一致性典型案例就是 COPS 系统,它是基于 causal+一致性模型的 KV 数据库。它定义了 dependencies,操作了实现因果一致性。这对业务实现分布式数据因果关系很有帮助。另外在亚马逊 Dynamo 基于向量时钟,也实现了因果一致性。  事务隔离级别与一致性模型
  现在我们谈论了一致性模型,但是它与数据库领域之中的事务有什么区别呢?我先说结论:有关系但又没有关系。
  怎么理解呢?我先来论证它们之间的无关性。
  ACID 和 CAP 中的"C"是都是一致性,但是它们的内涵完全不同。其中 ADI 都是数据库提供的能力保障,但是 C(一致性)却不是,它是业务层面的一种逻辑约束。
  以转账这个最为经典的例子而言,甲有 100 元 RMB,乙有 0 元 RMB,现在甲要转给乙 30 元。那么转账前后,甲有 70,乙有 30,合起来还是 100。显然,这只是业务层规定的逻辑约束而已。
  而对于 CAP 这里的 C 上文已经有了明确说明,即线性一致性。它表示副本读取数据的即时性,也就是对"何时"能读到"正确"的数据的保证。越是即时,说明系统整体上读取数据是一致的。
  那么它们之间的联系如何呢?其实就是事务的隔离性与一致模型有关联。
  如果把上面线性一致的例子看作多个并行事务,你会发现它们是没有隔离性的。因为在开始和完成之间任意一点都会读取到这份数据,原因是一致性模型关心的是单一操作,而事务是由一组操作组成的。
  现在我们看另外一个例子,这是展示事务缺乏一致性后所导致的问题。
  图 8 事务与一致性
  其中三个事务满足隔离性。可以看到 T2 读取到了 T1 入的值。但是这个系统缺乏一致性保障,造成 T3 可以读取到早于 T2 读取值之前的值,这就会造成应用的潜在 Bug。
  那现在给出结论:事务隔离是描述并行事务之间的行为,而一致性是描述非并行事务之间的行为。其实广义的事务隔离应该是经典隔离理论与一致性模型的一种混合。
  比如,我们会在一些文献中看到如"one-copy serializability""strong snapshot isolation",等等。前者其实是 serializability 隔离级别加上顺序一致,后者是 snapshot 隔离级别加上线性一致。
  所以对分布式数据库来说,原始的隔离级别并没有舍弃,而是引入了一致性模型后,扩宽数据库隔离级别的内涵。  总结
  今天的内容较长,不过已经精炼很多了。我们从高可用性入手,介绍了 CAP 理论对于分布式模型评估的影响;而后重点介绍了一致性模型,这是核心,用来帮助你评估分布式数据库的特性。
  最后我介绍了事务隔离级别与一致性模型之间的区别与联系,帮助你认清分布式数据库下的事务隔离级别的概念。

慢性咽炎扁桃体炎?一个张仲景方化痰散结各种咽喉问题一扫光慢性咽炎,扁桃体炎反复发作,惹人烦?大家好,我是屈医生,今天给大家分享一个张仲景名方,行气散结,降逆化痰,把咽喉问题一扫光,让你不再烦恼。你有没有这样的情况,总觉得嗓子里还异物,吐马布里太难!一档球队打不过,二档球队没优势,CBA季后赛又悬了CBA注册截止日期结束之后,对于很多球迷来说,非常直观的感觉就是辽粤争霸的时代结束了,上海来势汹汹,深圳不断补强,新疆招兵买马,浙江广厦保持核心框架,北京,吉林,山东全部处于阵容上意甲最新积分榜尤文2球完胜攀升第4,那不勒斯爆冷平升班马今天凌晨,意甲联赛第4轮继续激战,尤文图斯主场20击败斯佩齐亚,弗拉霍维奇连场任意球破门,新援米利克打进处子球锁定胜局那不勒斯主场11战平莱切,爆出了不小的冷门,遭到了联赛2连平拉压哨官宣!郭艾伦获辽篮预注册,卫冕冠军造恐怖阵容,杨鸣太幸福赶在新赛季球员注册期限截止之前,辽宁男篮终于对大名单进行更新,依照CBA官网的信息显示,此前申请离队的核心郭艾伦,已经得到了球队的注册,新赛季将继续跟随辽宁男篮一起,征战20222马丁内利很高兴能进球帮助阿森纳获胜,球队配得上三分直播吧9月1日讯英超第5轮阿森纳21战胜维拉,比赛中马丁内利帮助球队打进制胜球,赛后在接受采访的时候他谈到了这场比赛。马丁内利说整个赛季,甚至是下个赛季以及未来我们全队都需要保持这形势不妙!图赫尔重建切尔西失败面临下课,C罗有望成为救世主从巴黎圣日耳曼下课后,图赫尔得到了阿布的欣赏,替代兰帕德成为了切尔西主教练,没有人可以预料到这位德国名帅居然能带领蓝军在欧冠赛场一路过关斩将,赢得了梦寐以求的大耳朵杯,图赫尔也因此国乒女单遭遇首场败绩!03完败一轮游,陈幸同蓄势待发冲击冠军北京时间9月1日,国际乒联WTT保加利亚公开赛正在进行。目前,男单资格赛前两轮比拼已经结束,国乒方面依旧表现不尽人意,10人参赛,多达6人被淘汰。本站公开赛,男单竞争力更弱,几乎没15个中成药,虽然价廉,但治疗疾病的疗效可不赖,很值得收藏1。痰湿咳嗽羚贝止咳糖浆。成分主要是由紫菀)茯苓麻黄知母金银花等。宣肺化痰,止咳平喘。用于小儿肺热咳嗽及痰湿咳嗽。2。肾阳虚参茸鹿胎丸。主要功效为调经活血温宫止滞,男子于用身体虚弱肿瘤患者秋季怎么调整饮食更利于康复对于癌症患者而言,饮食要顺应四时变化,调整饮食策略,更有利于康复。一秋季特点秋季包括立秋处暑白露秋分寒露霜降6个节气,是指我国农历的七月八月九月。秋季,气温开始降低,雨量减少,空气5岁外孙识字量远超同龄人,一个月识500字,姥爷的方法简单又有趣大家好,我是艾米妈周末去邻居家串门时,发现邻居家5岁多的儿子铭铭没有像之前那样看电视,而是安静地坐在沙发上看书。只见小家伙一页一页地在翻看一本厚厚的书,看得非常专心,我走近一看,他我的睡眠总算好起来了(方法分享)记录分享一下过去一段时间,我失眠好转所尝试的方法,如果你也有这方面的困扰,希望这篇文章对你们有帮助。两个月前,我出现连续四天彻夜失眠的情况,后面几天夜里,真的很想哭。虽然我本身睡眠
火星或月球等其他星球有石油吗?有何依据?答关于石油的形成,目前主流解释为生物成油理论,如果该理论正确,那么月球上不可能有石油,火星上还不得而知。石油的主要成分是碳氢化合物,属于有机物按照目前主流的石油形成理论,石油是死亡宇宙中最高的温度能达到多少?目前最高的温度是多少?宇宙形成后10负36次方秒,宇宙温度达到10000亿亿亿,而人类观测到的最高温度是伽马射线爆,几分钟释放的能量可以达到太阳1万亿年释放的能量总和。目前通过观测宇宙,认为宇宙最初形成彩票的中奖概率很低,一些人还是很着迷,为什么?盼望着说不定哪天就走了狗屎运了呀,同时也为中国彩票事业做一点贡献呲牙因彩票游戏是娱乐活动,国家的彩票事业,不但为国家的福利事业做贡献,而且每年都产生了一至两千个百万收入的家庭。更重除了洛国富,明年1月到底还能有几名归化球员能为国足效力?中超联赛回归公益以后,归化来的几个球员的高年薪难以为继了,这是他们离开中超的原因,不过离开中超而不放弃中国国籍,他们还是可以代表国足岀战的,只要他们找到新东家,并保持着较高的竞技状世界足坛有哪些自毁前程的球员,他们当时做错了什么?世界足坛有很多自毁前程的球员有很多,但原因各自不同。有的是因为心理脆弱,受不住突然变故的打击,像巴西的阿德里亚诺,由于承受不住父亲的突然病故而自毁前程。而意大利的巴洛特利则属于情商孙颖莎能获得2021年度世界乒联最佳女运动员吗?感谢邀请!国际乒联每年度都会评选出最佳男女运动员,那莎莎有可能获此殊荣吗?对于2021年度来说,陈梦王曼昱都比莎莎有更有资格获得最佳。莎莎粉丝众多,人气颇高,她有可能获得最具人气女当今足坛哪些球员的腹肌算得上是完美状态吗?腹肌确实可以瘦出来,只要你体脂率够低,那都能看到腹肌。但是作为职业运动员,特别是像足球这类拼身体的运动,如果你的腹肌不是练出来而是瘦出来的,那在场上就是一碰就倒。腹肌不仅是好看,这英语真的有必要从小学一年级开始学吗?自从小学一年级开英语课后,孩子们从小开始学英语的越来越多,各种英语培训班也办得红红火火。各种名目的英语早教班也应运而生,让大家眼花缭乱,不知所措。且不说费用高,那么小的孩子中文都不有哪些影视剧是正不胜邪?一般来说,惊悚恐怖片中比较多这种正不胜邪的结局。1。万能钥匙年轻女孩卡洛琳受雇于一个老妇人,去老妇人家照顾她和她生病的丈夫。然而这间房子坐落的地区,以神秘习俗和宗教仪式为名,并且房岳云鹏比朱之文更有钱,为什么岳云鹏家乡没有把岳云鹏当提款机?这个问题很好。同样是农村出生,同样是中年走红,相似的奋斗经历,同样的不容易。但朱之文却屡屡被爆出各种新闻,有关于粉丝闹上门的有关于不请自来的更有借钱不还,却觉得天经地义的。其实,岳战令60级宝箱,已有关羽龙腾,剩下的选哪个好?对于战令精英版来说,最丰厚的奖励莫过于60级时的永久皮肤自选礼包了,免费送皮肤,虽然皮肤都一般般,但是总比没有强吧,没特效又怎么样,有属性加成就行了,总是比光着要好点的,这个礼包里