各种虚拟机技术开启了云计算时代。而Docker,作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。 那虚拟机和Docker有什么区别呢,二者又各自扮演着什么角色,在开发中如何做技术选型呢,接下来我们将对这二者进行比较和探讨。 云计算随着互联网信息技术的发展,很多公司都有了搭建自己的WEB服务的需求,有WEB服务就要有服务器,而原有自建机房的方式成本很大,往往一个创业公司资产的三分之一甚至一半都拿来买机器和后续运维,这对很多很多中小公司非常不友好。 过重的资产模式让企业无法快速的部署和发展,正是因为这种困难才促使云计算的产生。在自由主义的时代,赢家通吃,往往只有互联网的巨头才有这种实力建设自己的云,提供便捷的计算、存储和运维服务。 云计算或者叫云服务的概念早已深入人心,而云计算比较被人们接受的定义由NIST(美国国家标准和技术研究院)提供,即云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。 云计算并不是真的在云上计算,而是隐喻使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务。 云计算的基本特性有以下几点:“按使用量计费”、“资源共享池”和“多租户隔离”。任何一个使用基于互联网的方法来计算,存储和开发的公司,都可以从技术上叫做云计算公司。其实云计算是分层的(如下图所示),由下到上分别是基础设施、平台、软件。 上面对云计算的划分其实主要在于对计算资源的层次分类,总结来看:
事实上,这三个领域的界线并不是像人们想象的那么清晰,它们之间存在很多交叉。 大多数云计算服务提供商也并不是只提供某一种服务。 但总体而言,当前云计算的发展IaaS是非常主流的。 随着团队协作的深入发展,CaaS和MaaS也逐渐被人们所接受。其中CaaS( Communications-as-a-Service )意思为通讯即服务(或称协作即服务),是指将传统电信能力如消息、语音、视频、会议、通信协同等封装成API或SDK通过互联网对外咖啡,提供给第三方包括企业、SME、垂直行业、CP/PS和个人开发者等,将电信能力作为服务对外提供。 CaaS也被称为云计算的第四种业务形式,目前华为已经在着手建立CaaS的生态圈。MaaS(Machine-as-a-Service)是物联网即服务,这个概念伴随着物联网产生,物联网常见的两种业务形式就是MAI和MaaS,前者关注内网和专网物联网系统,目标是消除和规避物联网信息贵大,实现包括信息系统EAI在内的大集成,后者是M2M的SaaS营运服务,是物联网的主要业务模式。 另外随着物联网业务量的增加,对数据存储和计算量需求会对云计算的能力提出更高的要求,当前的云计算也在从物联网初级阶段(简单计算中心和数据中心建设 )向高级阶段发展,出现MVNO/MMO营运商(国外已经存在多年),需要虚拟化云计算技术、SOA等技术实现物联网的泛在服务,即TaaS。 云计算的本质就是把计算资源集中起来放在网络上提供服务,虽然听着简单,但是实现起来就非常复杂了,如果想要保证业务(内部和外部客户)的平稳运行,就需要保证整个系统能够支持超大容量、超高并发、超快速度和超强安全的要求。 为了满足云计算整体系统的多层次要求,必然要推进平台工具自动化和智能化的发展,替代原有的人力运维,于是就有了各种软件和平台,负责对各种资源进行快速调度和集中管理,耳熟能详的有Openstack、VM、Docker、KVM、K8S、Hypervisor、Xen、VMware、Mesos等等。 虚拟化云计算能够发展壮大的基础是虚拟化,它是一种具体技术,指把硬件资源虚拟化,实现隔离性、可扩展性、安全性、资源可充分利用等特点的产品。 因为要对物理资源进行管理,实现弹性伸缩,就必须把所有资源进行池化,可以像水一样对外可度量地进行服务。 虚拟化的目的就是逻辑表示资源,摆脱物理限制的约束,通过再系统中添加已虚拟化层VMM,将下层HostOS资源封装,抽象成另一种形式的资源,提供给上层GuestOS使用。 虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象成一份。 通过虚拟化技术实现的虚拟机一般被称之为GuestOS(客户),而作为GuestOS载体的物理主机称之为HostOS(宿主)。 维基百科列举的虚拟化技术有超过60中,基于X86(CISC)体系的超过50种,也有基于RISC体系的。 虚拟化技术是一种很宽泛的概念,不可以等同于虚拟机。 虚拟化是在一台物理机上运行多台“虚拟服务器”,即虚拟机(VM,Virtual Machine)。 虚拟机是满足以下条件的OS:由VMM提供的高效(>80%)、独立的计算机系统 、拥有自己的虚拟硬件(CPU、内存、网络设备、存储设备) 、对于上层软件,虚拟机就是真实的机器 、Virtual Machine Monitor 。当前虚拟化有五种主流技术,分别是CPU虚拟化、网络虚拟化、服务器虚拟化、存储虚拟化和应用虚拟化,这里不展开讲了,有兴趣的同学请阅读文章《虚拟化技术详解》。(https://blog.csdn.net/gui951753/article/details/81045508) 现在市场上最常见的虚拟化软件有VMWare workstation(VMWare)、VirtualBox(Oracle)、Hyper-V(Microsoft)、KVM(Redhat)、Xen等,这些软件统称之为VMM(Virtual Machine Monitor),使用不同的虚拟化技术实现。这里虚拟化软件就是大名鼎鼎的Hypervisor,即虚拟机监视器,它不是一个具体的软件,而是一类软件的统称。 Hypervisor可以划分为两类, 一种hypervisor执行运行在物理机上,虚拟机在hypervisor之上运行; 另一种物理机上要安装正常的操作系统,然后在操作系统上安装hypervisor,生成和管理虚拟机。 大部分同学比较熟悉的Hypervisor肯定是VMware了,但是真正厉害的是KVM(Kernel-based Virtual Machine),即基于Linux内核的虚拟机,它提供的虚拟化更为底层,可以模拟CPU的运行,虽然用户交互不友好,但是仍然是目前最受欢迎也最热门的虚拟化解决方案。 嗯这里跟Windows和Linux一样都是开源和闭源之争,VMware这家公司在云计算虚拟化阶段,买了很多很多钱,因为VMware很贵,而有闭源所以就会有开源,然后就有大佬写了两个开源虚拟化软件,分别是Xen和KVM,所以每个程序员都要感谢情怀。 有了虚拟机可以提供给用户弹性伸缩的资源,我们就可以通过调度(池化或云化)给用户提供基础的云服务了,比如IaaS。而为了更好地管理虚拟机,就出现了OpenStack这样的云管理平台,当然也有很多其他的综合应用平台,如cloudstack、zstack等等。这里大家应该可以更好地理解虚拟化是云计算的基础了吧。 容器化在虚拟化的使用过程中,懒惰的人类发现了虚拟化的缺点,就是重。 有时候只是运行一个小程序就需要建立虚拟机,操作费时费时还占用资源,而且平时迁移服务也很麻烦。沉重的压力让人透不过气。。。 当然这个重是相对的,但是人嘛,总是得陇望蜀、贪心不足,也正是这些推动着我们不断进步,于是我们有了容器化。容器本身也是一种虚拟化,不过是更为“轻量级”的虚拟化,它们本质的区别在于:虚拟机是操作系统级别的资源隔离,而容器是进程级别的资源隔离。 通过对比二者的架构图,我们可以看到每个虚拟机都有一个独立的Kernel内核,而容器只有一个操作系统,只有一个独立的Kernel。直观地对比容器和虚拟机: 相比较虚拟机,容器化的优势显而易见:
而当前非常火的Docker就是创建容器的工具,是应用容器引擎。 和管理虚拟机需要OpenStack平台一样,有了Docker创建和管理容器,我们还需要对容器进行编排,这就有了K8S(Kubernetes, 这个神奇的缩写源于K和S之间有8个字母 )。 K8S是一个容器集群管理系统,主要用来做容器编排,包括启动容器、自动化部署、扩展和管理、回收容器,简单讲,K8S类似容器的保姆,负责管理容器在哪个机器上运行,监控容器是否存在问题,控制容器和外界的通信等等。 当然也有很多其他容器管理平台,如Compose、Marathon、Swarm、Mesos等。Docker和K8S已经来到应用层,不再关注硬件物理设施,属于PaaS了。有了容器,云计算PaaS层对于用户自身应用的自动部署才变得快速而优雅。 近两年,随着容器市场的不断成熟和多元化发展,Docker已出现了很多替代方案,如CoreOS rkt、Mesos、LXC、OpenVZ、Containerd等。这种替代方案使得Docker在容器市场的占有份额出现下降,17年99%到18年83%,大家称这种现象为去Docker化,这种趋势主要是Docker在某些特殊应用场景下,优越性不够明显。 欢迎转载,转载请注明出处。 北凉柿子的博客:http://www./ |
|