Zookeeper学习之路——分布式架构

分布式架构简历

分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。与分布式相对的架构师集中式架构系统,集中式架构系统就是指一台或者多台计算机组成中心节点,数据处理集中在这个中心节点上,所有的业务功能的处理都集中在在该中心节点上。例如电信类的系统,一个庞大的电信系统中会有很多的组件,如文件存储系统,搜索系统,CRM,CBS等各种组件系统,这些系统对于整个电信系统是以组件的形式存在的,以往的集中式架构会把这些的系统部署在一台服务器节点上,而现在会把这些系统组件分别部署在不同的服务器节点上,之间通过RPC来进行通信。

分布式的特点

  • 分布性
    既然是分布式系统,服务器就有可能在不同的地域,各个系统组件也就分散在网络上的不同节点。
  • 对等性
    在分布式系统中各个计算机之间没有主从之分,都是能够提供独立服务的节点,对于整个系统而言。
  • 并发性
    并发性说的是各个节点一个对外提供服务,有时候会出现多个节点访问同一个资源,这也就是对共享资源存在并发性的问题。
  • 缺乏全局时钟
    由于各个组件之间是通过通信来完成任务的协作,所以在整个分布式系统中是没有谁先谁后,原因就是因为分布式系统缺乏一个全局的时钟序列控制。
  • 故障总是会发生

    分布式环境的问题

  • 通信异常

  • 网络分区
  • 三态(成功,失败和超时)
  • 节点故障

ACID

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

原子性

整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性

一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。

隔离性

隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。

在标准的SQL规范中,规定了四种事务的隔离级别

  • 未授权读:未授权读也叫作读未提交,意思就是说在事务未完成前,另一个事务可以看到该事务进行的中间状态。例如现在有A和B两个事务,A事务进行的是对a进行不停的加1操作,而B这个时候,可以看到a的值从1,2,3的变化,这就是读未提交。
  • 授权读:授权读,也就做读已提交,这个隔离级别的意思就是不管事务B是什么时候进行访问a的值,B只能看到a的最终为10的状态。
  • 可重复读:可重复读意思是事务B只能访问到当时访问到的值,假如当事务B开始访问a的时候,a的值为4,所以在接下来的访问中a的值永远都是4,不会有改变。哪怕是事务A依然在做着加1的操作。
  • 串行化:就是事务要一个接一个的处理,不能够出现多个事务同时访问一个资源的情况。

隔离级别的对比

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

持久性

在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

猜你喜欢

转载自blog.csdn.net/u010871004/article/details/80386074