Consistency一致性
Availability可用性
PartitionTolerance分区容错性(分布式系统必须实现P)
一致性:数据有唯一的出处。
可用性:节点之间尽量要联通。
分区容错性:在一定的时间内允许错误。
分区容错性:在一定的时间内允许错误。如京东的产品用了缓存,如果店家修改了价格,在1min内读到的是缓存中的旧数据,它跟数据库中的数据不一致,1min过后数据必须一致。分区容错性在分布式环境必须实现。
CA,在MySQL体现得很好,数据库是强一致性的产品。设计数据库表时有三范式3NF:
1表必须有主键
2表不能有重复的列
3列不能是加工而成(做数学运算如求和或求平均生成的列)
AP,在Eurka上体现得很好。Eurka是peer to peer点对点的设计,每个点的信息都可以让用户接入。每个点如果信息变化,内部会自动同步所有的数据,所有缺一个点也没有关系。Eurka即使所有的节点都宕机仍能提供服务。Eurka分为服务端和客户端,客户端缓存了所有数据的路由信息,也能找到服务的提供者。
CP,在zookeeper上体现得很好。zookeeper为了保持一致性,采用主从设计,如果zookeeper的节点有一半的节点宕机或有节点正在选举,节点不可用。zookeeper要求从节点从主节点接入,缺主节点不可以。zookeeper要求可用性真正可用。并未真强调可用性。
Zookeeper是基于CP设计,侧重一致性。
Eurka是基于AP设计,侧重可用性。
注册中心靠心跳机制,动态地维护url-生产者和消费者。而注册中心的信息不回频繁地发生变化。
服务提供者 url。
服务消费者 url。
现在主流数据库表的设计方式是反三范式的(冗余设计),优点是性能高。缺点是数据存多处,同步数据有时间差,有脏数据问题-短暂时间内数据不一致。