本文开始将为各位开始介绍分布式系统相关的知识。关注个人公众号「Java面典」,天天 10:24 和你一块儿了解更多 Java 相关知识点。数据库
事务(TRANSACTION)是做为单个逻辑工做单元执行的一系列操做,这些操做做为一个总体一块儿向系统提交,要么都执行、要么都不执行 。事务是一个不可分割的工做逻辑单元事务必须具有如下四个属性,简称 ACID 属性:服务器
事务是一个完整的操做。事务的各步操做是不可分的(原子的)—— 要么都执行,要么都不执
行。网络
当事务完成时,数据必须处于一致状态。并发
对数据进行修改的全部并发事务是彼此隔离的,这代表事务必须是独立的,它不该以任何方式依赖于或影响其余事务。分布式
事务完成后,它对数据库的修改被永久保持,事务日志可以保持事务的永久性。网站
分布式事务:指会涉及到操做多个数据库的事务。搜索引擎
关键在于保证在全部节点的数据写操做,要不所有都执行,要么所有的都不执行。可是一台机器在执行本地事务的时候没法知道其余机器中的本地事务的执行结果。因此也就不知道本次事务到底应该 commit 仍是 roolback。atom
常规的解决办法就是引入一个“协调者”的组件来统一调度全部分布式节点的执行。
日志
一个分布式系统最多只能同时知足 Consistency(一致性)、Availability(可用性)和 Partition tolerance(分区容错性)这三项中的两项。code
CA(放弃P):将全部的数据放在一个节点。知足一致性、可用性;
AP(放弃C):放弃强一致性,用最终一致性来保证;
CP(放弃A):一旦系统碰见故障,受到影响的服务器须要等待一段时间,在恢复期间没法对外提供服务。
从客户端角度,多进程并发访问时,更新过的数据在不一样进程如何获取的不一样策略,决定了不一样的一致性:
CAP中说,不可能同时知足的这个一致性指的是强一致性。
服务一直可用,并且是正常响应时间。
大型互联网为了服务可用,舍弃强一致性,保证最终一致性。
分布式系统在遇到某节点或网络故障的时候,仍然可以对外提供知足一致性和可用性的服务。就是在网络中断的状况下,系统若是还能正常工做。
BASE理论由三个点构成:Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)。
Base 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 定理逐步演化而来的。其核心思想是:既是没法作到强一致性(Strong consistency),但每一个应用均可以根据自身的业务特色,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
假设系统,出现了不可预知的故障,但仍是能用,相比较正常的系统而言:
硬状态: 相对于原子性而言,要求多个节点的数据副本都是一致的。
软状态:容许系统中的数据存在中间状态,并认为该状态不影响系统的总体可用性,即容许系统在多个不一样节点的数据副本存在数据延时。
系统可以保证在没有其余新的更新操做的状况下,数据最终必定可以达到一致的状态,所以全部客户端对系统的数据访问最终都可以获取到最新的值。最终一致性包含如下几种:
因果一致性(Causal consistency):若是节点 A 在更新完某个数据后通知了节点 B,那么节点 B 以后对该数据的访问和修改都是基于 A 更新后的值。于此同时,和节点 A 无因果关系的节点 C 的数据访问则没有这样的限制;
读己之所写(Read your writes):这种就很简单了,节点 A 更新一个数据后,它自身老是能访问到自身更新过的最新值,而不会看到旧值。其实也算一种因果一致性;
会话一致性(Session consistency):会话一致性将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现 “读己之所写” 的一致性,也就是说,执行更新操做以后,客户端可以在同一个会话中始终读取到该数据项的最新值;
单调读一致性(Monotonic read consistency):单调读一致性是指若是一个节点从系统中读取出一个数据项的某个值后,那么系统对于该节点后续的任何数据访问都不该该返回更旧的值;
单调写一致性(Monotonic write consistency):指一个系统要可以保证来自同一个节点的写操做被顺序的执行。