第一章主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID、CAP和BASE等经典分布式理论,主要包含以下内容:

  1. 集中式的特点
  2. 分布式的特点
  3. 分布式环境的各种问题
  4. ACID
  5. 分布式事务
  6. CAP和BASE理论

集中式的特点:部署结构简单(因为基于底层性能卓越的大型主机,不需考虑对服务多个节点的部署,也就不用考虑多个节点之间分布式协调问题)

分布式的特点:

  • 分布性
  • 对等性
  • 并发性
  • 缺乏全局时钟
  • 故障总是会发生

分布式环境的各种问题:

  • 通信异常:主要是因为网络本身的不可靠性
  • 网络分区:当网络发生异常时,导致部分节点之间的网络延时不断增大,最终导致部分节点可以通信,而另一部分节点不能。
  • 三态(成功、失败与超时)
  • 节点故障:组成分布式系统的服务器节点出现宕机或“僵死”现象

事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元,狭义上的事务特指数据库事务。

事务有四个特性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称为事务的ACID特性。

  • 原子性(Atomicity):必须是一个原子的操作序列单元,只允许出现两种状态之一(全部成功执行,全部不执行)。
  • 一致性(Consistency):不能破坏数据库数据的完整性和一致性,一个事务在执行前后,数据库必须处于一致性状态。
  • 隔离性(Isolation):相互隔离的,一个事务的执行不能被其他事务干扰。
  • 持久性(Durability):也称为永久性,一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。可以通过数据库备份和恢复来保证持久性。

事务四种隔离级别有未授权读取、授权读取、可重复读取和串行化。

  • 未授权读取(READ UNCOMMITTED):也称为读未提交,允许脏读取。
  • 授权读取(READ COMMITTED):也称为读已提交,允许不可重复读取。
  • 可重复读取(REPEATABLE READ):禁止了不可重复读取和脏读取,但是有可能出现幻影数据(指同样的事务操作,在前后两个两个时间段内执行对同一个数据项的读取,可能出现不一致的结果)。
  • 串行化(SERIALIXABLE):要求所有事务串行执行。

四种隔离级别的对比

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

事务隔离级别越高,就越能保证数据的完整性和一致性,但对并发性能的影响也越大。优先考虑将数据库的隔离级别设置为授权读取,能够避免脏读同时保证较好并发性能,会导致不可重复读、虚读和第二类丢失更新等并发问题,在可能出现这类问题的场合中,应主动采用悲观锁和乐观锁进行事务控制。

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。也可以被定义为一种嵌套型的事务,同时也具有了ACID事务特性。

CAP理论:一个分布式系统不可能同时满足一致性、可用性和分区容错性。

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

从CAP定理看出,一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个需求。对于一个分布式系统,分区容错性是一个最基本的需求。

BASE理论:是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用:分布式系统在出现不可预知故障的时候,允许损失部分可用性。
  • 弱状态:也称软状态,允许系统在不同节点的数据副本之间进行数据同步存在延时。
  • 最终一致性:系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。

最终一致性存在以下五类变种:

  1. 因果一致性
  2. 读己之所写
  3. 会话一致性
  4. 单调读一致性
  5. 单调写一致性

总得来说BASE理论面向的是大型高可用可扩展的分布式系统,完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获取可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。实际分布式场景中,ACID特性和BASE理论会结合在一起。

《从Paxos到Zookeeper:分布式一致性原理与实践》第一章读书笔记的更多相关文章

  1. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  2. 技术沙龙|京东云DevOps自动化运维技术实践

    自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...

  3. 沙龙报名 | 京东云DevOps——自动化运维技术实践

    随着互联网技术的发展,越来越多企业开始认识DevOps重要性,在企业内部推进实施DevOps,期望获得更好的软件质量,缩短软件开发生命周期,提高服务稳定性.但在DevOps 的实施与落地的过程中,或多 ...

  4. 一文详解 Ansible 自动化运维

    开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...

  5. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  6. ansible 自动化运维

    Ansible 自动化运维 ansible安装epel #yum list all *ansible*#yum install *ansible*#yum info ansible#rpm -ql a ...

  7. Ansible 自动化运维工具

    Ansible 自动化运维工具 Ansible是什么? Ansible是一个"配置管理工具"也是一个"自动化运维工具" Ansible 作用: Ansible是 ...

  8. ansible自动化运维03

    ansible自动化运维常用模块 常用模块实现的功能:安装软件包:修改配置文件:创建程序用户组:创建目录,并修改所属和权限:挂载:启动服务:测试. command模块: shell模块: 注意:com ...

  9. 简单聊一聊Ansible自动化运维

    一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...

  10. Ansible自动化运维工具的使用

                                 Ansible自动化运维工具的使用       host lnventory 管理主机 ip  root账号密码 ssh端口 core mod ...

随机推荐

  1. 通过锁字符串达到控制并发的效果C#

    lock锁的是地址 而.net有内部机制使得相同的字符串内存地址是相同的(new string)除外 下面上实验代码 using System; using System.Collections.Ge ...

  2. Flask flask_script扩展库

    flask_script 1.安装:进入到虚拟环境中,pip install flask_script 2.flask_script 作用:可以通过命令行的形式来操作Flask,例如通过命令跑一个开发 ...

  3. matlab 下标类型

    double int uint time: double = int < uint8 较为神奇. clear clc time=clock; a=zeros(,); : a(i)=; end f ...

  4. Unicode 与 Unicode Transformation Format(UTF-8 / UTF-16 / UTF-32)

    ASCII(American Standard Code for Information Interchange):早期它使用7 bits来表示一个字符,总共表示27 = 128个字符:后来扩展到8 ...

  5. 踩过的坑—iphone手机H5样式兼容总结

    对一个前端开发者来说,最煎熬的莫过于"兼容"两个字了(说到这个词朋友们是不是身体一抖),哪怕对于工作多年的老油条来讲,也不是完全了解各种场景下的兼容性处理方法.在这里我就把我在工作 ...

  6. nginx搭建分布式简单配置

    1.下载安装nginx 2.编辑nginx.conf文件 upstream 172.100.10.52 { ip_hash; #保证每一个用户访问同一个网站 server 172.100.10.21: ...

  7. 苹果中国全系降价:iphone最高降500元,用户可退差价

    本文首发于:风云社区SCOEE(社区旨在普惠软件.图片.音乐.视频.素材.文档等互联网资源.为大众提供多样化的服务,以及主要涵盖学术科学.电脑技术.文化人文.体育健身等领域的知识和信息,获得用户的支持 ...

  8. java FindMyIP.java

    s ganymed-ssh2-build210.jar package com.iteye.lindows.ssh.ip; import java.io.BufferedReader; import ...

  9. 11、JDBC-Druid

    依赖 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  10. 解决Navicat 出错:1130-host . is not allowed to connect to this MySql server,MySQL

    1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 " ...