虚拟化简史,理解Docker,虚拟机原理

云计算 虚拟化
在早期,一台物理机上通常只运行一个操作系统,并且大多数应用程序(像数据库、web 服务器和网站)通常只用来解决用户的一个需求。

 在早期,一台物理机上通常只运行一个操作系统,并且大多数应用程序(像数据库、web 服务器和网站)通常只用来解决用户的一个需求。

[[275028]]

这意味着当需要部署 pet.com 和 food.com 两个应用时,常见的做法就是使用两台物理机,在每台物理机上单独部署一套数据库,web 服务器和网站。 

小白科普:虚拟化简史,理解Docker,虚拟机原理

当请求负载增加时,需要通过加入新的物理机来实现应用程序的水平扩容。总的来说,用户应用和物理机保持着一一对应的关系。

使用这种扩容方式,可能需要花费几天的时间等待新的机器就绪,才能部署新的应用。并且为了扛住高峰时的请求压力,通常都会使用过量的物理机来部署应用,这导致整体的资源利用率不高。简而言之,在那时提供互联网服务需要付出高昂的成本。

应用虚拟化(如:Virual Host)

为了解决应用程序和物理机只能一一对应的问题, web 服务器和数据库这样的基础层应用,开始提供逻辑隔离功能,即允许在一个基础层上同时支撑多个用户应用。在 web 服务器世界中,这称为虚拟主机(virtual hosts),一个 web 服务器可以基于域名为多个网站提供服务。而在数据库领域中,单个数据库服务可以提供完全隔离的多个逻辑数据库。

基于应用虚拟化技术,可以将几个逻辑上隔离的用户应用部署在同一台物理机上。

小白科普:虚拟化简史,理解Docker,虚拟机原理

趣闻:在 90年代末,Apache 正是依靠虚拟主机功能击败了网景的Netscape Enterprise Server,占据了 web 网站服务市场。

与单应用单物理机模型一样,当请求负载增加时,仍然需要新加入多台物理机来实现水平扩容,但是现在能够在一台物理机上部署多个用户应用。

同时,一些应用程序如数据库,也开始尝试使用集群功能来实现更高级的水平扩展能力。虽然这些技术提高了资源利用率,但也显著地增加了程序架构和部署的复杂度。对于开发人员来说,此时部署和扩容一个应用程序有些过于复杂了。

换句话说,那时的互联网服务是复杂并且脆弱的。

虚拟机

随着 Linux 在服务器领域越来越流行,操作系统虚拟化也逐渐发展起来,它允许在一台物理机上同时运行多个操作系统。在这种新的模型下,一台物理机上的每个应用程序都可以拥有自己的操作系统和运行环境。 

小白科普:虚拟化简史,理解Docker,虚拟机原理

注:从技术层面讲,虚拟机技术是由 IBM 在 60 年代开创的;但是可以公平地说 Linux(和 Windows,在某些方面)普及了操作系统虚拟化的概念。

这个新模型不仅最大化的提升了资源利用率,而且通过逻辑上的隔离显著地简化了应用程序架构。但是虚拟机时代最具革命性的结果,是以 AWS 为主导的云计算业务。

有了这项新的服务,开发人员就可以专注于他们最了解的东西:软件。让少数的硬件和网络专家负责构建和扩展支撑软件运行的基础设施。

随着软件基础设施变得越来越复杂,应用程序也开始逐渐从传统的三层单体架构转向微服务架构。此时,如何设计,部署和管理一套可扩展的微服务系统变得相对复杂,并且与高度依赖于底层的云计算基础设施。

容器

后来,人们使用了一个相当古老的Linux功能,把进程“装箱”到了一个操作系统不同的资源子集当中,于是,虚拟化的下一个篇章——容器化——诞生了。容器技术的快速发展主要是由现在无处不在的 Docker 容器引领的。

使用容器化技术, 现在仅需要几秒钟就可以完成在物理机时代需要几天时间,在虚拟机时代需要几分钟的工作,并且只占用很少的硬件资源。

小白科普:虚拟化简史,理解Docker,虚拟机原理

虽然容器化技术显著的改善了服务粒度,提高了资源利用率,优化了复杂应用的软件架构并且实现了开发和生产环境的运行时统一。但是随着大量新功能的引入,也带来了服务部署和管理复杂度的挑战。服务扩容仍然需要依赖云计算厂商提供的特定方法来扩容底层的虚拟机。何时创建容器,将容器部署在何处也是非常复杂的问题。

毫无疑问,容器化技术是有用的,但是似乎需要其他技术来辅助实现它真正的价值。

Kubernetes

Kubernetes 由此诞生并解决了容器化技术面临的问题。Kubernetes 是基于容器的服务,提供了一种标准的、环境无关的方式来描述、管理和运行一个完整的可扩展的大型系统。

小白科普:虚拟化简史,理解Docker,虚拟机原理

在此之前,服务的开发环境、预生产环境和生产环境都有着很大的不同。Kubernetes 使用新的方式能够以简单、规范的形式描述、运行一个可扩展的大型完整系统,极大地降低了构建和管理微服务系统的成本。

需要注意的是,这些重要的技术里程碑都是通过不断的演化和相互叠加而来的,并且通常是配合使用的。从技术的角度上看,技术革命更多地产生于进化,而不是破坏性颠覆。比如,容器通常运行在虚拟机上,虚拟机需要运行在操作系统上,而操作系统运行在物理机上。

总结一下,我们可以看到虚拟化技术是如何演进的。

小白科普:虚拟化简史,理解Docker,虚拟机原理

虽然从技术角度上看, Kubernetes 是基于之前的技术演化而来,并非颠覆性的新技术,但是它却在商业角度上产生了革命性的价值。

我通常会很谨慎的对待各种新技术,因为大多数时候它们只是昙花一现。但是 Kubernetes 就像 Linux,虚拟机和 Git 曾经在他们各自领域一样,正在逐渐成为一项稳固的基础性技术。

简而言之,Kubernetes 可能是目前所有云应用程序开发组织能够做出的最安全的投资,如果应用得当,可以显著提高应用开发和交付的速度和质量。

 

责任编辑:武晓燕 来源: 今日头条
相关推荐

2012-05-18 10:22:23

2010-07-26 09:02:38

2013-07-17 09:32:58

2012-11-14 09:57:46

JavaJava虚拟机JVM

2009-08-18 22:06:59

VMware虚拟机软件

2015-08-20 14:29:38

Docker虚拟机

2024-03-26 07:30:07

Java虚拟机源文件

2024-03-29 11:42:21

Java虚拟机

2019-07-24 16:04:47

Java虚拟机并发

2016-09-01 12:37:13

OpenStack虚拟机Metadata

2017-05-31 14:52:53

虚拟机Docker容器

2015-08-20 10:31:55

DockerLinux开源

2015-07-15 11:46:52

Docker云服务虚拟机

2017-03-21 15:30:02

虚拟机DockerHyper

2020-04-05 11:01:03

虚拟机备份组网

2020-01-17 10:52:37

无服务器容器技术

2024-04-03 13:49:00

Java虚拟机方法区

2023-09-03 17:05:20

虚拟机

2012-04-10 10:29:29

2010-12-23 14:05:12

虚拟机
点赞
收藏

51CTO技术栈公众号