目录
云计算从业人员应该会经常看到三个非常相似的缩写,IaaS、PaaS和SaaS。他们的含义分别是基础设施即服务、平台即服务和软件即服务。这是云计算的三种服务模式,他们共同构成了如今整个云计算市场能提供的服务类型,但是很多人只是知道他们的名称,并不了解其具体的服务模式,本文来聊聊他们的区别和未来。

一、SaaS
SaaS 是 Software-as-a-Service(软件即服务)。如果把云计算理解为一栋大楼,软件即服务位于“云计算大楼”的顶部,是云计算市场中最大的细分市场。简单来讲就是把我们日常在本地用到的程序、软件放到云上运行。例如微软推出的Office365,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。此外CRM、ERP、eHR等系统也都开始SaaS化。
这一类型的云服务主要的优势是功能强大和协同工作。像一些大数据分析软件需要强大的算力支持,而本地服务器并不能支持如此庞大的工作量,因此SaaS模式的软件就是最好的选择;而对于那些部门分散的起来而言,SaaS软件很好的解决了协同办公的问题,例如国内设计工作者熟悉的“蓝湖”就是这类软件的代表。
不过国内还是很少有专门提供SaaS服务的云服务商,曾经在这方面投入很多的阿里巴巴也在2010年放弃SaaS,未来这一方面的需求和市场还是非常庞大的。
二、PaaS
PaaS 是 Platform-as-a-Service 的缩写,意思是平台即服务。 把服务器平台作为一种服务提供的 商业模式。通过网络进行程序提供的服务称之为 SaaS(Software as a Service),而云计算时代相 应的服务器平台或者开发环境作为服务进行提供就成为了 PaaS(Platform as a Service)。
这是“云计算大楼”的中层部分,通过其名称可以知道这是为用户提供一个平台来开展工作。具体来说PaaS是为用户提供一整套工具软件,可以让开发者便捷的开发程序应用,不用花费巨资购置整套软件,只需要对软件的使用付费即可。并且也不需要担心软件的配置维护等问题,这些云服务商都会代替用户来解决,用户可以更专注的投入研发工作。这种服务还有一个巨大的优势是“定制化”,企业可以要求云服务商提供适合本公司实际的工具套装平台,在精确匹配的平台上开展研发工作,不仅能节省企业资金,还能有效提升开发效率,让分散的部门间的合作变得更加容易,缩短研发周期,推进企业的发展。
三、IaaS
IaaS(Infrastructure as a Service),即基础设施即服务。IaaS(基础设施)就是这栋大楼的底层部分。这也是目前各个云服务商提供的最多的服务。在IaaS出现之前,企业或者网站站长想要做一个网站出来,必须先购买服务器,然后还需要有专门的场地放置服务器,并对其做好维护,才能让业务正常的运行起来。
而IaaS的出现,让用户可以直接使用云服务商提供的服务器、存储和网络,大大节省了场地费用和维护费用。这也是云计算最基础的服务。最早推出这一服务的是亚马逊AWS,之后国内外厂商纷纷加入,目前国内比较好的云服务商有阿里云、腾讯云、新睿云等。

四、Docker
1)概念
| Docker 镜像 (Images) | Docker 镜像是用于创建 Docker 容器的模板。 |
|
Docker 容器 (Container) |
容器是独立运行的一个或一组应用 |
|
Docker 客户端 (Client) |
Docker 客户端通过命令行或者其他工具使用Docker API与Docker的守护进程进行通信。 |
|
Docker 主机 (Host) |
一个物理或虚拟的机器用于执行Docker守护进程和容器。 |
|
Docker 仓库 (Registry) |
Docker 仓库用于保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了庞大的镜像集合供使用 |
|
Docker Machine |
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应平台上安装Docker,比如VirtualBox、Digital Ocean、Microsoft Azure。 |
Docker的出现一定是因为目前的后端在开发和运维阶段确实需要一种虚拟化技术解决开发环境和生产环境一致的问题,通过Docker我们可以将运行程序的环境也纳入到版本控制中,排除因为环境造成不同运行结果的可能。但是上述需求虽然推动了虚拟化技术的产生,但是如果没有合适的底层技术支撑,那么我们仍然得不到一个完美的产品。本文剩下的内容会介绍几种Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。

