架构师之路 - 虚拟化技术与容器Docker

简介: 架构师之路 - 虚拟化技术与容器Docker

温馨提示:本文大概 3000 字,阅读需要 5 分钟。


通常架构师们为了提高系统及硬件资源的利用率引入了虚拟化技术。


虚拟化是一种资源管理技术,它可以把各种实体资源抽像后再分隔,从而打破实体结构的限制,最大程度的提高资源的利用率。

今天我们来聊一下传统虚拟化技术和以Docker为代表的容器技术。


虚拟化


虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也叫虚拟机(VM,Virtual Machine)。

虚拟化出现的初衷主要是为了减少物理服务器的数量,提高服务器资源利用率。利用虚拟化技术将物理服务器隔离成多个小的虚拟服务器并提供部署能力。

简单来说,虚拟化可以为我们的工作带来以下几种便利:

  • 减少物理服务器数量
  • 提高资源利用率
  • 可实现环境隔离
  • 可实现资源隔离
  • 虚拟机可实现分钟级交付
  • 虚拟机的配件可动态扩容
  • 虚拟机的计算节点可动态迁移

虚拟化技术

我们主要使用Hypervisor,也叫做VMM(Virtual Machine Monitor,虚拟机监视器)来实现服务器的虚拟化,Hypervisor它不是一款具体的软件,而是一类软件的统称。像VMware、KVM、Xen、Virtual Box,都属于Hypervisor。

VMware大家应该很熟悉,就是VMware Workstation。学习Linux的话,很多人都是在windows系统下安装WMware,然后创建Linux虚拟机。

Linux服务器一般是使用KVM作为虚拟化工具,KVM (全称是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案,包含一个可加载的内核模块 kvm.ko 提供和虚拟化核心架构和处理器规范模块。


虚拟化平台架构

虚拟化平台主要有以下三种架构:

  • 本地存储
  • 物理机上运行虚拟机,虚拟机的盘在物理机的磁盘上
  • 集中存储
  • 运行虚拟机的物理机,虚拟机的磁盘在共享存储中。在集中存储架构中如果一台host挂了,VM可以通过平台的设置去另外一台物理机上运行,这就实现了虚拟机的动态漂移。
  • 分布式存储
  • 分布式存储架构中虚拟机的磁盘位于所有服务器上,这种架构也叫“计算存储一体化”,虚拟机的磁盘会打散成很多块块,这些块块分布于集群内所有的机器上,这样就实现了存储能力的最大化。虚拟机的IO不再受限于单机的磁盘,而是利用到整个集群里磁盘的能力。削峰填谷、提高了虚拟机的IO能力,而且通过冗余保障了数据的安全性。这种架构的缺点是严重依赖网络稳定性,一旦网络挂了,所有的虚拟机就会全挂。

虚拟化平台的高可用机制

虚拟化平台的高可用机制是指虚拟机所在的物理机挂了后可以将虚拟机快速切换到另外一台物理机运行。高可用的前提条件是物理机挂了,对于虚拟机内部的故障并没有检测机制,属于不完整的高可用方案,主要是基于以下两个目标:

  • 虚拟机计算节点动态迁移
  • 虚拟机磁盘动态迁移

虚拟化原则

虚拟机的出现是为了使一些大的计算资源分割成许多小的资源然后灵活调配 ,遵循的是分而治之的原则,如果一个虚拟机申请了物理机超过一半的资源就违背了这个原则,那样还不如直接使用物理机来的干脆,所以我们在使用虚拟化的时候一般要遵循以下几个原则:

  • 某一虚拟机所占资源不超过宿主机的40%
  • 不承载磁盘IO密集型组件(数据库,消息队列,搜索引擎)
  • 以双路2U服务器来说,整合比控制在1:4 – 1:10较为理想
  • CPU可一定程度上超量分配,最多可以超分一倍左右
  • 内存一般不可超量分配

Docker容器


在使用虚拟化一段时间后,发现它存在一些问题:

  • 虚拟机的系统层会占用比较多物理机的资源,需要更进一步提高服务器的资源利用率
  • 当需要迁移虚拟机服务程序时,需要迁移整个虚拟机,迁移流程复杂

为了解决这些问题,我们就引入了 容器。而大家常听说的 Docker,就是创建容器的工具,是应用容器引擎。容器也是虚拟化,但是属于“轻量级”的虚拟化。它的目的和虚拟机一样,都是为了创造“隔离环境”。但是,它又和虚拟机有很大的不同——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。

虚拟化 vs 容器


虚拟化 VS 容器

相比于传统的虚拟机,Docker的优势很明显,它启动时间很快,是秒级,而且对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB,而容器只需要MB级甚至KB级。

我们可以通过下面这张图来看虚拟化与容器之间的性能、资源利用率差距,非常明显

资源利用率对比


容器编排

利用Docker可以很方便的创建容器,但是当容器数量达到一定规模,就需要编排工具去管理,就是容器生命周期管理工具。

容器编排工具提供调度和管理集群的技术,提供用于基于容器应用可扩展性的基本机制。这些工具使用容器服务,并编排他们以决定容器之间如何进行交互。

容器编排工具很多,有Docker Swarm,Kubernetes,Mesos,Rancher,下面用一张图来对比下这些容器编排工具的特点及各自的优势。

容器编排技术


小结


今天主要对虚拟化技术及容器做了个简单的梳理,虚拟化和容器初衷与目的都是为了更好的提高资源利用率,至于两者之间的不同大家要务必记住一点:虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。


 

如果本文对你有帮助,别忘记三连啊,点赞、转发、评论咱们下期见!

目录
相关文章
|
1月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
231 77
|
2天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
39 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
13天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
86 35
|
13天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
1天前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
37 12
|
19天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
95 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
29 10
|
24天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
50 3
实战~如何组织一个多容器项目docker-compose
|
14天前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。