一致性问题是复制引起的。那么为什么要复制?就是要提高可靠性和安全性(冗余)、提高性能(并发读写)。
不一致是一定的,一致是不一定的,都是人为规定的,是一致性和性能之间权衡的过程。如果接受更大的不一致,系统效率越高,并发性越好,要求一致性越高,系统实现越复杂, 效率相对越低。
一致性有几种级别:
严格一致性,非常难实现,在分布式系统中。是一个完全理想状态。
顺序一致性。单个进程符合程序
,多个进程符合一定的序列顺序。能保证大家看到的整体顺序是一样的,大家都错或者大家都对。(也是很难实现的。)
因果一致性。和之前讲的因果顺序很相似。
以上都算是强一致性。不太实用
弱一致性:(阻塞,加锁释放锁)可以全局锁,如果想效率更高可以针对每一个变量加锁。
这种实现减少了程序猿编程透明性,使其编程难度增加,但是系统构建简单了。
以上都是高性能计算的系统设计方面,但是面对现实商务应用还是不太适用。因为高性能计算一般服务器放在局域网中,商务应用可能很多地方都有服务器,是在广域网上面。比如苏州合肥两个服务器,如果我在合肥,我的数据只有我用,其他人不关心,这时就没有必要保证很强的一致性,只有我需要到苏州用的时候再讲苏州的服务器进行“懒”更新,保证一致性。这就是由用户触发的更新,而不是系统本身保证的一个一致性。这就是从数据角度设计和从用户角度维护的一致性的区别。
简单介绍几种这类一致性:
针对不同的应用选择不同的一致性要求。