Skip to content

集群与运维专栏导览 ​

标签
分布式/集群与运维
字数
1065 字
阅读时间
5 分钟

本专栏收录把一堆机器当成一台机器用的那三件基础设施:协调服务(Chubby)、集群调度(Borg)、链路追踪(Dapper)。

它们与相邻专栏的边界是关注点而不是技术栈:

不收去哪看本专栏只关心
存储系统自身的内部实现(GFS、Bigtable、Dynamo、Spanner…)分布式存储它们作为被调度、被协调、被观测的对象那一面
共识算法本身(FLP、Paxos、Raft、Zab)一致性共识算法Chubby 只讲建在 Paxos 之上的锁服务接口,以及它为什么不做成一个 Paxos 库
分布式计算模型(Pregel、RDD、参数服务器)分布式计算Borg 只负责把这些计算任务摆到机器上

换个说法:存储与共识专栏回答"数据怎么放、节点怎么达成一致",本专栏回答"任务放哪、谁来发现彼此、出了问题怎么看见"。

目录 ​

  • 01 · Chubby —— 一个锁服务而不是 Paxos 库的四条论证、粗粒度与细粒度的取舍、会话租约与 master fail-over
  • 02 · Borg —— 中位万台的规模锚点、prod 与非 prod 同机混跑、三层抽象与两段调度、扩展三招
  • 03 · Dapper —— 低开销 / 应用级透明 / 可伸缩三个目标如何同时成立,以及三组开销量化

阅读顺序 ​

01 → 02 → 03 按时间与依赖层次排:

  • 01 Chubby(OSDI 2006) 是最底层的协调原语 —— 它提供的是"锁 + 小文件"这种别的系统可以直接搭上去的接口;
  • 02 Borg(EuroSys 2015) 是建在它上面的调度层 —— Borgmaster 选出后取一把 Chubby 锁,task 的 BNS 名字也写进 Chubby 文件;
  • 03 Dapper 是横切在两者之上的观测层,既追踪 Borg 跑起来的服务,也被 Borg 的容器与 daemon 分发机制托着。

先读 01 再读 02,是因为 02 里那句"取一把 Chubby 锁好让其他系统能找到它"只有在知道 Chubby 给了什么之后才读得出分量。

三组对照值得并读:

  • Chubby ↔ Borg —— 一个"锁服务被当成选主与命名底座"的完整实例。与 Bigtable 对 Chubby 的五处依赖并读,能看清 Chubby 在整个 Google 栈里到底被用来做什么:选主、发现、存引导位置、存 schema、存 ACL。
  • Borg ↔ Dapper —— 同一批机器的两个视角。Borg 回答"任务放在哪、活了没",Dapper 回答"一次请求分别在各层花了多少时间"。 一篇是控制面,一篇是观测面;Borg 的容器与 daemon 机制正是 Dapper 能铺满每台机器的前提。
  • Chubby ↔ Dapper —— 分层存储链在两个方向上都出现:App Engine → 实体存储系统 → Bigtable → Chubby 与 GFS。Dapper 用它说明"分层系统难以做应用层归因"(同一个 Bigtable cell 的 GFS 流量来自几个用户,在 GFS 层看不出来),Chubby 用它说明自己的客户端里有多少是"把 Chubby 当成自己分布式数据结构的根"。

相关 ​

  • 分布式 —— 母导览:本层的理论总纲(CAP、BASE、一致性模型)与五个子专栏的依赖关系;
  • Dynamo —— 分位数 SLA(99.9 分位)这条线在 Dapper 的长尾分析里又被用了一次,两篇并读能看清"为什么均值不够"在存储系统与可观测性两个场景下是同一个论证;
  • Spanner 与 F1 —— 与 Chubby 的对照:Spanner 用 TrueTime 替代了大部分"靠租约租出时间"的做法,而 Chubby 的 master lease 正是租约路线的典型。

贡献者 ​

文件历史 ​