云计算和虚拟化基础概念

180Ku6.png


一、虚拟化

虚拟化技术是一种资源管理优化技术,它是将计算机的各种物理资源(CPU、内存、磁盘、网卡)

等I/O设备予以抽象、转换,然后呈现出来一个可供分割并任意组合为一个或多个(虚拟)计算机的配置

环境。虚拟化技术打破了计算机内部实体结构间不可切割的障碍,使得用户以比原来更好的方式来应用

这些计算机的硬件资源。

虚拟化是一个广义的术语,具体可细分为以下三种:

  • 平台虚拟化(Platform Virtualization):操作系统级别的虚拟化

  • 资源虚拟化(Resouce Virtualization):特定系统资源的虚拟化,如CPU、内存、存储或者网络等

  • 应用程序虚拟化(Applocation Virtualization) :仿真、模拟和解释技术等,如Java虚拟机

二、虚拟机

虚拟机是一台计算机转换为多台计算机的基于物理硬件的抽象。虚拟机管理程序允许多个虚拟机

在单台计算机上运行,它可以创建虚拟化硬件,其中包括虚拟磁盘、虚拟网络接口、虚拟CPU等,同

时它还具有可以与此虚拟硬件通信的内核。每个虚拟机都包含着操作系统、应用程序,这些文件可能

占用数十GB的存储空间。管理程序可以进行托管,这就意味着它是可以在主机操作系统上运行的软件、

还可以运行在裸机上,即直接在机器硬件上运行,替换真实的操作系统。

虚拟机可以分为系统虚拟机或者是过程虚拟机,我们通常所说的是系统虚拟机,它是通过主机硬件

来模拟整个操作系统的;而“进程虚拟机”是用于模拟执行单个进程的编程环境的,Java虚拟机便是这样

180njx.png

三、容器

1.问题背景

在过去的几年中,让运维人员最为头疼就是需要为各种迥异的开发语言安装相应的运行环境。

但是Docker的横空出现解决了这一问题,Docker提供了让开发工程师可以将应用和依赖封装到一

个可移植的容器中的能力,这种集装箱式的封装方式,让运维人员和开发人员都能够以Docker所

提供的镜像分发的标准化方式发布应用,打破了异构语言在团队中形成的壁垒

2.容器简介

容器是包含应用程序代码、配置和依赖关系的软件包;它是通过在操作系统级别进行虚拟

化来使应用程序可移植,从而创建基于内核的隔离的封装系统。容器化运行的应用程序可以放在

任何地方,消除了依赖关系

当然,作为独立的单元,容器能够在任何操作系统,如Linux、Mac、甚至像Windows这样

的非UNIX系统中运行。容器还可充当标准化的工作或者计算单元,比如每个容器运行单个Web

服务器、数据库的分片或者单个Spark工作程序,只需要扩展容器的数量就能够便捷地扩展应用

每个容器都有一个固定的资源配置(CPU、内存、线程数),并且扩展应用程序只需要扩展

容器的数量即可。容器也是实现微服务架构的一个很好的工具,每个微服务只是一组协作容器

3.容器和虚拟机的区别

容器和虚拟机具有相似的资源隔离和分配优势,但具体功能不同,因为容器虚拟化了操作系统,

而不是硬件;容器的创建和停止十分迅速,而且对自身资源的需求十分有限,远远低于虚拟机,很

很多时候直接把容器当做应用本身也是没有任何问题的。传统意义上如果说在一台主机上运行一百

个虚拟机那肯定是天方夜谭,可是一台主机运行上千个容器却已经成为了现实

二者关键性能的区别如下表格:

1GLolj.jpg

容器和虚拟机架构的区别:

180e3R.png

4.Docker:典型容器的代表

容器化技术的发展有很长的历史了,Docker站在巨人的肩膀上进一步优化了容器的使用体验,

提供了各种容器的管理工具让用户无需再关注底层的操作,可以简单明了地管理和使用容器。这

就使得它众多容器中脱颖而出

我们可以将Docker容器理解为一种沙盒(Sandbox)吗,每个容器内运行一个应用,不同的

之间相互隔离,容器之间也可以建立快速通信的机制。Docker的主要目标是"Build,Ship and

Run Any,Anywhere",即通过对应用组件的封装(Packaging)、分发(Distribution)、部署

(Deployment)和运行(Runtime)等生命周期的管理,达到应用组件级别的“一次封装,到处运

行”,这里的应用组件,既可以是一个Web应用,也可以是一整套数据库服务,甚至是一个操作系

统或编译器

四、容器编排

虚拟化技术的成熟和分布式架构的普及,使得部署、管理和运行应用的云平台越来越多地被提

及,容器的出现,使原有的基于虚拟机的云主机应用,彻底转变为更加灵活和轻量的容器与编排调

度的云平台应用。

然而容器单元的分散又给运维人员增加了较大的负担,与此同时,Kubernetes、Mesos和Swarm等

为云原生应用提供了强有力的编排和调度能力,它们都是云平台上的分布式操作系统。容器编排实现了

自动化部署应用程序的过程。像Kubernetes这样的容器管理和编排的引擎,使用户能够指导容器的部署

并自动执行更新,运行状况监视和故障转移过程

基础结构的发展历程如下图所示:

180MDK.png