dbaplus社群 03月24日
Google如何利用SQL数据库支持47.7亿用户
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入解析了 Google Spanner 数据库的架构,探讨了其如何应对高可用性挑战。文章首先回顾了 Google 早期使用 MySQL 存储广告数据的局限性,以及在扩展性和事务处理方面遇到的难题。随后,文章详细介绍了 Spanner 如何通过分布式 SQL 数据库的设计,结合原子性、一致性、隔离性和持久性(ACID)特性,来实现 99.999% 的可用性。重点阐述了 Spanner 在 TrueTime 时间同步、两阶段提交协议、两阶段锁和快照隔离等关键技术上的应用。最后,文章强调了 Spanner 对 Google 广告业务的重要性。

🚀 早期 Google 使用 MySQL 存储广告数据,但随着用户增长,MySQL 的扩展性成为瓶颈,重新分区耗时严重,且事务处理难以满足 ACID 合规性。

💡 Spanner 是 Google 开发的分布式 SQL 数据库,旨在解决 NoSQL 扩展能力与 MySQL 的 ACID 特性之间的矛盾,实现了原子性、一致性、隔离性和持久性。

⏱️ Spanner 使用 TrueTime 同步全球服务器时间,结合 GPS 时钟与原子钟,每 30 秒校准一次服务器时间,确保时间戳全局一致,从而实现强一致性。

🔒 Spanner 采用两阶段锁(2PL)管理写操作,实现写操作隔离,并使用快照隔离(基于多版本并发控制 MVCC)实现无锁读取,避免锁竞争。

💾 Spanner 通过 Paxos 协议将数据同步写入多数副本,再异步复制至其他副本,保证了数据的持久性,同时将计算层与存储层分离,使用 Google Colossus 分布式文件系统,保障高性能与持久性。

原创 Neo Kim 2025-03-24 07:15 广东

如何实现 99.999% 的可用性?

注:本文解析 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 亿美元,成为全球最具价值企业之一。



>>>>

参考资料



作者丨Neo Kim     编译丨Rio
来源丨网址:https://newsletter.systemdesign.one/p/cloud-spanner-database?hide_intro_popup=true
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn



阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Google Spanner 分布式数据库 高可用性 ACID
相关文章