为什么csc没有诱导公式(既然不能打破CAP定理)(1)

Pivotal GemFire 是Pivotal基于Apache Geode的商业缓存产品,Pivotal Cloud Cache (PCC)是Pivotal GemFire的特别实现。 Pivotal GemFire在很大程度上侧重于CAP术语中的“强一致性”(C)。 Pivotal Cloud Cache (PCC)则是在高度侧重于“高可用性”(HA)的Pivotal Cloud Foundry (PCF)上运行,这意味着基于PCF的PCC具有独特的优势,除了分区容错性(P)还能同时提供强一致性(C)和很高的可用性(A)。这样一来,就有可能支持那种难以实现的新型水平延展的数据密集型应用。

ACID中的一致性(C)指的是要求所有数据库事务只能通过允许的方式更改受影响的数据。写入数据库的所有数据都必须符合所有既定规则,包括约束(constraints)、级联(cascades)和触发器(triggers)。

一致性必须保证以下内容:

未来的任何事务一定会受到过去提交的其他事务的影响(即READ_COMMITTED)

不能违反数据库约束,尤其一旦事务提交后更是如此

执行事务中操作的方式正确、精确,且符合应用语义

而CAP定理中的一致性(C)则具有不同的含义。它假定, 对于分布式数据存储,不可能同时提供以下三项中两项以上的保证:

一致性(C):每次读取会收到最新的数据或者错误。这与ACID中的一致性(C)有很大区别。

可用性(A):每次请求会收到非错误回复,但不保证其中包含最新的数据。

分区容错性(P):即使任意数量的消息被节点间网络丢弃或延迟,系统仍会继续运行。

CAP定理进一步指出,分布式系统必须具有分区容错性。这是CAP中的“P”。因此,您必须在可用性(A)和一致性(C)之间做出选择,而不能同时拥有两者。要么提供100%可用性(称为“AP”),要么提供100%一致性(称为“CP”)。AP和CP这两种类型的缓存产品都有很多。

了解ACID中的一致性“C”与CAP中的一致性“C”之间的区别是非常重要的。您可以同时拥有ACID中的“C”所代表的一致性和CAP中的“AP”,但不能同时拥有CAP中的“C”所代表的的一致性和“AP”。

哪些类型的应用最适合采用AP数据存储?

侧重于CAP三角中可用性(A)一端的数据存储拥有很大的市场。诸如Facebook、Google 、Myspace、Instagram、LinkedIn、Pinterest、Snapchat和Twitter之类的应用都能受益于这样的数据存储。这是因为使用Facebook流中条目的旧值不涉及实际资产,也不会产生任何操作性后果。而且,此类数据几乎不会更新。所有数据都是插入的,因此如果您有一个值,那它一定是最新的。

哪些类型的应用需要使用CP数据库?

侧重于CAP三角中CP一端的数据存储也有着巨大的市场。有很多行业受益于侧重 CP 的数据存储, 例如银行、账务、保险、库存、物流、电子商务、制造、风险管理和贸易。这些应用具有频繁更新的特性,因此需要使用正确且最新的数据。这意味着发生网络脑裂(network partition)时,与其使用旧的数据副本,还不如在尝试访问数据时收到数据不可用的错误。

PCC在很大程度上偏向CAP三角的CP一端

在发生网络脑裂(network partition)时,PCC总会返回最新成功写入的数据或错误。这符合CAP中一致性(C)的定义。

与此同时,Pivotal Cloud Foundry可以为平台上运行的服务提供高可用性,因此可以增强像PCC之类服务的可用性(A)。

这是它的工作方式:PCC配置为可以保留数据的多个副本,因而可以降低在发生网络脑裂(network partition)过程中因为条目不可用而返回错误的可能性。它可以将这些副本分发到多个PCF可用区(availability zones),方法是将这些可用区中的服务器映射到GemFire冗余区(redundancy zones)。这样可以降低某个指定条目的所有副本均位于网络脑裂(network partition)后出现故障的一侧的风险。这样,我们既能获得PCF提供的高可用性(A)(虽然不是100%),又能获得PCC带来的强一致性(C)。

两全其美:强一致性和高可用性

PCC中强一致性与PCF中高可用性的组合真正延展了CAP定理的边界。您仍然无法同时百分百拥有C、A和P这三种保证,但PCF平台的高可用性特点与PCC的强一致性(继承自GemFire)相结合,可以打造非常出色的基于PCF的数据服务。

为什么csc没有诱导公式(既然不能打破CAP定理)(2)

本文作者Mike Stolz

作者Mike Stolz是Apache Geode项目的贡献者和PMC团队成员。他还是由Apache Geode提供支持的Pivotal GemFire的产品管理团队负责人。他的职责包括与用户不断沟通以了解他们需要的功能、功能的优先顺序,管理产品路线图,以及追踪功能开发进度。

,