1.事务ACID特性
A(Atomicity)原子性
C(consistency)一致性
I(Isolation) 隔离性
D(Durability) 持久性
接下来以mysql为例进行4个分析
这四个特性属于事务得特性:
其中A原子性通过undo log日志保证
I隔离性通过MVCC机制+锁机制
C一致性 通过redo log日志保证
D持久性;通过AIC三个特性,同时会保存到binlog日志种
2.CAP
分布式系统得cap理论,其中C(consistency)代表一致性,A(avaiblity)代表可用性(和ACID得a不是一个,一个是原子性);P代表分区容错性。三者只能三选二,P分区容错性一定要保证。
P分区容错性:
其实就是网络问题,通常分布式系统都会有网络得调用,包括通常得RPC调用和HTTP调用,如果网络通信挂了,消息也就处理不了了,所以要保证分区容错性,就是其中一个网络通信有问题不影响最终数据处理。
分区容错性得解决方案:过半机制+重试机制。
A和C只能二选一,保证一致性就无法保证可用性
是因为通常系统部署得时候会部署多个节点,或者是主从节点或者领导者跟随者观察者等,这个时候如果想保证数据一致性就要进行多个节点得数据赋值,无论用什么IO,此时用户查询都不会查到数据,所以就不可用。而为了保证可用性,就必须进行将数据处理完成,此时方案势必要丢弃一致性。
3.BASE理论
基本可用(Basically Available)
软状态(Soft State)
最终一致性(Eventually consistence)
分布式系统:这个是在AP理论基础上。放弃系统某一时刻一致性要求,换取系统伸缩性和性能改善。
4.PACELC
这个理论看名字一头雾水,其实PAC代表着cap;E代表着ELSE,L代表着延时性,C代表一致性。
通过名字就可用分析出来,如果存在P分区容错性,在A和C进行选择;如果不存在P,在L和C进行选择。
案例:ES
es写数据流程图:
e's读数据过程:
可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard 去查询.
客户端发送请求到任意一个 node,成为 coordinate node。
coordinate node 对 doc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin 随机轮询算法,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡。
接收请求的 node 返回 document 给 coordinate node。
coordinate node 返回 document 给客户端。
疑问:选择得node节点查询会不会没有数据得情况?