应用部署策略 – 虚拟机 vs. 容器





4.00/5 (5投票s)
本文的范围是比较我们的应用程序部署用例可用的各种部署模型。本文假设读者对虚拟机、容器和Hypervisor有基本了解。
1. 引言
有多种技术可用于将应用程序部署到生产环境,为特定用例选择正确的策略是一项重要决定。在本文中,我们将主要关注为我们内部构建的应用程序选择正确的部署模型。
2. 部署用例
让我们考虑两个应用程序:文件下载器 和文件处理器。功能细节在下表中描述
请注意,我们有一个物理服务器,配备100GB HDD、16GB RAM和4核处理器。
我们的目标是将这两个应用程序部署到此服务器上,以优化基础设施利用率并提高性能。
3. 部署选项
下图显示了我们可以使用的各种部署选项。
3.1 单服务器
在此选项中,两个应用程序都部署在可用服务器上。
3.2 虚拟机
在此选项中,我们将使用Hypervisor将可用服务器划分为两个虚拟机。Hypervisor,也称为虚拟机监视器/Supervisor,是一个创建和运行虚拟机的进程。Hypervisor允许一台主机计算机通过虚拟共享其资源(如内存和进程)来支持多个客户VM。
Hypervisor有两种类型,如下所示:
类型1 - 直接运行在系统硬件上,例如macOS的Hyper Kit,Windows的Hyper-V和Linux的KVM。
类型2(托管) - 运行在提供虚拟化服务的宿主操作系统上。例如:VirtualBox和VMWare
上图使用了类型1 Hypervisor。
每个VM都有客户操作系统,我们计划将文件下载器部署在VM1中,将文件处理器部署在VM2中。
由于文件下载器应用程序消耗更多内存,因此我们需要为VM1分配比VM2更高的内存限制。
由于文件处理器应用程序消耗更多处理器时间,因此我们需要为VM2分配比VM1更高的CPU核心限制。
这样,我们就可以最大限度地利用服务器资源。
3.3 容器
在此选项中,我们将在现有操作系统之上安装容器引擎(例如,Docker Engine)。我们将创建两个容器来托管文件下载器和文件处理器应用程序。
由于文件下载器应用程序消耗更多内存,因此我们需要为容器1分配比容器2更高的内存限制。
由于文件处理器应用程序消耗更多处理器时间,因此我们需要为容器2分配比容器1更高的CPU核心限制。
这样,我们就可以最大限度地利用服务器资源。
4. 资源利用率比较
下图显示了我们到目前为止讨论过的所有三种部署选项的资源利用率图表。
根据利用率图表,我们注意到以下观察结果:
- 单服务器部署性能较差,因为两个应用程序共享相同的资源。
- 虚拟机和容器部署都提供了近乎相等的性能。
- 虚拟机部署消耗的资源更多。
- 单服务器和容器部署都提供了近乎相等的资源利用率。
5. 虚拟机与容器的比较
下表显示了基于虚拟机和容器的部署之间的比较。
序号 | 虚拟机 | 容器 |
1 | 重量级,性能有限 | 轻量级,性能提升 |
2 | 每个VM都运行自己的操作系统,平均服务器上无法运行更多VM | 所有容器共享宿主机的内核,平均服务器上可以运行更多容器 |
3 | 虚拟机启动需要几分钟 | 容器启动需要几毫秒 |
4 | 资源浪费 – 每个VM需要更多的空间和内存(以GB为单位) | 节省资源 - 每个容器需要更少的空间和内存(以MB为单位) |
5 | 硬件级虚拟化,需要更多的操作系统许可证和成本 | 操作系统虚拟化,只需要一个操作系统许可证,降低成本 |
6 | VM是物理文件(.VMX和.VMDK)的运行实例 | Container是Container Image的运行实例 |
7 | 每个VM都有自己的虚拟网卡、IP和端口 | 每个容器都有自己的虚拟网卡、IP和端口 |
8 | 虚拟机是可扩展的,并配有专用磁盘空间、核心和内存分配 | 容器是可扩展的,并配有专用磁盘空间、核心和内存分配 |
9 | 一个VM中的进程无法从另一个VM中看到 | 一个容器中的进程无法从另一个容器中看到 |
10 | 每个VM都有自己的根文件系统 | 每个容器都有自己的根文件系统 |
关注点
基于各种部署选项、资源利用率图表以及VM和容器的比较,对于我们的用例,基于容器的部署选项为我们提供了具有良好性能的成本效益解决方案。
在下一篇文章中,我将介绍Docker容器,并提供详细的部署架构概述。
历史
- 2019年2月19日:初稿