前言:2011年加入谷歌时,我引用了一位朋友的一句俏皮话:
世界上大约有一台半电脑,谷歌就有一台。
自2011年以来,世界发生了相当大的变化,现在世界上可能有六台计算机。这就是说,为了让下面的文本有意义,当我说计算机时,我指的是单个机器的非常大的集合,这些机器已经连接在一起,使它们的行为像一台计算机。
现代微服务部署的技术前景可能会令人困惑-它变化很快,表面上相似的项目激增,声称做着类似的事情。即使对我这个对技术有相当深了解的人来说,不同的项目服务的确切目的也并不总是很清楚。自从2015年我第一次离开谷歌开始休假以来,我一直在反复打趣数据中心操作系统(至少在这里和这里),并沉思着它。我最近有机会和一群性能工程师(他们经常坐在开发人员和运营人员之间)聊天,他们提醒我要写下我的想法。这是第一篇帖子,但可能会有更多的帖子(特别是关于它的安全模型)。警告:此帖子纯属纯正观点。它充满了未经证实的、不科学的主张。我经常是错的。我要说的是:当我们第一次制造计算机时,花了几十年才有了第一个真正的操作系统。在真正的操作系统出现之前,有许多原始操作系统--必须分开管理并拼凑在一起的工具集合。当时世界上几乎没有计算机,如果你想研究一台,你必须在一个大型的研究机构或组织工作。这些机器运行的是那台计算机独有的拼凑而成的操作系统。大约从2007年开始,我们正在经历第二个这样的时期:单机型号被仓库大小的计算机所取代。起初,很少有组织有足够的财力拥有一台这样的计算机,但云计算正在让许多没有10亿现金来建设完整数据中心的公司能够使用到大量的个人小型计算机。超级缩放器(GOOG、FB,还有腾讯等)。在内部构建类似于原型数据中心操作系统的产品;亚马逊正在将他们的一些产品外部化,数据中心操作系统的单个组件组成的大型动物园作为开放源码项目而存在。目前还不存在的是一个真正完整的DatacenterOS,一般的公司只需安装即可。
缺少OS&34;-您在大型计算机组件上安装的一款软件,可将此计算机组件转换为一台计算机";。
数据中心操作系统包括哪些组件?如果你观察一下现代技术堆栈,你会发现有一种令人惊讶的趋同--不是在人们实际运行的软件上,而是在需要填补的角色上。对于每个角色,通常有许多不同的可用实现。
某种形式的群集范围文件系统。如果你在Google内部,GlusterFS或类似的东西,如果你在外面,想想GFS/Colossus。许多公司最终使用S3,因为可用的产品不是很好。
水平可伸缩的键值存储。如果你在Google,或者Cassandra,或者Scylla,甚至ElasticSearch(如果你足够斜视),那就想想Bigtable吧。
分布式一致键值存储。如果你在谷歌内部,想想Chubby,如果你在外面,就想想etcd。这并不是大多数应用程序直接使用的,主要用于管理群集。
某种发布/订阅消息排队系统。想想PubSub,或者某种意义上的Kafka,或者AWS上的SQS,或者RabbitMQ。
作业调度器/容器协调器。一种系统,它利用可用的资源、所有应该运行的作业和一系列约束,然后解决一个受约束的装箱优化问题,以确保资源得到正确使用。想想博格,或者某种程度上的库伯内斯。这可能与某种MapReduce风格的批处理工作负载基础设施集成,也可能不集成,以利用非高峰CPU周期。
我发现这非常值得思考";我在单个笔记本电脑操作系统上还有哪些其他部件,我真的应该在DatacenterOS上拥有这些部件?";。
人们正在通过普罗米修斯和各种其他数据收集代理构建近似的过程资源管理器。
有人可能会争辩说,分布式跟踪(每个人都意识到他们需要分布式跟踪)实际上是数据中心操作系统(是的,它非常重要)。问题#34;什么是我的数据中心-OS-syslog";也同样有趣。
在可观察性方面,很多工程都在将我们习惯于在一台机器上拥有的自省功能移植到计算机上。
这就是人们谈论的端口映射器的DatacenterOS版本的服务网状网吗?还有一些我们真的不知道如何建立等价物的其他东西。计算机";的";调试器是什么样子的?显然,单步执行单个主机不是修复现代分布式系统中问题的正确方法-您的服务可能正在与数十个可能同时崩溃(或逐渐停止或其他任何情况)的其他主机交互,而重新启动和单步执行是极其困难的。
除了许多需要为计算机重建的监控、开发和调试工具之外,还有许多其他-甚至更基本的-问题确实没有令人满意的答案。安全是一个特别未知的领域:
此计算机的特权进程是什么?什么是特权和信任边界?用户管理是如何工作的?跨服务身份验证和凭据委派是如何工作的?我们如何避免将James Forshaw在幻灯片中描述的每个逻辑单机权限提升重新引入我们的新操作系统和在那里运行的各种服务?有没有可能/mm中的单个Linux内核错误不会给我们的整个安全模型带来厄运呢?
长话短说:在我看来,新兴的DatacenterOS是几十年来计算机科学界发生的最激动人心的事情。有时我希望我能更好地说服亿万富翁给我几亿美元投资于有趣的问题--因为如果有我认为我喜欢解决的问题,那就是Foss DatacenterOS-34;把它安装在N台机器上,你就有一台电脑了。如果有人问这个问题:这块拼图解决了计算机的什么功能,那么很多技术前景就更容易理解了。这个项目的单机相当于什么?这篇帖子可能会有后续帖子,因为我在这个话题上还有更多考虑不周的想法:
库伯内斯:你是想当调度员,还是想当操作系统?选一个吧。
如果不是针对20000台机器的集群,我们如何才能获得bash脚本的强大功能呢?