缺失的操作系统
前言:
2011年我加入谷歌时,曾引用一位朋友的笑谈:“世界上大约有一台半计算机,谷歌拥有其中一台。”自2011年以来,世界发生了巨大变化,现在可能有半打计算机了。也就是说,为了让下文更易理解,当我说“计算机”时,我指的是一个由许多独立机器连接起来的大型组装体,使它们像一台计算机一样运作。
实际博客文章:
现代微服务部署的技术格局可能令人困惑——它变化迅速,表面上类似的项目激增,声称做类似的事情。即使对我这样相当深入技术的人来说,也不总是清楚不同项目的具体用途。
我多次开玩笑地提到“数据中心操作系统”(至少在这里和这里),并自2015年首次离开谷歌休假以来一直在思考它。最近我有机会与一群性能工程师(他们处于开发和运维的交叉点)聊天,他们提醒我写下我的想法。这是第一篇帖子,但可能还有更多(尤其是关于其安全模型)。
警告: 这篇文章纯粹是未经修饰的观点。它充满了未经证实的非科学主张。我经常犯错。
我声称以下内容:
当我们最初构建计算机时,花了几十年时间才出现第一个真正的“操作系统”。在“真正”的操作系统出现之前,有一些 proto-OS——必须单独管理并拼凑在一起的工具集合。世界上总体计算机很少,如果你想在一台上工作,你必须在一家大型研究机构或组织工作。这些机器运行拼凑的操作系统,这些系统是那台计算机独有的。
大约从2007年开始,我们正在经历第二个这样的时期:“单台计算机”模型被“仓库大小的计算机”取代。最初,很少有组织有财力拥有其中一台,但云计算使许多没有十亿美元现金来建完整数据中心的公司能够访问“许多独立的小型计算机”。
超大规模公司(GOOG、FB,还有腾讯等)正在内部构建“proto-datacenter-OS”的近似物;亚马逊正在外部化他们的一些,并且数据中心操作系统的许多独立组件作为开源项目存在。
尚不存在的是实际完整的 DatacenterOS,让“普通”公司可以安装。有一个“缺失的操作系统”——一种你安装在大型计算机组装体上的软件,它将这个计算机组装体转变为“一台计算机”。
“数据中心操作系统”会由什么组成?如果你看现代技术栈,你会发现有一个惊人的趋同——不是在人们运行的实际软件中,而是在需要填充的“角色”中。对于每个角色,通常有许多不同的可用实现。
你在每个大规模分布式基础设施中看到的是:
- 某种形式的集群范围文件系统。如果你在谷歌内部,想想 GFS/Colossus;如果你在外部,想想 GlusterFS 或类似的东西。许多公司最终使用 S3,因为可用的产品并不出色。
- 水平可扩展的键值存储。如果你在谷歌内部,想想 BigTable;或者 Cassandra、Scylla,或者(如果你足够眯眼)甚至 ElasticSearch。
- 分布式一致键值存储。如果你在谷歌内部,想想 Chubby;如果你在外部,想想 etcd。这并不直接被大多数应用程序使用,主要用于管理集群。
- 某种发布/订阅消息队列系统。想想 PubSub,或者在某种意义上的 Kafka,或 AWS 上的 SQS,或者可能是 RabbitMQ。
- 作业调度器/容器编排器。一个系统,它获取可用资源、所有应该运行的作业以及一堆约束,然后解决一个受限的 bin-packing 优化问题,以确保资源被正确使用。想想 Borg,或者在某种程度上 Kubernetes。这可能与某种 MapReduce 风格的批处理工作负载基础设施集成,以利用非高峰 CPU 周期。
我发现思考“在单笔记本电脑操作系统上我还有哪些其他部分,我真的应该在 DatacenterOS 上拥有?”非常值得。
人们正在通过 Prometheus 和各种其他数据收集代理构建进程浏览器的近似物。可以说,分布式跟踪(每个人都意识到他们需要)实际上是 Datacenter-OS-strace(是的,它至关重要)。问题“我的 Datacenter-OS-syslog 是什么”同样有趣。许多投入可观察性的工程是将我们习惯在单台机器上拥有的内省能力移植到“计算机”上。
人们谈论的“服务网格”只是 DatacenterOS 版本的 portmapper 吗?
还有其他事情我们真的不知道如何构建等效物。“计算机”的“调试器”是什么样子的?显然,在单台主机上单步执行不是修复现代分布式系统中问题的正确方法——你的服务可能与数十台其他主机交互,这些主机可能同时崩溃(或逐渐停止或其他什么),重新启动和单步执行极其困难。
除了许多需要为“计算机”重建的监控、开发和调试工具之外,还有许多其他——甚至更基本的——问题真的没有令人满意的答案。安全是一个特别未知的领域:
对于这台计算机来说,“特权进程”是什么?特权和信任边界是什么?用户管理如何工作?跨服务身份验证和凭据委托如何工作?我们如何避免将 James Forshaw 在他的幻灯片中描述的 literally every logical single-machine privilege escalation 重新引入我们的新操作系统和运行在那里的各种服务?/mm 中的单个 Linux 内核错误有没有可能不意味着我们整个安全模型的末日?
为了让帖子简短:在我看来,新兴的 DatacenterOS 是几十年来计算机科学中最令人兴奋的事情。我有时希望我更擅长说服亿万富翁给我几亿美元来投资有趣的问题——因为如果有一个问题我认为我想致力于,那就是一个 FOSS DatacenterOS——“在 N 台机器上安装这个,你就有了‘一台计算机’”。如果你问这个问题,许多技术格局更容易理解:这个特定拼图在“计算机”中解决什么功能?这个项目的单机等效物是什么?
这篇帖子可能会有后续帖子,因为我在这个话题上还有更多考虑不周的想法:
- DatacenterOS 的安全模型
- Kubernetes:你想成为调度器,还是想成为操作系统?选一个。
- 我们如何获得 bash 脚本的力量,但是针对一个 20k 台机器的集群?
发布者: halvar.flake
时间: 上午 10:55