Google cloud firestore 理解分布式系统中的一致性

Google cloud firestore 理解分布式系统中的一致性,google-cloud-firestore,distributed-computing,consistency,eventual-consistency,cap-theorem,Google Cloud Firestore,Distributed Computing,Consistency,Eventual Consistency,Cap Theorem,如何在分布式系统上实现高频率、一致的读/写?通常不确定如何在大规模系统上概念化一致性 用例:防止用户在指定的时间段内执行相同的操作。在虐待案件中,这可能是一种高频操作 扩展问题:我将如何扩大此操作?像Firestore这样的系统如何在提供一致性的同时提供高可用性?Firestore配额(例如每秒写入一个文档)告诉我们他们是如何构建系统的 感谢GCP的Firestore作为云扳手,以确保规模上的一致性。要了解有关Cloud扳手及其CAP含义的更多信息,请查看: 就CAP而言,尽管在大范围内运行,但

如何在分布式系统上实现高频率、一致的读/写?通常不确定如何在大规模系统上概念化一致性

用例:防止用户在指定的时间段内执行相同的操作。在虐待案件中,这可能是一种高频操作

扩展问题:我将如何扩大此操作?像Firestore这样的系统如何在提供一致性的同时提供高可用性?Firestore配额(例如每秒写入一个文档)告诉我们他们是如何构建系统的

感谢GCP的Firestore作为云扳手,以确保规模上的一致性。要了解有关Cloud扳手及其CAP含义的更多信息,请查看:

就CAP而言,尽管在大范围内运行,但扳手声称其一致性和高可用性[…]。这是否意味着扳手是CAP定义的CA系统?[…]最纯粹的答案是“不”,因为分区可以发生,事实上在谷歌也发生过,在一些分区期间,扳手选择C并放弃A。从技术上讲,它是一个CP系统。然而,没有一个系统能提供100%的可用性,所以实际的问题是,扳手是否能提供如此高的可用性,以至于大多数用户不必担心它的中断

因此,虽然从技术上讲是一个CP系统,但Cloud Paner(因此也是Firestore)实际上是一个CAP,因为它的“5个或更多的9”可用性保证足够高,大多数用户可以忽略停机

像Firestore这样的系统如何在提供一致性的同时提供高可用性

首先,谷歌为此类服务运营自己的私有全球网络,这意味着它们能够提供比依赖公共网络更强有力的保障

其次,这些系统利用同步时钟来确保一致性。谷歌的例子可以归结为TrueTime,这是一种全球同步的、基于GPS和原子钟的时钟,它提供了强大的时间语义(有界不确定性为7毫秒),即使是发生在地球对面的交易。时钟使得用本地计算代替通信成为可能:节点N不需要询问另一个节点M是否存在某些属性,它可以根据过去关于M的一些信息以及N时钟上的当前时间()推断出答案

Cloud Panner依赖TrueTime生成单调递增的时间戳。云扳手以两种方式使用这些时间戳。首先,它使用它们作为写事务的适当时间戳,而不需要全局通信。其次,它使用它们作为强读的时间戳,这使得强读能够在一轮通信中执行,甚至是跨多个服务器的强读

有关时钟如何帮助分布式系统设计的进一步理论,请参阅。有关Cloud Paner的更多信息,我强烈推荐这些摘要以及

更新:好消息是,您不需要原子钟、GPS和专用全球网络来确保一致性和高可用性。开源的受扳手启发的CockroachDB实现了与其前身大致相同的功能,尽管它必须依赖于更粗粒度和效率更低的同步,以取代TrueTime强大的时间确定性,如下所述:

扳手和蟑螂数据库之间的一个简单对比说明是:扳手总是在短时间间隔内等待写入,而蟑螂数据库有时在较长时间间隔内等待读取


为什么要“阻止用户在指定的时间段内执行相同的操作”?你害怕成本还是性能?害怕滥用:假设我分发的库存预计会很快用完。滥用职权的用户可能会抢夺他们不允许在时间期限之外拥有的库存,这会降低剩余用户的服务质量(以及我的业务价值)。感谢连接Firestore和扳手上的点。您将如何解决OP评论中写的“害怕滥用”案例?因此,在用户执行购买后,我们希望在特定时间段内防止同一用户再次购买?如果是这样的话,我会在购买交易中设置一个特定于用户的到期期限:这意味着如果用户已经成功进行了购买,那么还有一个到期期限阻止他们进行任何后续购买。要了解更多信息,请查看这个关于的问题。从您的回答中,我不理解的是解决分布式系统的一致性问题。我可以用一致的计数来标记库存,但当分布和一致性丢失时又如何呢?除了扳手,还有什么其他选择?我很难理解确切的问题。也许可以试着一步一步地解释一下这个场景?比如说我有一个计数器(比如库存),它可能会迅速减少(比如闪购或广告服务器)。除扳手外,有哪些选项可以处理此问题?