从超售到抽象

一直关注我博客的人兴许会注意到,我近期一直在关注Docker容器以及Mesos集群方面的东西。有很多人觉得这也就是一个虚拟化的新方式,然而我现在就要说说容器化之后的东西。

首先要回顾一下计算机最原始的状况。所谓的“分时计算系统”。也就是说N多的用户公用一台主机——体积不小,价格也很高,做不到PC的概念,只能私下里开会预定时间表。大家事先准备好自己的打孔纸带,也就是现在意义上的程序,然后分别送到主机上去执行,得出结果。


然后就是个人电脑的时代,强调的是“个人”。直到最近的10年,那个时候还鲜有什么虚拟机,VPS什么的。所有的用户都会去买自己的服务器硬件托管到机房。正如本站最初做的那样,即便是所谓的“虚拟主机托管”从本质上讲,他还是一台真实的物理主机。一台主机基本上就是服务一个用户,对于互联网来说就是服务唯一的发布者。这样做的好处是对于运算资源来说,根本没有什么可以争抢的。自己买的东西保证可以100%物尽其用。可控性很强。
随之而来的虚拟化时代,物理主机的负载逐渐转变到了云上,印象中本站就是在2007年通过VPS的方式实现了所谓的“独立主机托管”。即所谓的又回到了“分时计算时代”,各自的所谓虚拟主机成为了一个真实物理主机操作系统中的一个进程,由操作系统在肉眼无法发现的时间片上进行调度,省了那个开会预定的过程。
但由于“超售”的存在(也就是说虚拟主机的内核数相加远大于真实物理的内核数,内存、硬盘的总容量也允许超过实际上拥有的物理容量)正是现阶段虚拟化的优势所在,也是虚拟化产业的盈利来源。这种方式导致了大家在谈及VPS的硬件配置来说事实上没有任何意义的,同样的配置,良心供应商和黑心供应商,或者说你运气不好,同一个物理主机上恰好有个整天做数据分析的,最终的Benchmark的结果将有云泥之别。

基于现阶段虚拟化的种种问题就催生出了新的思路。比如Mesos,尽管我自己也认为Mesos远没有达到产品的级别,但这种思路无疑是先进的。类似的项目还有CoreOS,以及Google已经在使用的Kubernets。这种思路的本质就是不再有“一台主机”的概念,而是去讨论某某task,分配多少个core,给多少内存和IO,用时多少完成。本质上将资源的调度上上升了一个Level,达到了集群的高度。系统会主动寻找task最适合的主机去执行任务,不需要关心具体是哪一台主机完成了任务。而借助于容器化的实现,一方面覆盖了依赖环境的因素,另一方面由于容器本身对于权限的分配在用户级别上和VM是一致的,最后就是容器的进程调度本质上就是物理主机的进程调度,不但是在性能损耗上还是在监控粒度上都具有VM无法比拟的优势。

再回到那个“分时系统”的模型上,这种模式更加类似于有个管理员(Mesos/CoreOS/Kubernets)管理了一个硬件仓库(resource pool),而且这个管理员有能力根据每个用户的任务(task)轻重去分配合理的硬件,组装一台合适的主机,并在该主机上完成任务。

从现阶段的硬件设计上来看,我们还无法实现动态为某台主机增加CPU和内存,用软件调度的方式实现硬件的抽象化从曲线上解决的就是这个问题。兴许有一天我们可以从硬件上动态组装物理主机之后,抽象化将成为一个主流的虚拟化方式。

推荐阅读:
如果你的眼尖的话,你会发现现在
这一段时间,凡是提及容器技术的
话说在数据中心虚拟化的大潮中,
首先列出本站之前相关的几篇帖子

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据