【云计算】CaaS、laaS平台集成解决方案


PS:之前把自己的整站迁移到了阿里云ECS上,在重新配置laaS的过程中,遇到了一些基础工作流建立的问题,包括裸机的自动化运维配置,持续集成配置,这一套整下来,花费的时间成本和人力成本很多,想到以后如果每迁移一次整站,都需要经历这样一遍过程,确实恼火。基于之前Duwear的ROM持续集成工作经验,想在自己的ECS上引入Docker技术,并创建自己的Docker镜像,所以就有了Caas平台Daocloud的邂逅。

常见云平台

laaS平台

Infrastructure-as-a-Service

第一层叫做IaaS,有时候也叫做Hardware-as-a-Service,几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。

但是现在有IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。

一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat.不过这些公司又都有自己的专长,比如Amazon和微软给你提供的不只是IaaS,他们还会将其计算能力出租给你来host你的网站。

PaaS平台

Platform-as-a-Service

第二层就是所谓的PaaS,某些时候也叫做中间件。你公司所有的开发都可以在这一层进行,节省了时间和资源。

PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。

一些大的PaaS提供者有BAE,SAE,Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近兴起的公司有AppFog, Mendix 和 Standing Cloud。

SaaS平台

Software-as-a-Service

第三层也就是所谓SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS了。

你消费的服务完全是从网页如Netflix, MOG, Google Apps, Box.net, Dropbox或者苹果的iCloud、百度云盘等那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。

比较

如果你采用IaaS服务,那么意味着你就不用自己买服务器了,随便在哪家购买虚拟机,但是还是需要自己装服务器软件。

而如果你采用PaaS的服务,那么意味着你既不需要买服务器,也不需要自己装服务器软件,只需要自己开发网站程序。

如果你再进一步,购买某些在线论坛或者在线网店的服务,这意味着你也不用自己开发网站程序,只需要使用它们开发好的程序,而且他们会负责程序的升级、维护、增加服务器等,而你只需要专心运营即可,此即为SaaS。

BaaS平台

Backend as a Service

主要为移动应用开发者提供整合云后端的边界服务。

技术上讲,BaaS关键问题是要保持REST Web服务模型接口的优势。这些接口呈现出一个简单的PUT或GET事务处理模式,但并不会一直保持在调用的处理状态中。多数PUT/GET方法显示出了他们自己的服务API,作为RESTful 接口,这些接口使用XML数据结构来接收和响应。XML处理是一件琐碎的事情,然而,在每个目标移动设备中,接受一个简单的数据结构或者提供编程逻辑来重复使用该界面都会有所帮助。
创建一个BaaS服务,拥有正确功能级别的粒度,也同样重要。移动用户通常希望设备能够快速响应一个请求,而且有一些接口时间问题:将具有较长执行时间的复杂功能转移到一个单独的服务上是不合适的。因为RESTful接口预计是无状态的,因此在把复杂功能转化为一系列可以单独使用的元素时要高度注意,但是当需要时这些功能又可以聚集到一起。每个请求必须是独立的,并且可以将数据反馈给特定的需求。如果稍后还会需求,就必须将其存储到设备中,或者通过设备返回、维护并更新。

国内比较典型的厂商有:AppCan、Bmob、Leancloud等

CaaS平台

Container as a Service

如果大家知道virtualization很多人都会想到虚拟机。然而实现virtualization的方法不只有虚拟机。现在很火的容器就是另外一种实现virtualization的方法,也被很多公司执行。容器拥有等同于虚拟机资源隔离与配置的好处,但是其结构方法会比虚拟机更加便捷与高效,并更加节约资源。就拿Docker来说(一个容器技术的实现,更加易用,有兴趣的朋友可以自己去他们的官网看看),是在服务器的操作系统上安装docker engine,从而通过命名空间隔离运行很多进程,每一个进程就是所谓的一个容器,这些容器可以运行你的服务,最终维持一个树形进程列表从而得到一定的隔离性(虽然不完美,但其实虚拟机被攻破的事也不少)。这些容器技术的实现其实最早来自apache foundation service的开源项目。

容器这么火了自然也要搬到云上来了。这才有了我们如今的container-as-a-service。刚才我们说了,容器更加便捷和高效。首先容器非常节约资源,虚拟机成本是很高的。我记得Sam Newman的一本书上说的很形象。把服务器比作一个抽屉,把虚拟机比作袜子,虽然在袜子里可以可以放你想要的,但如果你在抽屉里放太多的袜子,最后也会“空虚的”占满空间啊。。。而容器却非常light weight, 共享同一个kernal,比完整的虚拟机要快速。用过的朋友就会发现,启动云上面的虚拟机非常慢,Azure的VM、Cloud Service,AWS的EC2、Elastic Beanstalk启动的话的时间真是等的花都谢了。 个人经验部署一个服务至少需要15分钟。哭。。。而容器服务因为作为进程运行,则是快到以秒为计时单位,而且资源上的控制也非常便捷。如果要深究,可以去读读paper。。再说说DevOps,如何做到持续交付,持续集成,速度效率第一呀!你部署个测试环境每次花那么久,测试不过再部署真是不嫌蛋疼啊。现在云上面的microservice/微服务就非常支持使用容器的做法,每一个服务都不大,分布开来难道每一个小服务你都要用一个虚拟机来运行吗。。实在惭愧,我们现在在做一个大规模微服务系统,但是我们每个微服务都是由虚拟机来跑的(有一些内部原因所以是强制的),所有我深知其痛点。这时候容器就是很理想,把他们分配在每一个轻微的容器里来管理实现灵活高效的开发。。But其实容器也是有限制的。有一些权限也是拿不到的或者说很麻烦拿到吧。具体全都是什么还没完全搞清楚(这也是技术不完善时我们还无法全部使用容器技术的原因之一)。最近在开发的一个服务就必须跑在虚拟机上因为一个logging和health monitoring agent的原因可能容器或者其他非虚拟机技术不支持某些权限吧。

说说container-as-a-service现在的实现,大哥要是有钱可以有一个数据中心,每台电脑直接在host OS上装上容器管理引擎运行容器而不装任何虚拟机。。。 貌似目前没见有这么大规模的成熟的提供商。。。但是在云上可以使用云服务商提供的虚拟机将很多容器们包装在里面,然后扩展到多部虚拟机,从一个服务器到多个。灵雀云现在就是这样做的,不过当然他们要自己实现资源的调配,以及容器和容器之间的沟通,一种container orchestration engine。 还有微软, 现在其容器服务的分布式管理调配的技术是通过集成Apache Mesos来实现,你可以把它理解为云的kernal。还有Google的Kubernete也是同样的技术。

基于阿里云ECS建立Daocloud服务

持续更新

参考文献

声明:枫言枫语 | 版权所有,违者必究 | 如未注明,均为原创 |

本网站采用CC BY-NC-SA 3.0国际化协议进行授权

转载:转载请注明原文链接 - 【云计算】CaaS、laaS平台集成解决方案


只有汗水不会欺骗你