1、CAP概念
分布式领域CAP理论:
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
2、数据库的ACID概念
关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:
Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。
Consistency一致性:在事务开始或结束时,数据库应该在一致状态。
Isolation隔离层:事务将假定只有它自己在操作数据库,彼此不知晓。
Durability:一旦事务完成,就不能返回。
跨数据库事务:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸缩模式的,JavaEE中的JTA事务可以支持2PC。因为2PC是反模式,尽量不要使用2PC,使用BASE来回避。
3、数据库的BASE概念
BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:
Basically Available:基本可用,主要的需求是可用性,既是出现划分的情况下,也应该允许更新、哪怕以牺牲一致性为代价,支持分区失败(e.g. sharding碎片划分数据库)
Soft state:软状态,状态可以有一段时间不同步,异步。
Eventually consistent:最终一致性,最终数据是一致的就可以了,而不是时时高一致。
3.1 BASE思想的主要实现有
1.按功能划分数据库
2.sharding碎片