IaaS vs. PaaS vs. CaaS如何选择?

IaaS vs. PaaS vs. CaaS如何选择?

网络托管的技术发展很快,选择如此之多,用户很容易感到不知所措,甚至会开始质疑是否如今所用的服务,对于当前的业务和需求来讲是不是最好的选择。本文会经过如下几个服务产生的背景,分析其差别:html

  • 基础设施即服务(IaaS)linux

  • 平台即服务 (PaaS)git

  • 容器即服务(CaaS)web

 

读完本文你应该会对如下内容有充分的了解:数据库

  • 每一种服务实际上意味着什么?编程

  • 为何这种服务对你很重要?安全

  • 哪种解决方案对你来讲最有意义?服务器

 

固然这些都要根据你的实际状况考虑。网络

 

 

专用服务器/Bare Metal

网络托管服务的基础,都是塞满了服务器、交换机、路由器、存储阵列和其余网络设备的数据中心。咱们要讨论的PaaS / IaaS /CaaS是上层的东西,他们加上一层抽象层使管理更容易,并使那些过去运行缓慢或必须手动完成的任务自动化。架构

专用服务器,即咱们所知的Bare Metal有他的优缺点。

优点

  • 性能——你正在直接使用计算机,中间没有任何附加的抽象层的开销,例如虚拟化;

  • 可靠性——在没有抽象层与虚拟化的状况下更不容易出错;

  • 资源用度——你的进程不会和其它的虚拟机或进程,去竞争CPU,内存和带宽等资源。

缺陷

  • 管理困难:bare metal中没有AMI货镜像的概念,因此不能快速复制;

  • 价格:多数状况下实用bare metal须要提早为硬件付费,还要支付放机器的房租。停下这些机器并不能帮你节省开支,你须要作好预算;

  • Bare metal环境下,全部的进程和应用都运行在一样的操做系统上。出于扩展性的考虑,一般会在一台服务器上只运行一个任务,好比web服务器,数据库服务器。

 

虚拟化:让事情简单化

显然这些缺点产生的影响盖过了优势,虚拟化成了很天然的选择。

什么是虚拟化?

简单来讲,虚拟化将物理机分隔成了更小的虚拟服务器,若是你的物理机有2个双核的CPU和16G的RAM,你能够分红8个1 CPU和16GB RAM的虚拟机。

优点

  • 虚拟机能够克隆;

  • 为了安全和灾备,能够备份虚拟机镜像

缺陷

  • 使用虚拟化意味着增长了开销,并有潜在的性能下降;

  • 通常来讲,经常使用的虚拟技术有Xen,KVM,VMware和Hyper-V等,这些虚拟机的镜像并不能通用;

  • 使用虚拟机还是一项手动的工做,而且要求时间与专业知识。

 

 

从虚拟化到IaaS的质变

啥是IaaS?

  • 经过API虚拟化并管理其余人的硬件资源;

  • 编程访问计算、存储和网络资源和配置;

  • 当你须要时请求一个新的虚拟机,不须要时就中止,而且只为你使用的资源付费;

  • 将数据中心资源当作通用的资源。

根据这些特性,2006年亚马逊推出了AWS服务及其EC2的产品。

 

为何此次进化如此重要?

之前当你想要加载一个在线业务时,你必须作不少计划,以确保有数据中心和足够的服务器和存储空间来承载你的业务增加,足够的带宽来支撑你的用户流量。作这个计划不容易,特别是对于早期的、将来与发展路线都不肯定的业务。

1.开发者再也不被硬件资源所束缚:

  • 能够迅速把想法付诸实践;

  • 若是成功了,服务能轻松地随之增加;

  • 若是失败了,停掉虚拟机就没有额外的花费了。

2.数据中心变得更自动化:

  • 彻底自动化的基础设施成为现实;

  • Web基础设施能够根据需求自动扩展和收缩;

 

IaaS的诞生确实是很重要的里程碑,但随着技术的发展,人们也在想是否有更简单的使用虚拟资源的方式。『我想要一个SQL服务,你却给我一台虚拟机?』这个思考了催生了PaaS和容器技术,有趣的是,不少PaaS的提供商都运行在IaaS之上,好比最受欢迎的是Heroku运行在AWS上。同时PaaS所依赖的底层技术又是CaaS的标准交付物。

PaaS虽然简化了开发者部署和管理应用,但也向开发者隐藏了实现的细节,例如管理服务器,负载均衡,DNS等等。

PaaS减小了开发者将应用从idea到实现的时间,使那些本来须要手动的进程自动化,让开发者专一于应用的开发,从这些角度来讲,PaaS的产生是一大进步,就像从Bare Metal到IaaS的转变。

 

