分享

浅谈云计算、虚拟化和容器化

 罗宋汤的味道 2019-08-17

各种虚拟机技术开启了云计算时代。而Docker,作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。

那虚拟机和Docker有什么区别呢,二者又各自扮演着什么角色,在开发中如何做技术选型呢,接下来我们将对这二者进行比较和探讨。

云计算

随着互联网信息技术的发展,很多公司都有了搭建自己的WEB服务的需求,有WEB服务就要有服务器,而原有自建机房的方式成本很大,往往一个创业公司资产的三分之一甚至一半都拿来买机器和后续运维,这对很多很多中小公司非常不友好。

过重的资产模式让企业无法快速的部署和发展,正是因为这种困难才促使云计算的产生。在自由主义的时代,赢家通吃,往往只有互联网的巨头才有这种实力建设自己的云,提供便捷的计算、存储和运维服务。

云计算或者叫云服务的概念早已深入人心,而云计算比较被人们接受的定义由NIST(美国国家标准和技术研究院)提供,即云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。

云计算并不是真的在云上计算,而是隐喻使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务。

云计算的基本特性有以下几点:“按使用量计费”、“资源共享池”和“多租户隔离”。任何一个使用基于互联网的方法来计算,存储和开发的公司,都可以从技术上叫做云计算公司。其实云计算是分层的(如下图所示),由下到上分别是基础设施、平台、软件。

上面对云计算的划分其实主要在于对计算资源的层次分类,总结来看:

  • IaaS: 分为公有云、私有云和混合云,提供最底层的硬件资源,包括计算资源(CPU)、存储资源(内存和硬盘)、网络资源(网卡)等,通过虚拟化形成计算资源池,按需分配调度,简单讲就是租用服务器;
  • PaaS:有时也叫中间件, 主要是基于IaaS之上,简化应用的部署、运行等,提供一些通用平台软件能力,如数据挖掘、系统管理、编程模型等。借助于PaaS服务,无须过多考虑底层硬件,在构建应用时可以使用很多必要服务。公司所有开发都可以在这一层进行,节省时间和资源。PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。简单讲PaaS猪脚就是提供WEB环境的应用,通常支持PHP、Java、Python和GO语言。相比IaaS不需要自己做环境配置,但必须在云计算服务商的框架内开发,必须使用指定的开发语言、遵循平台的开发规范;

  • SaaS:安装好操作系统后还要安装具体的应用软件,如FTP服务器端软件、在线视频服务端软件,直接提供服务;之一层和普通人每天生活接触最多,大多是通过网络浏览器或应用接入,任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS;

事实上,这三个领域的界线并不是像人们想象的那么清晰,它们之间存在很多交叉。

大多数云计算服务提供商也并不是只提供某一种服务。

但总体而言,当前云计算的发展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./

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多