原始链接 https://blog.bytebytego.com/p/how-google-spanner-powers-trillions[1] 作者 ByteByteGo[2]
免责声明:本文中的所有细节均来源于 Google 博客和研究论文,所有技术细节的原始版权均归 Google 工程团队所有。文末附有原始文章的链接。我们对这些细节进行了分析并提供了我们的解读。如果您发现任何不准确或遗漏之处,请留言,我们会尽力修正。
Google Cloud Spanner 是 Google 开发的一款革命性数据库系统,它巧妙地将传统关系型数据库的优势与 NoSQL 系统通常具备的可扩展性相结合。
专为跨多个区域处理海量工作负载而设计,Cloud Spanner 提供了一个全球分布、强一致性且高可用的数据管理平台。其独特之处在于,它既支持 SQL 查询和关系型数据结构,同时又实现了水平扩展能力,使其能够满足现代高负载应用的需求。
总体而言,Google Spanner 为需要支持全球规模操作,同时保持传统关系型系统的稳健性和可靠性的企业提供了一种极具竞争力的数据库解决方案。
在本文中,我们将深入探讨 Google Cloud Spanner 的架构,以及它如何支持构成这一出色数据库选项的各项能力。
Spanner 的架构旨在支持其作为一个全球分布、强一致性及高可用性数据库的角色。
在最高层次上,Spanner 被组织为一个被称为 “Universe” 的逻辑实体,该实体跨越多个物理或逻辑位置,这些位置被称为“区域(zones)”。
每个区域都具有一定的独立性,并包含专用的 spanservers。这些服务器负责数据存储和事务处理,基于 Google 早期分布式存储系统 Bigtable 的概念,并在此基础上进行了增强以支持复杂事务和多版本数据。
Cloud Spanner 通过将数据划分成更小的单元来进行管理,这些单元称为 tablets,并分布在多个 spanservers 上。
为了保证数据一致性,Spanner 采用了 Paxos 共识算法
来管理跨区域的复制。每个 split 都有多个副本,Paxos 算法确保这些副本保持一致性。
Spanner 实例通常跨越某一地区内的多个区域,并将副本分布在这些区域中。这样的架构提高了系统的可用性,因为即便某个区域发生故障,其他区域仍能继续处理请求。对于全球部署,还可以将数据复制到不同大陆,以便为全球用户提供低延迟访问。
所有数据均存储在 Colossus 上,该系统为分布式、复制的文件存储而设计,通过在多台物理机器间复制数据来确保高耐久性,从而在硬件故障时能够恢复数据。文件系统与计算资源分离,使得数据库可以独立扩展并高效运行。
Paxos 是 Spanner 架构中的核心组件之一。其基本原理是通过分布式共识,让一组副本(称为 Paxos 组)就一个值(例如某事务的提交或负责更新的领导者)达成一致。
Paxos 领导者的主要职责包括:
即使在分布式系统中不可避免会出现故障,Paxos 机制也能确保 Spanner 在面对这些问题时依旧保持可用性与一致性。若当前领导者因机器或区域故障而失效,Paxos 组将检测到这一情况并选举出新的领导者,从而避免系统停机。
Cloud Spanner 使用强大而稳健的事务处理方法,确保数据一致性、可靠性和高性能。下面介绍写事务和读事务的工作原理:
写事务确保了原子性(全有或全无)和一致性(所有副本数据一致),由 Paxos 领导者协调处理,即便在出现故障时也能保证数据完整性。其基本步骤如下:
对于单个 split 内的写操作,例如用户希望在表中添加一个 ID 为 7、值为 “Seven” 的行:
而对于涉及多个 split 的写操作(例如修改多个 split 中的 ID 2000、3000 和 4000),Spanner 则采用两阶段提交协议:
读事务经过优化,可在高负载下提供高性能的强一致性读取,同时无需加锁。
下面的图示展示了强一致性读取的场景:
而下图则展示了陈旧读取的场景:
为了避免死锁——即多个事务相互等待释放锁的情况——Spanner 采用了 wound-wait 算法。其基本规则如下:
Spanner 的设计确保了数据即使在故障情况下也能保持一致性和可用性。所有写操作的数据均存储于 Google 的 Colossus 分布式文件系统中,该系统通过将数据复制到多台物理机器上,即使部分机器或区域出现故障,也能从其他副本中恢复数据。TrueTime 则确保了在分布式环境中事务的全局一致排序,保证一旦某事务对一个客户端可见,则对所有客户端均可见。
TrueTime 是 Cloud Spanner 的一项关键创新,使其能够作为一个全球分布、强一致性的数据库运行。TrueTime 解决了分布式系统中最具挑战性的问题之一:如何在分布于多个区域和数据中心的节点间提供全球同步和一致的时间视图。
TrueTime 基于原子钟和 GPS 时钟的组合工作,二者协同提供高度准确和可靠的时间同步:
TrueTime 不将时间表示为单一的点,而是表示为一个时间区间,明确体现了分布式系统中固有的不确定性:
TrueTime 具有以下重要特性,使其在分布式数据库中发挥关键作用:
Google Spanner 在数据库工程领域是一项重大突破,它完美地将传统关系型数据库的可靠性和结构性与 NoSQL 系统的可扩展性和全球可用性相结合。通过创新的架构设计,依靠 Paxos 共识机制以及 TrueTime 技术,Spanner 能够高效地处理分布式事务、保证外部一致性,并在全球范围内保持高性能运行。
Google Spanner 正在重新定义分布式数据库系统的可能性,为可扩展性、可靠性和创新设定了新的标准。
[1]https://blog.bytebytego.com/p/how-google-spanner-powers-trillions
[2]ByteByteGo: https://substack.com/@bytebytego399569
[3]Spanner: Google’s Globally-Distributed Database: https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf
[4]Life of Spanner Reads and Writes: https://cloud.google.com/spanner/docs/whitepapers/life-of-reads-and-writes
[5]What is Cloud Spanner?: https://cloud.google.com/blog/topics/developers-practitioners/what-cloud-spanner