什么是虚拟化?| 裸机 vs 虚拟机 vs 容器

news/2024/10/4 21:10:41 标签: 云计算

云计算!DevOps!Docker!Kubernetes!……”

如果您是一名软件工程师,还没有遇到过以上这些流行词,那么您可能一直生活在与世隔绝的地方。

所有这些技术都与同一样东西有关,对,就是虚拟化!!!

但是,虚拟化到底是什么?

我认为最好用一个例子来描述——让我们接着往下看……

假设公司“XYZ”需要运行两个不同的应用程序—应用程序 A 和应用程序 B。但这两个应用可能对操作系统和库的要求不同。

在没有虚拟化的情况下,公司需要为每个应用各自配备一台物理机器,这不仅成本高昂,而且管理复杂。

请注意,应用程序 A 只使用了第一台机器 30% 的资源,而应用程序 B 也只使用了第二台机器 40%的资源。

我们可以很明显的看到这种方法的主要缺点:

  • 需要为每个新应用程序购买额外的硬件,需要管理的物理资源数量随着所需应用程序的数量线性增长
  • 每个应用程序都没有充分利用可用的物理资源,即浪费资源。

幸运的是,计算机科学家们已经找到了解决这个问题的办法——虚拟化…

虚拟化是一种强大的技术,能够将单台物理计算机转变为多个独立的虚拟环境,让每个环境都可以运行不同的操作系统和应用程序。

“这是个玩笑吗?!”

绝对不是!

引入虚拟化后,XYZ公司可以在一台物理服务器上创建多个虚拟机,每个虚拟机都相当于一台完全独立的计算机,分别运行应用程序A和B。这样不仅节省了硬件成本,还提高了资源的使用效率。

可以看到虚拟化给我们带来了一些好处:

  • 节省硬件成本:虚拟化使得公司可以在一台物理计算机上部署多个应用。
  • 应用程序隔离:每个虚拟环境都像一台独立的计算机,因此不会干扰在另一个环境中运行的应用程序(例如,不会引起依赖冲突)。这也意味着每个应用程序都可以单独开发和部署。
  • 提高可扩展性和可用性:与购买新硬件相比,创建、管理和建立虚拟资源的过程更加简单快捷。这使得虚拟资源具备更好的可扩展性,并能够构建更高可用性的系统。
  • 集中管理和安全:由于物理资源与应用程序隔离,可以集中管理这些资源,并统一执行安全策略,从而提高了管理效率和安全性。

虚拟化的类型有很多,包括:

  • 硬件虚拟化(虚拟机)
  • 操作系统虚拟化(容器)
  • 网络风险
  • 数据虚拟化

然而,在本文中,我们将重点关注前2种类型,其他类型超出了了本文的讨论范围。

裸机、虚拟机和容器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

裸机

这是 XYZ 公司运行应用程序采取的第一个方法。

运行应用程序的传统方式是直接在专用硬件上运行。

裸机的主要优势在于它能够提供最佳的性能,因为在主机和应用程序之间没有虚拟化层。不过,需要注意的是,对于大多数用例而言,虚拟化的性能损失通常很小且微不足道。

但是裸机部署的最大缺陷是导致物理资源的严重浪费,因为每添加一个新的应用程序就必须购买和维护新的硬件,成本高昂。

虚拟机 (VM)

虚拟机(VM)在20世纪90年代开始流行,成为解决裸机部署问题的有效方案。其关键技术是虚拟机管理程序(Hypervisor)。

虚拟机管理程序是一种模拟特定计算机硬件或整个计算机的软件,它允许将可用的物理资源划分为多个虚拟资源。

运行虚拟机管理程序的计算机称为宿主机,而虚拟机管理程序创建和管理的虚拟机称为客户系统。

虚拟机管理程序可以直接位于硬件之上(类型 1),也可以位于操作系统之上(类型2)。

虚拟机非常棒,因为它们解决了我们在裸机环境中面临的许多问题,例如更好的资源利用率、环境隔离等。

然而,它也存在一个主要缺点:每个虚拟机都虚拟化了一个整个操作系统及其底层硬件。看起来有点多余?我们可以做得更好吗?

接下来,让我们继续探索……

容器

容器是一种轻量级的虚拟化技术,它只虚拟化操作系统,而不是像虚拟机那样虚拟化整个物理机。

容器不需要单独的客户操作系统或虚拟机管理程序,而是与宿主机共享操作系统内核,它仅包含应用程序及其必需的库和依赖项。这种设计使得容器的启动速度非常快!

同时由于容器不关心底层硬件,因此容器还具有便于迁移的优势。将容器从笔记本电脑迁移到云上,之后再迁移到数据中心的虚拟机或者物理机之上,都是很简单的事情。

然而,容器并不是万能的解决方案。由于多个容器在同一台主机上运行,并且不虚拟化硬件,因此与虚拟机相比,它们提供的隔离级别较低。这可能会引发安全或合规性问题,这在某些行业或项目中可能是需要重要考虑的因素。

但这对于当今的大多数应用程序来说并不是一个问题,所以…放心使用容器吧!


http://www.niftyadmin.cn/n/5690329.html

相关文章

QT系统学习篇(5)-信号与槽

1、信号槽的优点 信号槽的优点,松散耦合,信号发送端和接收端本身没有关联,通过connect连接将两端耦合在一起。 myPushButton *btn3new myPushButton(this);btn3->setText("我的按钮");btn3->move(200,0);//发送者 信号 &…

<<迷雾>> 第6章 加法机的诞生(3)--三比特加法电路 示例电路

用全加器组成一个三比特加法电路 info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch03-02-3-bit-adder.txt 原图 加法机的简单图示 info::操…

市场中的新兴力量与未来发展

在当前瞬息万变的全球金融市场中,期货交易以其高杠杆与灵活性,吸引了越来越多的投资者参与其中。大粤期货作为中国期货行业的新兴力量,凭借其创新的交易平台、广泛的产品线及专业的风险管理服务,迅速在市场中崭露头角。本文将介绍…

websockets库使用(基于Python)

主要参考资料: 【Python】websockets库的介绍及用法: https://blog.csdn.net/qq_53871375/article/details/135920231 python模块websockets,浏览器与服务器之间的双向通信: https://blog.csdn.net/randy521520/article/details/134752051 目录 websocke…

HTTP【网络】

文章目录 HTTPURL(Uniform Resource Lacator) HTTP协议格式HTTP的方法HTTP的状态码HTTP常见的Header HTTP 超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上 URL(Uniform Resource Lacator) 一资源定位符,也就是通常所说的…

GTest测试框架介绍

文章目录 GTest使用简单的宏断言事件机制全局使用样例局部使用样例 GTest是谷歌发布的一个跨平台的单元测试框架,主要是为了在不同平台上编写的C单元测试而生成的 提供了丰富的断言,致命和非致命的判断,参数化 GTest使用 简单的宏断言 断言分两类 一类是ASSERT系列的,如果当…

【C++】 string类的模拟实现

目录 string类各函数接口总览 构造函数 拷贝构造函数 赋值运行符重载函数 析构函数 迭代器相关函数 begin end 容量和大小相关的函数 size capacity resize reserve empty 修改字符串相关函数 push_back append operator insert erase clear swap c_str…

【redis学习篇1】redis基本常用命令

目录 redis存储数据的模式 常用基本命令 一、set 二、keys pattern keys 字符串当中携带问号 keys 字符串当中携带*号 keys 【^字母】 keys * 三、exists 四、del 五、expire 5.1 ttl命令 5.2key删除策略 5.2.1惰性删除 5.2.2定期删除 六、type key的数据类型…