分布式存储专栏导览
本专栏收录分布式存储系统的具体实现 —— 文件系统、宽表、KV、关系型数据库、对象存储各自是怎么把前几个专栏里的理论(一致性模型、共识、分区)落成一套可运行系统的。
排序原则是按依赖关系:Google 系的 GFS → Bigtable → Spanner 是一条堆叠关系(上层建在下层之上),读的时候顺着这条链走最省力;其余系统可以按需挑。
目录
- 01 · GFS —— 单 master + chunkserver、64 MB chunk 的由来、三档一致性、数据流与控制流解耦
- 02 · Bigtable —— 三维有序 map 模型、SSTable 与三层状态、compaction 策略、对 Chubby 的依赖
- 03 · Dynamo —— 99.9 分位 SLA、虚拟节点、向量时钟、sloppy quorum 与 Merkle 树反熵
- 04 · Spanner 与 F1 —— TrueTime 与外部一致性、commit wait 的代价、客户端驱动的 2PC、读的三种时间戳边界
- 05 · Cassandra —— Dynamo 的方案 + Bigtable 的模型,加三处被推翻的设计决定:保序哈希、移 token 做均衡、ZooKeeper 存元数据;以及时间戳裁决冲突与 Accrual 故障检测
- 06 · Aurora —— 为什么 2/3 法定人数不够、日志即数据库、降 MTTR 而不是降 MTTF;五个一致性点与崩溃恢复的折叠、共享存储下副本的三条不变量
- 07 · HBase 与 LSM-Tree —— LSM-Tree 的代价模型与五种压实算法的取舍、什么时候该改回 B 树;加上 HBase 的写读路径与两种 compaction
- 08 · MegaStore —— 在 Bigtable 上补跨行事务:entity group 的划法、低延迟 Paxos 的三个步骤与 coordinator、三种副本与三种读
- 09 · Windows Azure Storage —— 三层分工、extent 只追加带来的两条保证、journaling 反而降低延迟;以及 PM / PS / 租约的强一致与两套复制引擎
- 10 · Haystack —— 全篇在做减法:一次读取的磁盘 I/O、needle 与内存账本、压实与 multi-write;以及四年后 f4 的第二次减法
- 11 · Ceph —— 用生成函数替代文件分配表:CRUSH 一次解决“该存哪”;以及一次写的两次通知、down 与 out 的分工、EBOFS → FileStore → BlueStore 的往返
- 12 · Tango —— 唯一只解决“抽象怎么给”的一篇:共享日志即对象、view 只是软状态;含一次事务的完整时间线,以及 CORFU 为 stream 让出的那条容错能力
阅读顺序
01 → 02 → 04(GFS → Bigtable → Spanner)是 Google 存储三代的主链,层层堆叠,建议连读。
其余各篇可以按兴趣挑,但有两组对照值得放在一起看:
- 03 Dynamo → 05 Cassandra:同一条"去中心 + 最终一致"的路线,Cassandra 在数据模型上换了 Bigtable 那套;
- 04 Spanner 与 06 Aurora:两种把"跨地域强一致"做出来的不同路径 —— 一个靠全局时钟(TrueTime),一个靠共享存储层 + 法定人数。
- 12 Tango 与 04 Spanner / 02 Paxos:三种"跨分片强一致"的定序来源 —— 全局物理时钟(TrueTime)/ 共识协议 / 一条共享日志;Tango 的卖点是绕开共识协议,但底层 CORFU 的 chain replication + sequencer 并没有真的省掉定序
- 10 Haystack 与 11 Ceph:同一件事("数据在哪")的两条相反路线 —— Haystack 把元数据整体压进内存去查,Ceph 把位置整个算出来、连表都不建;
- 01 GFS / 07 HBase 与 LSM-Tree / 10 Haystack:同属"追加 + 后台合并"这一族的三个不同落点 —— GFS 的落点是 chunk 与批量负载,LSM-Tree/HBase 的落点是多层 rolling merge 与代价模型,Haystack 的落点是为了读吞吐把元数据整体搬进内存、并消掉文件系统元数据那几次 I/O。
相关
- 分布式 —— 母导览:本栏各系统落地的分区、复制与一致性模型总纲;
- 一致性共识算法 —— Spanner 与 MegaStore 的 Paxos 用法、Chubby 与 ZooKeeper 的定序层;
- 集群与运维 —— 这些系统跑在其上的集群、调度与协调服务(Borg、Chubby、Dapper)。
参考
01 · S. Ghemawat, H. Gobioff, S.-T. Leung. The Google File System. SOSP 2003. 02 · F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes, R. E. Gruber. Bigtable: A Distributed Storage System for Structured Data. OSDI 2006. 03 · G. DeCandia, D. Hastorun, M. Jampani, G. Kakulapati, A. Lakshman, A. Pilchin, S. Sivasubramanian, P. Vosshall, W. Vogels. Dynamo: Amazon's Highly Available Key-value Store. SOSP 2007. 04 · J. C. Corbett, J. Dean, M. Epstein, A. Fikes, C. Frost, J. J. Furman, S. Ghemawat, A. Gubarev, C. Heiser, P. Hochschild, W. Hsieh, S. Kanthak, E. Kogan, H. Li, A. Lloyd, S. Melnik, D. Mwaura, D. Nagle, S. Quinlan, R. Rao, L. Rolig, Y. Saito, M. Szymaniak, C. Taylor, R. Wang, D. Woodford. Spanner: Google's Globally-Distributed Database. OSDI 2012(TOCS 31(3), 2013). 05 · A. Lakshman, P. Malik. Cassandra: A Decentralized Structured Storage System. LADIS 2009. 06 · A. Verbitski, A. Gupta, D. Saha, M. Brahmadesam, K. Gupta, R. Mittal, S. Krishnamurthy, S. Maurice, T. Kharatishvili, X. Bao. Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases. SIGMOD 2017. 07 · P. O'Neil, E. Cheng, D. Gawlick, E. O'Neil. The Log-Structured Merge-Tree (LSM-Tree). Acta Informatica, 1996. 08 · J. Baker, C. Bond, J. C. Corbett, J. J. Furman, A. Khorlin, J. Larson, J.-M. Leon, Y. Li, A. Lloyd, V. Yushprakh. Megastore: Providing Scalable, Highly Available Storage for Interactive Services. CIDR 2011. 09 · B. Calder, J. Wang, A. Ogus, N. Nilakantan, A. Skjolsvold, S. McKelvie, Y. Xu, S. Srivastava, J. Wu, H. Simitci, J. Haridas, C. Uddaraju, H. Khatri, A. Edwards, V. Bedekar, S. Mainali, R. Abbasi, A. Agarwal, M. F. ul Haq, M. I. ul Haq, D. Bhardwaj, S. Dayanand, A. Adusumilli, M. McNett, S. Sankaran, K. Manivannan, L. Rigas. Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency. SOSP 2011. 10 · D. Beaver, S. Kumar, H. C. Li, J. Sobel, P. Vajgel. Finding a Needle in Haystack: Facebook's Photo Storage. OSDI 2010. 11 · S. A. Weil, S. A. Brandt, E. L. Miller, D. D. E. Long, C. Maltzahn. Ceph: A Scalable, High-Performance Distributed File System. OSDI 2006. 12 · M. Balakrishnan, D. Malkhi, T. Wobber, M. Wu, V. Prabhakaran, M. Wei, J. D. Davis, S. Rao, T. Zou, A. Goldszmidt. Tango: Distributed Data Structures over a Shared Log. SOSP 2013.
YJ