gpt4 book ai didi

google-cloud-firestore - 了解分布式系统中的一致性

转载 作者:行者123 更新时间:2023-12-03 01:40:04 28 4
gpt4 key购买 nike

如何在分布式系统上获得高频、一致的读/写?通常不确定如何概念化大型系统上的一致性。

用例:阻止用户在指定时间段内执行相同的操作。在滥用情况下,这可能是高频操作。

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

谢谢

最佳答案

GCP 的 Firestore uses the same technology作为 Cloud Spanner 以确保大规模的一致性。要了解有关 Cloud Spanner 及其 CAP 影响的更多信息,请查看 the introduction here :

In terms of CAP, Spanner claims to be both consistent and highly available despite operating over a wide area [...]. Does this mean that Spanner is a CA system as defined by CAP? [...] The purist answer is “no” because partitions can happen and in fact have happened at Google, and during some partitions, Spanner chooses C and forfeits A. It is technically a CP system. However, no system provides 100% availability, so the pragmatic question is whether or not Spanner delivers availability that is so high that most users don't worry about its outages.

因此,虽然从技术上来说是 CP 系统,但 Cloud Spanner(以及 Firestore)实际上是 CAP,因为它的“5 个或更多 9”可用性保证足够高大多数用户都会忽略中断。

How do systems like Firestore provide high-availability while also providing consistency?

首先,Google 为此类服务运行自己的专用全局网络,这意味着与依赖公共(public)网络相比,他们能够提供更强有力的保证。

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

Cloud Spanner depends on TrueTime to generate monotonically increasing timestamps. Cloud Spanner uses these timestamps in two ways. First, it uses them as proper timestamps for write transactions without the need for global communication. Second, it uses them as timestamps for strong reads, which enables strong reads to execute in one round of communication, even strong reads that span multiple servers. source

有关时钟如何帮助分布式系统设计的进一步理论,请参阅 Liskov's paper here 。有关 Cloud Spanner 的更多信息,我强烈推荐 the original Spanner paper 上的这些摘要以及the follow-up paper .

更新:好消息是您不需要原子钟、GPS 和专用全局网络来确保一致性和高可用性。受开源 Spanner 启发的 CockroachDB 实现了与其前身大致相同的目标,尽管它必须依赖更粗粒度和效率较低的同步,而不是 TrueTime 强大的时间确定性,如 this fantastic comparison 中所述。 :

A simple statement of the contrast between Spanner and CockroachDB would be: Spanner always waits on writes for a short interval, whereas CockroachDB sometimes waits on reads for a longer interval.

关于google-cloud-firestore - 了解分布式系统中的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307800/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com