在过去的十年,从搜索引擎到社交网络再到SaaS,虚拟化已经成为软件的每一项主要趋势背后的关键驱动力。事实上,如果没有虚拟化所带来的服务器利用率的提升和相关成本的节约,那么,我们所使用的大多数的应用程序以及我们今天所知道的云计算均是不可能实现的。
但现在,新的云架构正在重塑整个数据中心。据我们所知,虚拟化已然无法再跟上这一趋势。
随着数据中心转型,虚拟化背后的核心:即把一台大型的、昂贵的服务器划分为多台虚拟机理念已然有了不同的含义。相反,并非分配个别服务器的资源,大量的服务器被合并为一个仓库规模的“电脑”(虽然还是虚拟的!),以运行高度分布式的应用程序。
每一家IT企业和开发商都将受到这些变化的影响,尤其是随着规模化扩展需求的增加,以及应用程序每天都在变得越来越复杂。那么,对于那些已经投资于当前模式虚拟化的企业而言,要如何理解这一转变呢?其背后的推动因素是什么?下一步的发展方向又是如何呢?
过去和现在的虚拟化
也许适应业界现如今正在发生的变化的最好的方法便是走在变化之前——成为引导这些转型变化的领头羊。
这样的故事案例在大型主机时代就已经开始了。早在20世纪60和70年代,IBM公司需要一种方法以便能够在新一代的硬件上支持其旧版本的软件,并将其强大的计算机从在一个时间段内只能运行一款程序的批处理系统变为一个能够支持多个用户和应用程序的互动式系统。彼时,IBM的工程师们提出了一个“虚拟机”的概念,作为能够让多款应用程序和用户能够共享服务器资源和基本时间系统的一种方式,同时还能够保持兼容性。
这种方法无疑在彼时大大稳固了IBM作为主机计算市场领导者的霸主地位。
而到了21世纪初,一个新的问题应运而生了。企业所面对的是充满了昂贵的服务器的数据中心,但这些服务器的利用率则非常低。此外,由于摩尔定律,处理器时钟速度每18个月翻了一番,而处理器已然发展到了多核处理器——但软件堆栈无法有效地利用新的处理器和所有这些内核。
解决方案再次采用了一种虚拟化的形式。VMware公司彼时还仍是一家来自斯坦福大学的初创型企业,通过允许企业用户将他们的多款应用程序打包到一台单一的服务器中,从而使得企业用户能够极大地提高服务器的利用率。通过兼容所有的软件(包括旧的和新的),VMware还之间桥接弥补了软件栈和现代多核处理器之间的差距。最后,VMware使得Windows和Linux虚拟机得以在同一台物理主机上运行——而无需在同一数据中心内分配单独的物理服务器集群。
因此,虚拟化在每一家企业的数据中心建立了束缚。
但到了2000年代后期,我们又迎来了一次全新的技术革命,诸如像谷歌和Facebook这样的公司开始成长起来。面临着为数十亿用户提供实时服务的前所未有的挑战,这些互联网巨头们很快意识到,他们需要建立定制化的数据中心,将硬件和软件栈聚集到数千台服务器,并取代更大型,更昂贵的单片系统。
这些更小更便宜的服务器缺乏计算能力,而复杂的软件将这些服务器整合到一起建立一个大规模分布式计算基础设施。数据中心的形状发生了改变。其可能是由商品化的部件组成,但这所导致的结果仍然是使得相关多使用最先进技术的传统数据中心更加强大。Linux成为这些超大规模数据中心操作系统的首选,并在DevOps领域成为管理开发和运营的一种方式,虚拟化也就失去了其核心价值主张之一:在同一物理服务器上同时运行不同的“客户”操作系统的功能(即Linux和Windows)。
微服务作为主要驱动力
但是,推动虚拟化聚集的最有趣的变化是在应用程序方面,其通过一个新的软件设计模式:被称为微服务(Microservices)架构。不是单一应用程序,现在我们的分布式应用程序是由许多小的,独立的进程组成,通过语言无关(language-agnostic)的协议 (HTTP/REST, AMQP)交流。这些服务是小而高度解耦的,他们专注于执行一个小的任务。
基于一些原因,微服务迅速成为设计模式的选择。
首先,微服务有快速的周期时间。旧的软件开发模式每隔好几个月才发布一款应用程序,这对互联网公司而言太慢了,他们需要在一个星期内多次部署新版本——甚至需要在单独的一天内就响应参与指标或类似的事件。而由于其高度变化的成本单一应用程序显然不适合这种灵活敏捷性。
其次,微服务允许应用程序选择组件的规模比例。一款应用程序对于不同组建的比例需求通常是不同的,而微服务让互联网公司能够按照其实际需求进行相应的功能缩放。另一方面,较旧的应用程序是极其低效的。通常情况下,唯一的办法就是克隆整个应用程序。
第三,微服务支持平台无关(platform-agnostic)的开发。由于微服务通过跨语言无关的协议通信,一款应用程序可以在不同的平台运行(Java,PHP和Ruby,Node,Go,Erlang等)而没有任何问题,从而得以受益于微服务上每个平台的优势。而这如果要在单片应用框架来实现(如果不是不切实际的话)要更为困难。
提供微服务
在虚拟机的世界,微服务架构的承诺仍然未能实现。为了满足规模化扩展和成本的需求,微服务既需要较轻的碳足迹和快如闪电的启动时间,因此数百台微服务可以在一台物理机器上运行,并发送即时的通知。虚拟机缺乏这两种特质。
而这便是基于Linux的Container容器发挥作用的时候了。
虚拟机和Linux Container均意味着独立于硬件设备的应用程序。然而,不同于虚拟机——虚拟化的硬件及底层包含一个操作系统拥有应用程序虚拟化堆栈——容器只虚拟化操作系统,只包含应用程序。这样,Container的碳足迹非常小,可以在几秒钟内启动。一台物理机可容纳比Container多出四到八倍的虚拟机。
Container实际上不是新的。他们从FreeBSD监狱,时代存在的Solaris Zones,OpenVZ,LXC,等等。他们走了,然而,因为他们代表的是为精卫最佳分娩机制。展望未来,每一个应用程序的规模将是一个分布式系统由数十如果不是数以百计的精卫,在单独的容器中运行的每个。对每一个这样的应用程序的操作平台,将需要跟踪其所有的组成部分——发射或杀死精卫的必要保证应用程序级的SLA。
Container实际上并不是新的。实际上,其在FreeBSD Jails、Solaris Zones、OpenVZ、LXC等的时代就已经存在。但是,因为对于微服务而言,它们代表了最佳的交付机制,他们在现在获得热捧。展望未来,每款应用程序大规模的都将是由包含了几十甚至几百台微服务的分布式系统组成,而每台微服务均运行其自己的container。对于每一款这样的应用程序,运维平台将需要跟踪其所有的微服务,并启动或杀死必要的微服务,以保证应用程序级别的SLA。
为什么我们需要一款数据中心操作系统
对于所有的数据中心,无论其是公共或私人或混合模式,都将很快采取这些超大规模的云架构——而这些均是通过智能软件、containers和微服务整合在一起的商品化的硬件。这种趋势将给企业计算带来了一套全新的云经济和云规模,其将带来全新的、以前所不可能有的业务类型。
这对虚拟化意味着什么?
虚拟机并不是死了。但他们无法跟上微服务和下一代应用程序的要求,这就是为什么我们需要一个新的能够执行与服务器虚拟化的设计目的完全相反的事情的软件层的原因所在了:在数据中心将所有的服务器聚集(而不是瓜分)在一起,形成一个巨大的超级计算机。虽然这一新的抽象水平使整个数据中心看起来像一台单一的计算机,但在现实系统其是由数以百万计拥有基于自己的Linux的containers的微服务所组成的。而且能够跨所有这些containers,提供多租户,隔离和资源控制的优势。
想象一下,这一软件层将成为未来数据中心的“操作系统”,而其意义已经超越了数据中心的运作的隐患。数据中心操作系统将允许开发人员更容易地且安全地构建分布式应用程序,而无需受管理机制(或造成潜在的损失)的限制,而且也不必放弃他们所选择的工具,他们会变得更像用户而非运维人员。
这种新兴的智能软件层将很快释放IT企业,使得这些IT企业无需再手动配置及维护个人应用程序和机器,而这一点传统上被认为是创新的瓶颈;并让这些IT企业得以专注于如何变得更加灵活和有效。他们也将成为更具战略性的用户,而非单纯的维护和运营商。
虚拟化的聚合是虚拟机背后真正摆在首位的核心见解的进化。但它是走向分布式计算常态的一个重要步骤,而不是例外。
本文作者Sudip Chakrabarti是a16z的合作伙伴。他专注于基础架构软件,安全和大数据投资。Peter Levine是Andreessen Horowitz的合伙人。他曾是麻省理工学院和斯坦福大学商学院的一名讲师,也曾担任XenSource公司的首席执行官,该公司于2007年被Citrix收购。在加盟XenSource公司之前,Peter是Veritas Software 公司的战略和平台运营执行副总裁。