摘要:注:本文解析 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社群