分布式架构

集中式的特点

集中式是指一台或多台计算机组成中心节点,数据集中存储于这个中心节点中。集中式系统的最大特点是部署结构简单,不需要考虑多个节点之间的分布式协作问题。

分布式特点

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

分布式系统有以下几个特征:

  • 分布性。多台机器随意分布
  • 对等性。分布式系统中的计算机没有主从之分。分布式系统会对数据和服务提供一种冗余方式,也就是副本的概念。
  • 并发性。如何准确高效的协调分布式并发操作是分布式系统架构与设计中最大的挑战之一
  • 缺乏全局时钟。因为分布式系统在空间上多个进程随机分布,因此很难判断事件的先后顺序,原因就是分布式系统缺乏一个全局的时钟序列控制。
  • 故障总是会发生。组成分布式系统的所有计算机,都有可能发生任何形式的故障。

分布式系统的问题

  • 通信异常。由于网络的不可靠性,所以可能会对节点的通信造成影响。另外网络通信会带来延迟的问题。
  • 网络分区。当网络延时不断增大时,可能会出现只有部分节点能正常通信的情况,这样就出现了局部小集群的现象。这样对于分布式一致性提出了非常大的挑战。
  • 三态。三态是指分布式系统在请求与响应过程中出现的成果、失败与超时三种情况。但是如果网络发生异常,还可以出现请求消息丢失或者响应消息丢失的情况,这样的话就无法确定请求是否被成果处理
  • 节点故障。指分布式系统服务器节点出现宕机或“僵死”现象

从ACID到CAP/BASE

事务的四个特性:ACID

  • 原子性。原子性指事务的各项操作要么全部成果执行,要么不执行。
  • 一致性。指事务的执行不能破坏数据库的完整性和一致性。
  • 隔离性。指事务在并发的环境中,一个事务的执行不能被其他事务干扰。
  • 持久性。指一个事务一旦提交,对数据库中对应数据的状态变更就应该是永久性的。

事务的四个隔离级别

  • 未授权读取(读未提交,Read Uncommitted)。指一个事务在处理某数据时,在事务尚未完成的情况下允许另一事务访问改数据。其他事务可以看到这一事务的中间数据并且可以读取。
  • 授权读取(读已提交,Read Committed )。与未授权读取比较接近,区别在于授权读取只允许获取已经被提交的数据。
  • 可重复读取(Repeatable Read)。就是保证在事务处理过程中,多次读取同一个数据时,其值和事务开始时刻是一致的。
  • 串行化(Serializable)。串行化要求所有事务都串行执行,不能并发执行,是最严格的隔离级别。

隔离级别 脏读 可重复读 幻读
未授权读取 存在 不可以 存在
授权读取 不存在 不可以 存在
可重复读取 不存在 可以 存在
串行化 不存在 可以 不存在

CAP/BASE理论

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。

为了构建一个兼顾可用性与一致性的分布式系统,出现了诸如CAP和BASE这样的分布式经典理论。

CAP定理

CAP理论告诉我们,一个分布式系统不可能同时满足一致性(C: Consistency)、可用性(A: Availability)和分区容错性(P: Partition tolerance)这三个基本需求,最多只能同时满足其中的两项。

  • 一致性。指数据在多个副本之间是否能够保持一致的特性。
  • 可用性。指系统提供的服务一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
  • 分区容错性。分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络都发生了故障。

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。核心思想是即使无法做到强一致性,也可以采用适当的方式使系统达到最终一致性。

  • 基本可用。指出现不可预知故障时,允许损失部分可用性。比如响应时间上的损失或功能上的损失。
  • 弱状态。指允许系统中的数据存在中间状态。即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
  • 最终一致性。最终一致性强调最终数据能达到一直,而不需要实时保证数据的强一致性。

一致性协议

分布式系统中引入了“协调者(Coordinator)”组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为“参与者(Participant)”。

2PC(二阶段提交协议)

二阶段提交协议分为投票和执行两个阶段。

投票阶段:协调者向所有参与者发送事务内容,询问是否可以执行,各参与者执行事务,并将Undo和Redo信息记入事务日志中,然后给协调者返回响应。

执行阶段:如果所有参与者都返回yes响应就会执行事务提交。协调者向所有参与者发送Commit请求,参与者完成事务提交并释放资源后向协调者发送Ack消息,协调者收到所有ack消息后完成事务。

中断事务:如果协调者收到了no响应,或者等待超时,就会中断事务。协调者向所有参与者发送Rollback请求,参与者利用Undo信息执行回滚,并向协调者发送Ack,协调者收到所有ack消息后完成事务中断。

二阶段提交的方式存在下面几个问题:

1、同步阻塞。参与者在等待其他参与者响应的过程无法进行其他操作。

2、单点问题。一旦协调者出现问题,就无法继续完成事务操作。

3、数据不一致。在阶段二也就是执行阶段,如果发生局部网络异常,部分参与者可能没有完成Commit。

4、太过保守。没有容错机制,任何一个节点的失败都会导致整个事务的失败。

3PC(三阶段提交协议)

三阶段提交协议将二阶段提交协议的“提交事务请求”过程一分为二,形成了由CanCommit、PreCommit、do Commit三个阶段组成的事务处理协议。

阶段一:CanCommit。协调者向所有参与者发送事务内容的CanCommit请求,参与者返回是否能够执行的响应。

