2.1 Borg 的诞生
在单机操作系统大战快要分出胜负之时,Google 这家行业新宠正准备 IPO,用现在的话来说,Google 那时是一家「小巨头」:已经初露锋芒,不容小觑,但巨头们彼时正陷入战争泥潭,无暇顾及之 。
2003年,为了更好地支持新版本的搜索引擎(基于MapReduce),使其能服务好亿万用户,Google 开始了大规模集群管理系统的开发,这个系统叫做 Borg,它的目标是管理以万台为单位的计算机集群 。
虽然刚开始只有3、4个人的小团队,但 Borg 还是跟上了 Google 的飞速发展,证明了它的潜力,最终 Google 的全部机器都由 Borg 管理,MapReduce、Pregel 等著名系统都建立于 Borg 之上 。从操作系统的角度来看,Borg 是一个 monolithic 系统,任何对系统的功能升级都需要深入到 Borg 底层代码来修改支持 。
在 Google 这样成熟的技术型公司中,有很多优秀的工程师,因此这个问题在内部系统中并不算严重 。但如果是公有云,必然要接入许多第三方应用的需求,一家公司的工程师团队再强大,也无法把业界所有其他系统都接入 Borg,这时系统的可扩展性将非常重要 。
在2010年左右,随着 Google 中国部门的撤销,很多优秀的 Google 工程师加入了 BAT 等中国公司,其中一部分加入了腾讯搜搜 。这些前 Googler 加入腾讯后,复刻了 Google 的许多系统,技术上也很出色,其中 Borg 的复制品叫做 TBorg,后来改名为 Torca 。Torca 在搜搜的广告业务中起到了非常重要的作用,后来由于腾讯业务调整,搜搜与搜狗合并,Torca 在腾讯内部失去用户,逐渐停止了维护 。
在 Borg 上线几年后,Google 意识到 monolithic 架构的问题和瓶颈,于是又一支小团队开始了 Omega 系统的研发 。Omega 系统继承的是微内核的思想,新的功能升级几乎不需修改底层代码就能完成,它比 Borg 更加灵活,有更好的伸缩性 。但因为当时 Google 的全部系统已经搭建在 Borg 之上了,由于 Borg 的 monolithic 特性,MapReduce 等系统都紧密绑定到 Borg 核心代码,不但无缝迁移到 Omega 系统是不可能的,迁移还要花巨大的人力、时间和试错成本,因此即使核心成员坚持不懈地推动,Omega 系统在 Google 仍未能取得成功 。
有趣的是,Omega 项目的核心成员之一 Brendan Burns 的职业轨迹和操作系统领域的大前辈 David Cutler 有不少相似之处 。
- 他们同样毕业于文理学院:David Cutler 毕业于 Olivet College,Brendan Burns 毕业于 Williams College 。
- 他们同样在毕业后加入了一家传统行业的巨头:David Cutler 毕业后加入杜邦,Brendan Burns 毕业后加入汤姆森金融 。
- 正如教父所说,一个男人只能有一种命运,Cutler 和 Burns 在这两家传统巨头学会了写代码,也许就是在那时,他们发现了自己在软件上的天分,发现了自己的命运是构建新一代操作系统 。因此他们同样在第二份工作中选择了当时最炙手可热的科技巨头:David Cutler 加入 DEC,Brendan Burns 加入 Google 。
- 他们同样在微软到达了职业生涯的顶峰:Brendan Burns 现如今已是微软的 Corporate VP,而 David Cutler 老爷子早已是微软唯一的 Senior Technical Fellow,据传微软甚至有条规定,Cutler 的技术职级必须是全公司最高的,任何人升到 Cutler 的 level,Cutler 就自动升一级 。
在单机操作系统时代,hybrid kernel 盛行一时,这证明了微内核在软件架构上的成功,但因为性能问题,又没有任何一个成功的内核采用「纯粹的」微内核架构,因此微内核从实用角度上来说是失败的 。
和单机操作系统时代中微内核架构的失败原因不同,Omega 在 Google 公司内部的失败和性能问题无关,只是历史遗留问题的影响 。对开源社区和大部分公司来说,尚无能和 Borg 相媲美的系统,也没有历史负担,因此几年后,Google 决定开源 Omega 这一超越 Borg 的新一代分布式操作系统,将其命名为 Kubernetes 。
为了介绍清楚 Kubernetes 和微内核的关系,以及微内核架构为 Kubernetes 带来的优势,这里有必要引入一些技术细节 。
上文中提到,单机操作系统的系统调用需要「陷入」内核,所谓的陷入(trap)也叫做中断(interrupt),无论内核是什么类型,单机操作系统都需要在启动时将系统调用注册到内存中的一个区域里,这个区域叫做中断向量(Interrupt Vector)或中断描述符表(IDT,Interrupt Descriptor Table) 。
当然,现代操作系统的中断处理非常复杂,系统调用也很多,因此除了IDT之外,还需要一张系统调用表(SCV,System Call Vector),系统调用通过一个统一的中断入口(如 INT 80)调用某个中断处理程序,由这个中断处理程序通过 SCV 把系统调用分发给内核中不同的函数代码 。因此 SCV 在操作系统中的位置和在星际争霸中的位置同样重要 。对微内核架构来说,除了 SCV 中的系统调用之外,用户态服务提供什么样的系统能力,同样需要注册到某个区域 。
推荐阅读
- 《好声音》后台人员爆料:李玟被导演组扇巴掌,随后删微博道歉
- 微信删除的聊天记录怎么恢复?
- 微信名男成熟男人励志带伟字 微信名男成熟男人励志
- 微滤和超滤有什么区别 微滤和超滤有什么区别呢
- ios怎么发语音表情 ios怎么发语音表情包微信
- 火山石烤肠微波炉加热几分钟可以食用 火山石烤肠微波炉加热几分钟能吃
- 甜到齁什么意思 苹果无法设置微信支付
- 微信里的拍了拍怎么设置文字 微信里的拍了拍怎么设置
- 微博里repost是什么意思啊 微博里的repost
- 怎么进入微博微店 怎么进入微博