分布式架构简历
分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。与分布式相对的架构师集中式架构系统,集中式架构系统就是指一台或者多台计算机组成中心节点,数据处理集中在这个中心节点上,所有的业务功能的处理都集中在在该中心节点上。例如电信类的系统,一个庞大的电信系统中会有很多的组件,如文件存储系统,搜索系统,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的操作。
- 串行化:就是事务要一个接一个的处理,不能够出现多个事务同时访问一个资源的情况。
隔离级别的对比
隔离级别 | 脏读 | 可重复读 | 幻读 |
---|---|---|---|
未授权读 | 存在 | 不可以 | 存在 |
授权读 | 不存在 | 不可以 | 存在 |
可以重复读 | 不存在 | 可以 | 存在 |
串行化 | 不存在 | 可以 | 不存在 |
持久性
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。