分布式的定义
- 分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
分布式的特点
- 分布性:空间上随意分布
- 对等性:分布式系统中计算机没有主/从之分,每个计算机节点都是对等的。
- 并发性:并发操作共享的资源
- 缺乏全局时钟:执行事件难以确定先后顺序。缺乏一个全局的时钟序列。
- 故障总会发生:预设和未预设的故障问题都会发生
分布式环境的问题
- 通信异常:网络问题、硬件问题,内存访问通常在纳秒级别(大约10ns),网络访问延迟在毫秒级别,网络延迟是内存访问的上百倍。
- 网络分区:网络异常导致只有部分节点能正常通信,极端情况会出现局部集群需要独立完成所有任务,包括对数据的事务处理,这就对分布式一致性产生了挑战。
- 三态:成功、失败、超时,超时通常是由请求未送达(如发送中丢失)、响应未送达
- 节点故障:组成分布式系统环境的节点出现宕机。每个节点都可能故障。
ACID与CAP/BASE
ACID
- 事务是由一系列队系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元
事务为数据库操作保证数据一致性提供支持
- 事务的四个特点:原子性、一致性、隔离性、持久性
- 原子性(Atomicity):事务必须是一个原子操作,要么不做,要么全做。失败就撤销已做的
- 一致性(Consistency):事务的操作保证操作的数据从一个一致性状态到另外一个一致性状态。
- 隔离性(Isolation):是指在并发环境中的事务相互隔离,互相不干扰,一般通过悲观或者乐观锁实现。
- 持久性(Durability):数据永久改变。
- 事务隔离级别(标准SQL规范)
- 读未提交(Read Uncommitted):隔离级别最低;一个事务可以读取到另一个事务还未提交的数据。会产生脏读、不可重复读、幻读
- 读已提交(Read Committed):只允许读以提交的数据,防止脏读,会产生不可重复读、幻读
- 可重复读(Repeatable Read):事务不结束,别的事务不可以修改记录,解决了脏读、不可重复读,会产生幻读。
- 串行化(Serialiizable):事务串行执行,一个接一个处理,不能并发执行。
分布式事务
- 一个分布式事务可以看做多个分布式的操作序列组成的。简单案例来说就是两个不同服务系统中一方减少一方要增加,发生故障只完成一方,就需要回滚。由于系统是分布式的,所以在执行事务的时候就比较复杂。
CAP理论
- CAP是指:一致性、可用性、分区容错性,这三个需求最多只能同时满足其中两项。
- 一致性(Consistency): 保证多个节点系统中,某个节点更改数据过后,对任意节点获取的数据是最新的。
- 可用性(Availability):处理数据请求能在有限的时间内返回结果。
- 分区容错性(Partition tolerance):保证分布式系统在遇到故障时,能对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。
- 放弃其中的一个:
- 放弃P:如果想要避免分区容错性,简单的做法是将(事务相关的)数据放在某个节点上,放弃P意味着放弃系统的可拓展性。
- 放弃A:一旦系统遇到故障,那么被影响的服务将变得不可用。
- 放弃C:放弃数据的强一致性,无法保证实时的一致,但是可以保证最终是一致的。
BASE理论
- BASE理论是指:基本可用、软状态、最终一致性;它是基于CAP理论演变而来的,其中的关键点就是最终一致性。
- 基本可用(Basically Available):允许损失部分可用性。可以在时间上或者功能上少部分损失。
- 软状态(Soft state):允许各个节点数据同步过程存在延迟。
- 最终一致性(Eventually consistent):所有数据副本经过更新后一段时间会变成一致的。