比如前面介绍到节点更新策略时,可能是异步的,那么secondary上的数据相比primary会有一定延迟,从secondary上读数据的话无法满足强一致性要求。
比如元数据,需要强一致性保证,所以一般都只会从primary读数据。而且,一般称主节点为active(master),从节点为standby(slave)。在这种情况下,是通过冗余 加上 快速的failover来保证可用性
一致性
从上面可以看到,为了高可用性,引入了冗余(副本)机制,而副本机制就带来了一致性问题。当然,如果没有冗余机制,或者不是数据(状态)的冗余,那么不会出现一致性问题,比如MapReduce。
一致性与可用性在分布式系统中的关系,已经有足够的研究,形成了CAP理论。CAP理论就是说分布式数据存储,最多只能同时满足一致性(C,Consistency)、可用性(A, Availability)、分区容错性(P,Partition Tolerance)中的两者。但一致性和可用性都是一个度的问题,是0到1,而不是只有0和1两个极端。
一致性从系统的角度和用户的角度有不同的等级
系统角度的一致性强一致性、若一致性、最终一致性
用户角度的一致性单调读一致性,单调写一致性,读后写一致性,写后读一致性
高性能
正式因为单个节点的scale up不能完成任务,因此我们才需要scale out,用大量的节点来完成任务,分布式系统的理想目标是任务与节点按一定的比例线性增长。
衡量指标高并发:
高吞吐:
低延迟:
不同的系统衡量的核心指标不一样,比如MapReduce,本身就是离线计算,无需低延迟
可行的办法单个节点的scaleup
分片(partition)
缓存:比如元数据
短事务
referencesDistributed systems for fun and profit
刘杰:《分布式系统原理介绍》