数据库中事务的ACID
A:Atomicity,原子性,全部成功或全部不成功
C:Consistency,一致性,事务的执行不能破坏数据库中数据的完整性和一致性
I:Isolation,隔离性,并发环境中,并发的事务相关隔离
D: Durability,持久性,提交之后,db中数据是持久化的
分布式事务-CAP
C: Consistency,一致性,数据在多个副本间能否保持一致
A:Availability,可用性,系统一致处于可用状态
P: Partition tolerance,分区容错性,这里的分区指网络分区。也就是遇到任何网络分区故障的时候,对外仍然可以提供满足一致性和可用性的服务
无法同时满足CAP三个特性
BASE理论
B: Basically Available 基本可用
S: Soft state,柔性事务
E: Eventually Consistent,最终一致
Paxos算法
分布式系统容错一致性算法
ZK
zk基于zab协议,是基于paxos的一个简化变种算法。有以下特性:
ZK特性
顺序一致性:
同一个客户端发起的请求,最终会严格按照其发起顺序应用到zookeeper中去。
原子性
所有事务请求的处理结果,在整个集群的机器上生效的情况是一致的。
单一视图
无论client连接的是哪个zk服务器,看到的数据都是一致的。
可靠性
一旦服务端成功的应用了某个事务,并完成了对客户端的响应,那么该事务所引起的服务端状态变更会被一直保留下来,除非有另一个事务对其又进行了变更。
实时性
zk保证在一定时间段内,client最终一定可以从服务端取到最新的数据状态。
ZK基本概念
zk底层是树形结构,由一系列ZNode节点组成。zk将全量数据存储在内存中,提高服务器吞吐、减少延迟。
zk中的角色:
Leader:集群中的所有机器通过选举过程选出一台leader机器
Follower:提供读服务,参与选举
Observer:提供读服务,不参与选举,也不参与写操作的“过半写成功”策略,因此observer在不影响写性能的情况下能提高集群的读性能。
Znode:树上的每个节点保存自己的数据内容,以及一系列属性信息。
znode分为临时节点和持久节点,持久节点如果不删除,会一直存在,临时节点绑定客户端session周期,session会话失效节点就会被自动删除。
临时节点不能作为父节点,只能是叶子节点
版本:zk中有三个版本,version—当前znode的版本,cversion--当前znode子节点的版本,aversion—当前znode的acl版本(Access Controll Lists)
Watcher:回调机制的实现
ACL:权限控制,有以下5种权限:
CREATE: 创建子节点权限
READ:获取节点和子节点列表权限
WRITE:更新节点数据权限
DELETE:删除子节点权限
ADMIN:设置节点的ACL的权限