Google如何利用SQL数据库支持47.7亿用户

Neo Kim 2025-03-24 16:54:00

注:本文解析 Google Spanner 架构。如需深入探索,请参考文末引用资料。本文基于研究整理,可能与实际实现存在差异。

 

曾经,两名学生试图以百万美元出售他们的大学项目,却以失败告终。
 
 
于是他们决定继续开发,并将其命名为 Google
 
其主要收入来源是广告位(Ads),且增长势头迅猛。
 
早期,他们为简化架构选择 MySQL 存储广告数据。随着用户激增,通过分区扩展 MySQL 规模。

 

MySQL键范围分区扩展方案
 
虽然分区暂时解决了扩展性问题,但新问题接踵而至:
 
 

1. 扩展性瓶颈

 
存储需求随增长飙升,而重新分区需跨服务器迁移数据,耗时严重。
但系统对停机时间容忍度极低,这使得扩展异常困难。
 
 

2. 事务挑战

 
广告数据需满足 ACID 合规性
但分区后事务处理变得复杂——事务本质是一系列读写操作的原子组合。

 

云Spanner数据库

 

他们需要 NoSQL 的扩展能力与 MySQL 的 ACID 特性,于是创造了 Spanner——一个分布式 SQL 数据库。

 

 

1. 原子性(Atomicity)

 
原子性指事务要么全部完成,要么完全失败。例如,事务需同时更新不同分区的数据。
 
两阶段提交实现原子事务
 
但确保所有分区提交成功十分困难,因此采用 两阶段提交协议(2PC)
 
  • 准备阶段:协调者询问各分区是否可提交
  • 提交阶段:若所有分区同意,协调者通知提交
  • 任一分区拒绝则事务中止,从而保证原子性。
 
 

2. 一致性(Consistency)

 
Spanner 提供 全局强一致性。例如,欧洲的数据更新后,亚洲的读取也会立即生效。
 
跨区域部署分区
 
为实现这一点,每个分区通过 Paxos一致性算法 选举领导者。分区领导者负责写操作,副本处理读操作,且领导者可能分布在不同区域。
 
TrueTime架构
 
实现强一致性的一个简单方法是使用时间戳对写入进行排序(它允许跨服务器一致地查看数据),但让全世界所有服务器都保持相同的时间还是非常难的。
 
因此,Spanner 使用 TrueTime 同步全球服务器时间。TrueTime 结合 GPS时钟 与 原子钟,每30秒校准一次服务器时间,确保时间戳全局一致。
 
读取时通过时间戳对比保证强一致性
 
读取流程如下:
 
  • 请求路由至最近的副本
  • 副本向主节点(领导者)查询数据最新时间戳
  • 对比时间戳后响应客户端
  • 若副本数据过时,则等待主节点(领导者)同步
 
 

3. 隔离性(Isolation)

 
隔离性指并发事务互不干扰。
 
两阶段锁实现写操作隔离
 
Spanner 采用 两阶段锁(2PL) 管理写操作:
 
  • 加锁阶段:事务获取数据锁后执行读写
  • 释放阶段:事务完成后逐步释放锁
 
从而避免写入时的数据冲突。
 
快照隔离实现无锁读取
 
同时使用 快照隔离(基于多版本并发控制 MVCC),读取时返回特定时间点的数据版本,避免锁竞争。工作原理如下:
 
  • 新数据写入时附加 TrueTime 时间戳
  • 旧版本定期清理以节省存储
 
此外,旧版本也会在特定时间后自动删除以节省存储空间。
 
 

4. 持久性(Durability)

 
持久性指已完成事务的结果永不丢失。
 
基于Paxos的同步写入保证持久性
 
Spanner 通过 Paxos 协议将数据同步写入多数副本,再异步复制至其他副本。
 
数据库服务器高层架构
 
此外,Spanner 将计算层与存储层分离:
 
计算层处理读写请求,存储层使用 Google Colossus 分布式文件系统,保障高性能与持久性。
 
最终,Spanner 实现 99.999% 可用性。Google 2023 年广告收入达 2370 亿美元,成为全球最具价值企业之一。

 

 

>>>>

参考资料

 

  • 【1】Spanner:Google 全球分布式数据库白皮书

    https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf

  • 【2】F1:可扩展的分布式 SQL 数据库

    https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41344.pdf

  • 【3】Spanner:Google 的全球分布式数据库演示

    https://www.usenix.org/conference/osdi12/technical-sessions/presentation/corbett

  • 【4】Spanner、TrueTime 和 CAP 定理

    https://research.google/pubs/spanner-truetime-and-the-cap-theorem/

  • 【5】Spanner:成为 SQL 系统

    https://research.google/pubs/spanner-becoming-a-sql-system/

  • 【6】Spanner 内部原理:理解严格的可序列化性和外部一致性

    https://cloud.google.com/blog/products/databases/strict-serializability-and-external-consistency-in-spanner

  • 【7】Cloud Spanner 101:Google 的关键任务关系数据库

    https://www.youtube.com/watch?v=IfsTINNCooY

  • 【8】分布式系统:Google 的 Spanner

    https://www.youtube.com/watch?v=oeycOVX70aE

  • 【9】Spanner - Sebastian Kanthak 撰写的 Google 分布式数据库

    https://www.youtube.com/watch?v=LaLT6EC7Trc

  • 【10】分布式系统:两阶段提交

    https://www.youtube.com/watch?v=-_rdWB9hN1c

  • 【11】谷歌如何赚钱?

    https://www.oberlo.com/statistics/how-does-google-make-money

  • 【12】使用Eraser创建的框图

    https://app.eraser.io/auth/sign-up?ref=neo

 

作者丨Neo Kim     编译丨Rio
来源丨网址:https://newsletter.systemdesign.one/p/cloud-spanner-database?hide_intro_popup=true
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告