2)NameSpaces
命名空间是Linux为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信资源等的方法。在日常使用Linux或者MacOS时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器启动了多个服务,这些服务其实会相互影响的,每一个服务都能 看到其他服务的进程,也可以访问宿主机器上的任意文件,这是很多时候我们都不愿意看到的, 我们更希望运行在同一台机器上的不同服务能做到完全隔离,就像运行在多台不同的机器上一样。
Linux 的命名空间机制提供了以下七种不同的命名空间,包括 CLONE_NEWCGROUP、CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、 CLONE_NEWUSER 和 CLONE_NEWUTS,通过这七个选项我们能在创建新的进程时设置新进程 应该在哪些资源上与宿主机器进行隔离。
3)进程(CLONE_NEWPID 实现的进程隔离)
docker 创建新进程时传入 CLONE_NEWPID 实现的进程隔离,也就是使用 Linux 的命名空间实现进程的隔离,Docker 容器内部的任意进程都对宿主机器的进程一无所知。当我们每次运行 docker run 或者 docker start 时,都会在创建一个用于设置进程间隔离的 Spec,同时会设置进程相关的命名空间,还会设置与用户、网络、IPC 以及 UTS 相关的命名空间,所有命名空间相关 的设置 Spec 最后都会作为 Create 函数的入参在创建新的容器时进行设置。
4)Libnetwork 与网络隔离
如果 Docker 的容器通过 Linux 的命名空间完成了与宿主机进程的网络隔离,但是却有没有办法通过宿主机的网络与整个互联网相连,就会产生很多限制,所以 Docker 虽然可以通过命名空间创建一个隔离的网络环境,但是 Docker 中的服务仍然需要与外界相连才能发挥作用。Docker 整个网络部分的功能都是通过 Docker 拆分出来的 libnetwork 实现的,它提供了一个连接不同容器的实现,同时也能够为应用给出一个能够提供一致的编程接口和网络层抽象的容器网络模型。
libnetwork 中最重要的概念,容器网络模型由以下的几个主要组件组成,分别是 Sandbox、 Endpoint 和 Network。在容器网络模型中,每一个容器内部都包含一个Sandbox,其中存储着当前容器的网络栈配置,包括容器的接口、路由表和 DNS 设置,Linux 使用网络命名空间实现这个 Sandbox,每一个 Sandbox 中都可能会有一个或多个 Endpoint,在 Linux 上就是一个虚拟的网卡 veth,Sandbox 通过 Endpoint 加入到对应的网络中,这里的网络可能就是我们在上面提到的 Linux 网桥或者 VLAN。
每一个使用 docker run 启动的容器其实都具有单独的网络命名空间,Docker 为我们提供了四种不同 的网络模式,Host、Container、None 和 Bridge 模式。

在这一部分,我们将介绍 Docker 默认的网络设置模式:网桥模式。在这种模式下,除了分配隔离的网 络命名空间之外,Docker 还会为所有的容器设置 IP 地址。当 Docker 服务器在主机上启动之后会创建 新的虚拟网桥 docker0,随后在该主机上启动的全部服务在默认情况下都与该网桥相连。在默认情况下,
每一个容器在创建时都会创建一对虚拟网卡,两个虚拟网卡组成了数据的通道,其中一个会放在创建的 容器中,会加入到名为 docker0 网桥中。

5)资源隔离与 CGroups
Control Groups(简称 CGroups)能够隔离宿主机器上的物理资源,例如 CPU、内存、磁盘 I/O 和网 络带宽。每一个 CGroup 都是一组被相同的标准和参数限制的进程,不同的 CGroup 之间是有层级关 系的,也就是说它们之间可以从父类继承一些用于限制资源使用的标准和参数。
6)镜像与 UnionFS
Linux 的命名空间和控制组分别解决了不同资源隔离的问题,前者解决了进程、网络以及文件系统 的隔离,后者实现了 CPU、内存等资源的隔离,但是在 Docker 中还有另一个非常重要的问题需 要解决 – 也就是镜像。
Docker 镜像其实本质就是一个压缩包,我们可以使用命令将一个 Docker 镜像中的文件导出,你 可以看到这个镜像中的目录结构与 Linux 操作系统的根目录中的内容并没有太多的区别,可以说 Docker 镜像就是一个文件。
7)存储驱动
容器和镜像的区别就在于,所有的镜像都是只读的,而每一个容器其实等于镜像加上一个可读写的层,也就是同一个镜像可以对应多个容器。UnionFS 其实是一种为 Linux 操作系统设计的用于把多个文件系统『联合』到同一个挂载点的文 件系统服务。而 AUFS 即 Advanced UnionFS 其实就是 UnionFS 的升级版,它能够提供更优秀 的性能和效率。AUFS 只是 Docker 使用的存储驱动的一种,除了 AUFS 之外,Docker 还支持了不同的存储驱动, 包括 aufs、devicemapper、overlay2、zfs 和 vfs 等等,在最新的 Docker 中。overlay2 取代了 aufs 成为了推荐的存储驱动,但是在没有 overlay2 驱动的机器上仍然会使用 aufs 作为 Docker 的默认驱动。
五、OpenStack
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223521.html原文链接:https://javaforall.net
