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

B站影视 内地电影 2025-03-27 15:52 1

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

注:本文解析 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 全球分布式数据库白皮书【2】F1:可扩展的分布式 SQL 数据库【3】Spanner:Google 的全球分布式数据库演示【4】Spanner、TrueTime 和 CAP 定理【5】Spanner:成为 SQL 系统【6】Spanner 内部原理:理解严格的可序列化性和外部一致性【7】Cloud Spanner 101:Google 的关键任务关系数据库https://www.youtube.com/watch?v=IfsTINNCooY【8】分布式系统:Google 的 Spannerhttps://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】谷歌如何赚钱?【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

来源:dbaplus社群

相关推荐