今天来聊聊分布式系统常常提及的一些基本概念

ACID

数据库事务满足的4个特性,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

原子性:一个事务最终只能有2个状态,

  • 全部成功执行
  • 全部不执行

一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。例如,当开发用于转帐的应用程序时,应避免在转帐过程中任意移动小数点。

隔离性:并发的情况下,并发的事务是相互隔离的,并发的事务不能相互干扰

在标准sql规范中,定义了四种事务隔离级别,未授权读取、授权读取、可重复读取、串行化

下图中,事务A将数据从1增加到10,事务C将数据从11增加到20,事务B在此期间读取数据,不同隔离级别,其获取的结果各不相同。

未授权读取:也叫读未提交,一个事务正在处理某个数据,但事务尚未完成,尚未提交,与此同时,另一个事务能够访问这个数据。如下图所示,事务B可以读取到1~20的任意一个值

授权读取:读以提交,只能读取已经提交的数据。所以下图,事务B中只能读取到1/10/20,但是不能读取到中间数据。注意,在同一个事务期间,其读到的值可能是不同的1/10/20。

可重复读取:保证在一个事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的。这个不会出现授权读取那种一个事务处理中获取数据的结果不同的情况。但是如果在不同的时间段,执行事务B,获取的值,可能会不同,第一次执行事务B,始终获取到1,第二次可能始终获取到20。

串行化:最严格的事务隔离。即要求所有事务都被串行执行,只能一个接一个执行,不能并行执行。

持久性:事务一旦提交,对数据的变更应该是永久的。即使发生系统崩溃或宕机,只要数据库能够重启,应该恢复到事务成功结束时的状态。

悲观锁和乐观锁

参考:http://www.cnblogs.com/wang-meng/p/5506943.html

异常

服务器宕机:一般服务器宕机,将丢失内存数据,所以需要保存一些系统必需数据到固定磁盘

网络异常:设计分布式系统和单机最大的不同就是有网络,一个基本原则就是,网络永远是不靠谱的,只有收到对方回复才能确定发送成功。

磁盘故障:磁盘损坏和磁盘数据错误,前者要求分布式系统需要对数据做分布式备份,一份数据需要在其它N多服务器上做数据备份。儿对于后者则需要采用校验和来确定。

超时

分布式系统,一个远程操作的结果有3种状态,success、failed、timeout。对于timeout不能简单的认为success或failed,需要根据具体情况做具体处理。

CAP理论

Consistency(一致性):即数据一致性,简单的说,就是数据复制到了N台机器,如果有更新,要N机器的数据是一起更新的。
Availability(可用性):好的响应性能,一个请求服务器应该在有限的时间内给出响应,可用性不好表现为响应时间严重加大、直接给出错误结果或者没有响应。
Partition tolerance(分区容错性):也叫分区容忍性。一个分布式系统,多个节点可能分布在不同的机架或不同的机房。简单地可理解为是节点的可扩展性。

定理:任何分布式系统只可同时满足二点,没法三者兼顾。

一致性

分布式系统,一致性的要求是非常复杂的。

强一致性:假如A用户写入数据,需要保证A、B、C用户在后续不同服务器的读操作均读到最新值。

弱一致性:假如A用户写入数据,不需要保证A、B、C用户在后续不同服务器的读操作均读到最新值。

最终一致性:

  1. 读写一致性:针对用户A要保证后续读要读到最新数据
  2. 会话一致性:保证本次会话后续读读到最新数据
  3. 单调读一致性:如果A读到某个值,要保证A后续读取不能读到较新的值
  4. 单调写一致性:A的写操作顺序完成,要保证不同节点副本写操作也是顺序完成

一个分布式系统,我们一般会保证其A和P,而C,我们一般保证其为最终一致性,至于是哪种最终一致性,需要根据业务特性来设计。

衡量指标

性能、可用性、一致性、扩展性。

数据分布

哈希分布,一致性哈希,由于哈希破坏了数据的有序性,不能支持顺序扫描,如Amazon的Dynamo。

顺序分布,数据分布在分布式表格系统比较常见,如google的bigtable。

复制

强同步协议:只有主和备都同时写完之后,才会给客户端返回success。一致性保证强。

异步复制:只要主写完,就返回给客户端success,其它备由主后台运行复制。可能会丢失数据。

复制协议:

  • 主副本的复制协议,主节点可读可写、备节点可读不可写。
  • 基于写多个存储节点的复制协议,比如Dynamo,N副本数量、W写副本数量、R读副本数量,NWR协议不再区分主备,只要R+W>N,可以保证读到的副本中至少一个包含最新的数据,不过由于多个W,其写入顺序会不一致,可能导致读取数据时出现冲突,不建议使用。