阶段二:PreCommit。这一阶段分为两种情况。一是所有的参与者都返回yes,就会执行事务预提交。协调者向所有参与者发送PreCommit请求,参与者执行事务操作并将Undo和Redo信息记录到事务日志中,参与者成果执行就返回ack消息并等待最终指令:提交(commit)或终止(abort)。二是如果有参与者返回no或者协调者等待超时,进入事务中断流程。协调者向所有参与者发送abort请求,参与者收到abort请求或者等待超时就会中断事务。

阶段三:do Commit。这一阶段也有两种情况。一是协调者正常工作并且收到所有参与者的ack消息,就会从“预提交”状态转换到“提交”状态,并向所有的参与者发送“doCommit”请求。然后就是参与者执行事务,发送ack,协调者完成事务。二是有参与者发送no或者等待超时,协调者会向所有参与者发送abort请求,参与者利用Undo执行回滚然后发送ack,最后完成事务中断。

阶段三可能会出现协调者出现问题或者网络故障,这时参与者会在等待超时后继续进行事务提交。

三阶段提交协议优点:降低了参与者阻塞范围,能够在出现单点故障后继续达成一致。

缺点:参与者收到PreCommit消息后,如果出现网络分区,参与者依然会进行事务提交,这种情况会出现数据不一致。

Paxos算法

Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。

算法原理参考:Paxos算法原理与推导

分布式系统简介与分布式一致性算法相关推荐

  1. 分布式一致性算法Raft简介(下)

    slide 15: 这一节开始讲leader changes,即leader的变更过程中如何保证log的一致性: 1)需要明白的是,新leader上任后,各个server的log状态很可能是不一致的: ...

  2. 分布式一致性算法Raft简介(上)

    最近看了Ongaro在2014年的博士论文<CONSENSUS: BRIDGING THEORY AND PRACTICE>的部分章节,对raft有了初步的理解.其中论文中提到用于教学的u ...

  3. Paxos分布式一致性算法简介和Apache ZooKeeper的概念映射

    为什么80%的码农都做不了架构师?>>>    Paxos是一个基于消息传递的一致性算法,近几年被广泛应用于分布式计算中,Google的Chubby,Apache的Zookeeper ...

  4. 分布式一致性算法Raft

    导语 | 对于很多工程人员来说,Paxos算法不容易理解和落地实现.因此斯坦福学者提出了一个更易理解和实现的共识算法Raft.本文主要介绍Raft的基本原理.算法流程以及和Paxos的区别. 一.Ra ...

  5. 一文了解分布式一致性算法EPaxos

    简介:分布式系统一个核心的问题就是数据的一致性.Paxos算法是分布式一致性中的经典算法,用来解决一个分布式系统如何就某个值(决议)达成一致的问题.本文从Paxos的问题引出EPaxos,介绍EPax ...

  6. 分布式一致性算法——Paxos 和 Raft 算法

    写在前面 本文隶属于专栏<100个问题搞定大数据理论体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见100个问题搞定大数据理 ...

  7. 分布式一致性算法之Paxos

    2pc.3pc.paxos.raft都是解决分布式系统中的一致性问题的. 一.两个类型的一致性(操作原子性与副本一致性) 1.2pc.3pc协议用于保证属于多个数据分片上的操作的原子性.这些数据分片可 ...

  8. 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)

    编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...

  9. 从分布式一致性算法到区块链共识机制

    引言 分布式一致性是一个很"古典"的话题,即在分布式系统中,如何保证系统内的各个节点之间数据的一致性或能够就某个提案达成一致.这个问题想必对于很多技术同学而言并不陌生,几乎在所有的 ...

最新文章

  1. qt designer python显示_请问在python怎么使用qtdesigner设计的ui?
  2. 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...
  3. Android性能优化(31)---虚拟机调优
  4. WebBrowser页面与WinForm交互技巧(转)
  5. java注解接收上传文件_SpringMVC 处理 multipart/data 请求实现文件上传
  6. 快速将多个excel表合并成一个excel表---内附代码
  7. 遗传算法原理及其python实现
  8. 如何在手机上快速制作小一寸证件照
  9. Tomcat 中文乱码
  10. 【转】将安全证书导入到java的cacerts证书库
  11. 【计算机网络】网络层 : 无分类编址 CIDR ( 编址发展 | CIDR 优点 | CIDR 相关计算 | 构成超网 | 最长前缀匹配 | 计算示例 )★
  12. 系统容量评估和性能保障
  13. VirtualBox下配置 Ubantu18.4 总纲领
  14. 静态页面练习——京东商城登录页面
  15. Python海龟画图 画一个爱心 赶快给女朋友来一个
  16. mysql中的四种注释
  17. java 下载图片流
  18. 一文看尽深度学习中的15种损失函数
  19. 拼多多商品APi、商品详情、产品页面信息接口
  20. 使用io流一行一行读取txt文件

热门文章

  1. oracle aq 队列,ORACLE_AQ 队列
  2. java epson_如何用Java调用Epson TM-U220PD来打印USB端口
  3. 火焰之纹章多拉基亚776攻略
  4. 关于浪潮服务器NF5280M5的介绍
  5. 外汇自动交易系统,利用大数据判断行情准确率在95%
  6. Jmeter压力测试和性能调优
  7. 6个C++游戏代码,Dev-C++都可以运行,可复制。
  8. 2022-2028全球含磷环氧树脂行业调研及趋势分析报告
  9. 关于 SAP UI5 Container 控件 aggregation 的深入分析试读版
  10. arma3服务器无限重启,武装突袭3重启服务器代码是多少 | 手游网游页游攻略大全...