1.3.4 并发处理能力
可能读者已经想到了,分布式系统引发的一个问题就是并发导致的一致性该如何处理?我们举个例子这个问题就比较清楚了。在分布式系统中,我们假设有两个节点A和B同时操作一条数据仓库的记录,那么数据仓库中的最终结果是由节点A操作产生的,还是由节点B操作产生的呢?这样看来,并发请求处理对对象的操作可能相互冲突,产生不一致的结果。我们设计的分布式系统必须确保对象的操作在并发环境中能够安全使用。因此,对象的并发或同步操作必须确保数据的一致性。
除了一致性之外,我们还希望可以一直对系统进行读写,这就是所谓的可用性。而为了一致性,读取或写入操作可能需要等待,常常需要缓冲等处理方式,这又是一件非常讨厌的事情,因为它牺牲了可用性。
数据库系统还有另一个性质——分区容错性,许多人都阐述过,这是数据库系统必须保证的特性,而在此情况下,从传统上来讲,一致性和可用性我们只能二选其一。分布式存储具有以下特性(CAP)。
1)Consistency(一致性):同一个数据在集群中的所有节点,同一时刻是否都是同样的值。
2)Availability(可用性):集群中一部分节点故障后,集群整体是否还能处理客户端的更新请求。
3)Partition Tolerance(分区容错性):是否允许数据的分区,分区是指是否允许集群中的节点之间无法通信。
提示 在理论计算机科学中,CAP定理(CAP Theorem)又被称作布鲁尔定理(Brewer' s Theorem),它指出对于一个分布式计算系统来说,不可能同时满足CAP3个条件。
而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时满足这三点。有关CAP理论的更多具体解释,读者可以参阅:https://en.wikipedia.org/wiki/CAP_theorem。
在一个分布式系统中,CAP定理会使得整个系统变得非常复杂,而且会严重影响整个系统的并发性能。如何在尽量满足CAP定理的前提下提升系统的并发计算与存储能力,值得我们思考。