仔细分析,就会发现这里有个矛盾体,一致性和可用性,如果采用强同步机制,保证了一致性,但是一旦网络故障或备机宕机,写操作堵塞,可用性无法保证,如果采用异步复制,丢失数据的可能性增大,一致性保证不了,所以二者只能取其一,设计时需要折中处理。

故障

故障检测,最常用的手段是心跳包或租约机制

分布式系统------概述相关推荐

  1. 大数据学习路线图【瞧一瞧,看一看了】

    一,入门准备 1,LINUX操作基础 1)Linux的介绍,Linux的安装:VMware的工作站虚拟软件安装过程,CentOS虚拟机安装过程 2)Linux的常用命令:常用命令的介绍,常用命令的使用 ...

  2. 分布式系统与RPC概述

    分布式系统与RPC概述 目录 分布式系统与RPC概述 1.分布式系统 1.1 分布式系统概念 1.2 分布式系统的特点 1.3 分布式系统的优缺点 1.4系统的发展演变过程 2.RPC概述 2.1 什 ...

  3. 分布式系统(Distributed Systems)概述

    随着互联网的持续发展(以Web应用为代表).计算机应用的深入.分布式系统构建技术的日益成熟,分布式系统逐渐深入到人们的日常生活,并渗透到社会.经济.文化生活的各个方面.现如今,分布式系统已成为主流的软 ...

  4. 梯度下降优化算法概述

    本文原文是 An overview of gradient descent optimization algorithms,同时作者也在 arXiv 上发了一篇同样内容的 论文. 本文结合了两者来翻译 ...

  5. .Net Framework 3.0 概述

    Microsoft .NET Framework 3.0, the managed programming model for Microsoft® Windows®, includes the .N ...

  6. 分布式系统中节点之间的同步形成区块链

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 分布式系统中节点之间的同步形成区块链 分布式系统由Tanenbaum定义,"分布式系统是一组独立的计算 ...

  7. chubby分布式锁服务概述

    分布式锁与chubby 分布式锁,是控制分布式系统之间同步访问共享资源的一种方式.Chubby是一种面向松耦合的分布式系统的锁服务,通常用于为一个由适度规模的大量小型计算机构成的的松耦合的分布式系统提 ...

  8. 分布式系统的复杂度度量思考

    前言 在构建系统的时候,有时候自己会说,我的系统很复杂,但是这时候又遇到问题了,如何度量一个系统的复杂性呢,这个是个开放性的问题,本身答案见仁见智,这里记录一下自己的思考. 历史借鉴 算法的复杂度 在 ...

  9. 大型分布式系统中的缓存架构

    作者:陈彩华 来自:51cto技术栈(ID:blog51cto) 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 缓存概述 缓存概述 缓存的分类 缓存主要分为四类,如下图: ...

最新文章

  1. Swfit Array 遍历 map flatMap filter reduce
  2. 【Linux 内核】进程管理 task_struct 结构体 ① ( task_struct 结构体引入 | task_struct 代码示例 )
  3. PYPL 7月榜单公布:Java份额出现下降趋势
  4. python矢量裁剪栅格代码_Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性...
  5. [转]overflow解决float浮动后高度自适应问题
  6. Linux中jsoncpp的编译使用
  7. 小米商城项目实战(一)
  8. Playing Atari with Deep Reinforcement Learning 学习笔记
  9. Windows 11系统设置文件夹默认显示方式为“大图标”的方法
  10. Windows Server下独立根CA的安装及使用(超详细)
  11. 华为鸿蒙亮利剑,华为亮利剑,超级主镜头+鸿蒙OS,所有期许或将如愿以偿
  12. S3C2440的中断体系结构
  13. 产品全类目下找不到关键词,只有到特定类目才能找到,修改PRODUCT TYPE
  14. 迷宫游戏(wap页游还原)-JavaScript实现
  15. 代码扫描 | 把控代码质量的利器
  16. 视觉SLAM学习笔记
  17. es6 语法,在 IE 中不兼容的处理办法
  18. Linux下运行robot,Robot Framework-Unix和Linux安装
  19. 数据库关系代数的聚集函数
  20. Android引入QMUI框架

热门文章

  1. 【历史上的今天】2 月 16 日:世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛
  2. AVX指令去除-0符号位
  3. 「镁客早报」英特尔与紫光展锐分道扬镳;小米组织架构大调整
  4. 2022年全球市场化学机械抛光(CMP)金刚石衬垫调节器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  5. 大一初学c语言——程序设计基础
  6. LUVLi Face Alignment: Estimating Landmarks’ Location, Uncertainty, and Visibility Likelihood
  7. 今天15:00| ICML专场四,7位PhD来袭!
  8. Web渗透测试学习笔记
  9. 苹果手机计算机隐藏应用,超实用!15个苹果手机的隐藏功能,不看你手机就白买了!...
  10. png图片压缩工具pngquant