PaaS难以构建

PaaS之下有几个主要组件:

  • 构建系统:将代码编译为随时能够运行的格式,并将其存储起来供之后使用;

  • 应用管理数据库:追踪git修正,构建版本和应用元数据;

  • 集群调度程序:把多个服务器看成一个大的计算机,在这个计算资源池中运行构建好的应用,并保持对失败做业的检测;

  • 负载均衡:合理引流内网和外网的流量;

  • DNS自动化:当你建立或修改应用时,会自动更新记录;

  • 最重要的一点:经过FreeBSDjails,solaris zones或Linux Container来隔离用户间的应用。

最后一点也是Docker爆炸性增加的重要缘由。Linux内核对container的支持已经有一段时间,但只有某些大公司或PaaS提供商将其自动化了。好比Docker公司的前身dotCloud,当其底层的容器技术Docker开源出来,马上在社区获得了普遍关注。Docker不但使linux container的处理简单化,还提供了标准化的镜像格式。

 这个功能很是强大,由于不少公司都面临着用户爆炸性增加带来的挑战:他们但愿能摆脱超长的发布周期,达到持续部署;他们想采用面向软件的架构或微服务架构;他们但愿实现自动部署和测试新代码,而且在流量激增时尽量作到收放自如。但问题是没有资源或必要的经验向开发团队提供该功能,因此他们将这些需求外包给了PaaS平台。不幸的是当你这样作的同时也放弃了不少控制权,花了不少钱,却被绑定在了PaaS供应商之上。

 最好的选择是在你本身的数据中心或者云帐户中运行一个PaaS,在那里你拥有彻底控制权,而且你的团队能够直接部署应用,建立一个真正的DevOps文化。Docker,和其驱动的标准化的生态系统正在大步前进使之成为可能。

 

容器托管平台/CaaS

那么CaaS是什么呢?首先,上一段中PaaS所具有的功能CaaS都有:自动化构建系统,集群调度,负载均衡,自动DNS,服务发现等,也就是说你能在CaaS上使用容器,托管复杂的分布式多层应用。

Docker镜像取代了janky buildpacks,很容易进行构建与测试,能够在部署以前确保它们能工做;同时再也不局限于PaaS供应商提供的集成功能,任何能构建成Docker镜像的应用都能在其上运行。

 因为Docker的可移植性,你的应用更容易在各个CaaS平台间迁移。你再也不纠结于为一个复杂问题创建解决方案,或者耗费人力学习某个供应商的自动部署工具。

 可是选择适合的Docker托管平台有一些须要注意的事:

  • 目前已经有了一些CaaS供应商,你可能不知道选哪一个。可是只要你的应用Docker化了,就很容易去测试他们;简单到什么程度?读一读灵雀云用户文档你就知道了:http://docs.alauda.cn/tutorial/introduction.html

  • 像Triton或ECS等托管提供商的解决方案,依然会将你绑定,而Docker最使人兴奋的优点偏偏在于它的可移植性;

  • 许多CaaS解决方案的整个管理系统都运行在他们本身的硬件上,在你的服务器上只运行一个代理链接到他们API上。因此若是他们的硬件宕机了,你的服务器集群也会被停掉;灵雀云集成了AWS、Azure、金山云等多个IaaS平台,提供跨云部署、迁移和容灾服务,保证了某个IaaS宕机状况下,您的服务不间断;

  • 那些容许你在防火墙以后运行整个系统的解决方案是复杂的,而且会有不少碎片任务,这须要一个团队来管理和升级;

  • 而那些比较简单的,能够运行在防火墙以后的解决方案,有时会不过重视高可用性;

 

 

值得从PaaS到CaaS吗?

若是你已经使用了PaaS,还应该花时间学习Docker吗?你的团队会赞成你的想法吗?你应该花时间学习一个新的容器托管平台吗?

答案是确定的,由于PaaS提供商正在向CaaS转变,不要抗拒容器的这波浪潮,顺应它!

  • CaaS比PaaS更省钱

例如,一个标准的2X的Heroku实例,提供的是一个普通的CPU和1 GB的RAM,要花费320元/月;

而在灵雀云,运行1 CPU,1GB RAM的Docker容器,只须要58元/月。

  • 你有更多的权限来运行你的服务,可以从更深的层次理解你的应用是如何运行的

  • 你能享受到PaaS不能提供的Docker的优点

团队中每一个开发人员都能在本地拥有一个和生产环境同样的测试环境,测试他们的代码,而后构建它。只要测试经过了,就能保证在生产环境经过,这是巨大的效率提高。

  • 能够选择最好的工具来工做,而不是从PaaS供应商已经集成的工具中选择。