消失的操作系统:数据中心OS的技术演进与挑战

本文探讨了现代超大规模数据中心环境下"缺失的操作系统"概念,分析了分布式系统核心组件如集群文件系统、键值存储、消息队列等关键技术栈,并提出了数据中心OS在安全模型、调试工具和权限管理等方面面临的挑战。

消失的操作系统

前言

2011年我加入谷歌时,曾引用朋友的一句玩笑:“世界上大约有一台半计算机,谷歌拥有其中一台。“自2011年以来世界已发生巨变,现在全球可能有五六台这样的"计算机”。在下文中,当我说"计算机"时,指的是由大量独立机器连接组成的、能像单台计算机一样运作的超大规模集群。

正文

现代微服务部署的技术生态令人困惑——变化迅速,大量表面相似的项目声称能实现类似功能。即使对我这样深耕技术领域的人而言,不同项目的精确用途也不总是清晰的。

我多次提及"数据中心操作系统"的概念(至少这里这里),自2015年从谷歌休假以来一直在思考这个问题。最近与一群性能工程师(他们处于开发与运维的交汇点)的交流促使我写下这些思考。这是第一篇相关文章,后续可能还有更多(特别是关于其安全模型的内容)。

警告:本文纯属个人观点,包含大量未经科学验证的主张。我经常犯错。

我的核心观点是:

  1. 计算机发展初期,经过数十年才出现真正的"操作系统”。在真正OS出现前,存在许多"原型OS"——需要单独管理拼凑的工具集合。当时全球计算机数量稀少,使用计算机需在大型研究机构工作。这些机器运行着为该计算机专门拼凑的独特OS。

  2. 大约从2007年开始,我们正经历第二个类似时期:“单台计算机"模式被"仓库级计算机"取代。最初只有少数财力雄厚的组织能拥有这样的计算机,但云计算使得没有数十亿美元建设完整数据中心的公司也能使用"大量小型独立计算机”。

  3. 超大规模企业(谷歌、Facebook,也包括腾讯等)内部正在构建"原型数据中心OS";亚马逊正在将其部分系统外部化;大量构成数据中心OS的独立组件已作为开源项目存在。

但目前尚不存在一个普通公司可以直接安装的完整数据中心OS。存在一个"消失的OS"——安装在大量计算机集合上的软件,将这些计算机集合转变为"一台计算机"。

数据中心OS的组成

观察现代技术栈会发现一个惊人的趋同现象——不在于人们实际运行的软件,而在于需要实现的"角色"。每个角色通常都有多种不同的实现方案。每个大规模分布式基础设施都包含以下组件:

  • 集群级文件系统:谷歌内部使用GFS/Colossus,外部可能是GlusterFS等。许多公司最终使用S3,因为现有方案不够理想。
  • 水平可扩展键值存储:谷歌内部用BigTable,外部可能是Cassandra、Scylla,甚至ElasticSearch(勉强算)。
  • 分布式一致性键值存储:谷歌内部用Chubby,外部用etcd。大多数应用不直接使用,主要用于集群管理。
  • 发布/订阅消息队列系统:如PubSub、Kafka、AWS的SQS或RabbitMQ。
  • 任务调度/容器编排系统:根据可用资源、待运行任务和约束条件,解决受限的装箱优化问题以确保资源合理利用。如Borg,某种程度上也包括Kubernetes。可能与MapReduce风格的批量工作负载基础设施集成以利用闲置CPU周期。

缺失的工具与挑战

思考"单机OS上有哪些组件应该在数据中心OS中存在"非常有价值:

  • 人们通过Prometheus和各种数据收集代理构建了近似"进程管理器"的工具
  • 分布式追踪(公认的必需品)实质上是数据中心版的strace
  • “数据中心版的syslog是什么"同样是个有趣问题
  • 大量可观测性工程实质是将单机自省能力移植到"计算机"上
  • 人们谈论的"服务网格"是否只是数据中心版的portmapper?

还有一些功能我们完全不知道如何构建对应方案。比如"计算机"的"调试器"应该是什么样子?显然,在单主机上单步执行不是解决现代分布式系统问题的正确方式——你的服务可能与数十台其他主机交互,这些主机可能同时崩溃(或逐渐停止等),重新启动和单步执行极其困难。

除了需要为"计算机"重建的众多监控、开发和调试工具外,还有许多更基础的问题没有满意答案。安全领域尤其未知

  • 什么是这台"计算机"的"特权进程”?
  • 权限和信任边界是什么?
  • 用户管理如何工作?
  • 跨服务认证和凭据委派如何实现?
  • 如何避免将James Forshaw在其幻灯片中描述的所有单机权限提升漏洞重新引入我们的新OS和各种服务?
  • 是否有办法确保Linux内核的/mm单个漏洞不会导致整个安全模型崩溃?

结语

简而言之,我认为正在浮现的数据中心OS是计算机科学几十年来最激动人心的发展。有时我希望自己更擅长说服亿万富翁投资几亿美元解决有趣问题——因为如果有我想致力于解决的问题,那就是开发一个FOSS数据中心OS——“在N台机器上安装这个,你就拥有了’一台计算机’"。如果思考"这个特定组件在’计算机’中实现什么功能?这个项目的单机等价物是什么?",许多技术景观会更容易理解。

本文可能会有后续,因为关于这个话题我还有更多不成熟的想法:

  • 数据中心OS的安全模型
  • Kubernetes:你想成为调度器还是OS?只能选一个
  • 如何获得bash脚本的强大功能,但针对2万台机器的集群?
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计