主流公共云服务商对比1.百度开放云服务: 应用引擎BAE3.0概述百度应用引擎(BAE)提供多语言、弹性的服务端运行环境,能帮助开发者快速开发并部署应用。
传统PAAS采用沙盒技术来实现应用之间的资源隔离,如下图所示。
沙盒技术需要对运行环境和编程语言进行功能限制,例如:禁止创建进程和线程,禁止某些系统调用,禁止对某些文件系统路径的读写,禁止加载C语言模块、禁止某些网络功能等,这就大大增加了开发者的学习成本,也使得应用的开发和迁移难度变大。
采用沙盒技术进行资源隔离时,困扰开发者的一个主要问题就是应用的云端运行环境与开发者的本地开发环境不一致,很多功能受到限制。
开发者在本地开发调试好的应用,发布到云端就遇到种种问题无法运行,不得不针对云端环境进行修改。
图1BAE采用轻量虚拟机技术进行资源隔离,如下图所示。
在运行环境和编程语言层面,不做任何限制;应用在云端的运行环境与开发者本地的开发环境保持一致,从而使得学习成本、开发和迁移成本降到最低,开发者的生产力得到最大限度的解放。
图2核心概念工程一个BAE工程可包含多个部署。
部署每一个BAE实例称为一个“部署”。
部署类型每个BAE部署对应一种部署类型。
除了传统的WEB形式的部署类型外,BAE3.0新增了worker 类型的部署。
传统的WEB类型,主要用来创建WEB应用,它的特点是通过HTTP请求来驱动应用逻辑;但有时候我们需要长期在后台跑一些任务,例如爬虫,不停的去爬取各种网络资源,这种就需要woker类型的部署来实现了。
目前BAE3.0平台支持node.js-web,php-web, php-worker, java-web, python-web, python-worker等部署类型,后续会支持更多类型,给开发者更多的选择。
执行单元每个BAE部署由一个或多个“执行单元”组成。
执行单元是一个抽象的概念,每个执行单元实际是由一组进程组成;例如一组lighttpd + php-fpm 进程组成了php-web执行单元。
对于一个WEB应用来说,随着访问量的上升,一个执行单元很可能扛不住压力。
那么可以通过增加执行单元个数进行“水平扩展”,或者增大执行单元配置如内存进行“垂直扩展”,从而轻松应对压力。
轻量虚拟机执行单元由一组进程组成,而这组进程实际是运行在一个单独的轻量虚拟机里面的;每个执行单元对应一个轻量虚拟机。
对开发者来说,不需要关心轻量虚拟机的存在,而是关心为自己应用服务的“执行单元”;而对BAE的运维人员来说,才需要关心轻量虚拟机的运行情况。
图3【如图3所示:在BAE3.0中,BAE部署与执行单元、轻量虚拟机的关系】假设有一个“BAE部署”,分配了两个“执行单元”,每个“执行单元”对应一个“轻量虚拟机”,“执行单元”是抽象概念,它启动后,对应着“轻量虚拟机”里面的一组进程,包括lighttpd 和php-fpm 进程等。
当“轻量虚拟机”出现故障后,BAE平台会自动为它重新分配一个轻量虚拟机,并将“执行单元”部署到新的轻量虚拟机上,这就是“执行单元”的迁移。
这种技术保证了应用的高可靠性。
当应用流量上升,两个“执行单元”不够用的时候,可以再增加新的轻量虚拟机,并部署“执行单元”,这就是“执行单元”的扩容。
这种技术保证了应用的可扩展性。
运行环境和与编程语言无任何限制对运行环境和编程语言,包括创建进程、创建线程、系统调用、执行C扩展模块、文件系统访问不做任何限制。
多种编程语言支持除了PHP、Python、Java、Node.js以外,我们还会陆续增加对主流开发语言的支持。
此外将来开发者还可以自定义运行环境。
编程框架的支持由于编程语言层面没有任何限制,那么各种编程框架的支持也就水到渠成了。
不管你是主流的框架,还是小众的框架,只要能在开发者本地的环境中运行起来,那么在云端也可以跑起来。
自动安装依赖的模块对于python开发者来说,只要把依赖的模块,例如django, flask等写到requirements.txt中,BAE 会自动帮你把这些模块部署到执行环境中。
对于nodejs开发者,可以使用package.json 达到同样的效果。
丰富的服务支持提供多样性的扩展服务,包括MongoDB、MySQL、Redis、Log、Port等。
此外百度强大的云能力也都支持,如云存储、媒体云、云推送、LBS等等。
自由的网络访问许多PaaS,对外的网络访问需要通过HTTP Proxy 或者是Socket Proxy 代理出去;而在BAE3.0里面,对外的网络访问不再需要经过代理层的转发。
此外,我们还将在未来开放“端口服务”,允许开发者自定义对外提供服务的TCP/UDP端口,从而实现更复杂的业务逻辑。
新增worker类型很多PaaS只能提供web类型应用的开发;而BAE3.0新增的worker类型应用,可以满足开发者执行长期任务的需求。
例如您可以使用worker类型来实现一个自定义的网络爬虫。
Worker类型示例本地开发环境我们提供了接近于“云端运行环境”的本地开发环境工具,帮助开发者在本地进行开发和调试;当您在本地完成开发和调试后,再将应用部署到云端,就可以流畅的运行起来了。
执行单元套餐在创建BAE部署的时候,您可以根据实际情况选择执行单元的“套餐类型”;也可以在应用上线后,根据访问量随时调整“套餐类型”,从而提高资源利用率。
BAE3.0 是一种基于Linux Container的资源独享型PaaS:基本技术:Linux ContainerBAE3.0底层采用的是Linux Container这种轻量虚拟机技术,相对于传统的kvm, xen 等虚拟机技术来说,它可以更好的适应云计算的需求。
关于Container技术的详细介绍,可以参考这里/操作系统Ubuntu 12.04 Server轻量虚拟机内部,我们采用的是64位的Ubuntu 12.04 Server。
资源配额每个轻量虚拟机都具有一定的资源配额,应用如果使用了超过配额的资源,就可能出现不可预期的错误。
例如疯狂分配内存,大量占用磁盘空间等等。
▪内存:默认256M;可通过套餐来调整大小▪磁盘:2G(此为临时文件系统,非代码空间,也不可长期存储文件;代码空间限制为100M) ▪CPU:与其它轻量虚拟机分享CPU▪网络:流入5Mbytes/秒;流出5Mbytes/秒部署应用代码应用代码部署在/home/bae/app 目录下,其权限为bae 账号所有执行应用代码应用代码以bae 账号来运行;因此应用代码对于/home/bae 目录下具有任意的读写和访问权限,同时对/tmp 目录也具有读写和访问权限临时性文件系统应用虽然可以在/home/bae/ 等目录下任意读写,但是我们说轻量虚拟机里面是一个“临时性文件系统”;也就是说,应用在这些目录下动态创建的文件、目录,是随时可能消失的。
这是因为当轻量虚拟机出现故障,或者轻量虚拟机所在物理机器出现故障的情况下,需要将这个轻量虚拟机动态的迁移到别的物理机器上,保证应用的“高可用性”。
迁移后,原来轻量虚拟机里面的文件、目录就都丢失了;这也是PaaS 通用的处理逻辑。
对应用开发者来说,应该意识到PaaS的这种特性,并尽量将需要持久化的数据或者是需要被多个轻量虚拟机共享的数据放到mysql, redis, mongodb, bcs 等存储服务器上。
或者使用NFS服务,也可部分解决共享文件的需求。
以下是对现有的几种部署类型进行压力测试后的性能数据。
压测基于256M内存的执行单元,开发者可参考如下测试数据,以了解BAE3.0中执行单元的抗压能力。
Nodejs runtimePython runtimeBAE3.0执行单元按套餐计费,计费公式:费用=套餐单价*使用时长特别说明:▪ 1.因BAE3.0在底层采用“轻量虚拟机技术”,为资源独享型PaaS。
故计费指标为您当前占用的执行单元,不论流量大小。
但有网络限制:流入5Mbytes/秒;流出5Mbytes/秒。
▪ 2.不同配置的执行单元套餐能力评估可参考256M执行单元压测数据。
可根据实际需求选择合适的套餐。
带宽计费BAE3.0执行单元默认带宽为5MB/s,该部分不额外计费。
为满足开发者对于更高带宽的需求,特推出附加带宽套餐,附加带宽需要在“配额管理”中申请,方可使用。
附加带宽按套餐计费,计费公式:费用=套餐单价*使用时长数据库访问说明▪请求:为了防止恶意攻击,云数据库采用分钟配额来限制数据库的访问,超配额的数据库将会被封禁5分钟。
▪请求数:200000个/分钟▪CPU时间:400秒/分钟▪流入流量:300MB/分钟▪流出流量:600MB/分钟▪连接数:每个数据库并发连接数将视系统繁忙情况动态调整,范围为10—50。
▪容量:每个数据库有各自的容量限制,超过配额后,数据库将会被封禁。
请提前作好监控并及时扩容。
服务使用说明▪注意:如下表格中的命令为限制使用的命令。
私有mysql计费私有mysql计费也按套餐计费,计费公式:费用=套餐单价*使用时长特别说明:▪ 1.私有mysql收费,仍需要在配额管理中提交申请,审批通过后方可使用。
▪ 2.私有mysql与共享mysql的差别可参考如下与公有数据库的区别相同点:▪支持各语言原生的sdk访问数据库,用户只需要更改数据库的连接信息即可使用,导入导出和phpmyadmin操作完全相同,应用迁移的代价几乎为零。
▪数据库自动冗余备份,对于用户来说后端主从切换完全透明。
▪数据完全隔离,不同应用的数据会存在于不同的数据库中而不会相互影响不同点:▪用户可使用长连接,维护mysql连接池,不受30秒断连接的限制。
但应用代码里面还是要有重连机制,防止后端服务发生热切换,连接失败情况发生。
▪并发连接数最大支持到500,且直接连接服务实例,相比与公有集群,更能满足应用高并发,低延迟的需求。
▪无服务使用限制,用户独占服务资源。
▪特别注意:私有服务的密码初始化时为应用的Secret Key,创建成功后,密码会随着重置sk而变化。
port端口服务计费port服务按端口的使用时间计费,每个端口单独计费,计费公式:每个端口的费用=套餐单价*使用时长特别说明:▪ 1.port端口服务,仍需要在配额管理中提交申请,审批通过后方可使用。
执行单元配额▪普通开发者:执行单元配额为1。
即每位开发者默认可使用1个执行单元,需在BAE3.0资源开放时段创建部署,否则会提示“BAE资源不足,正在扩容中,请等候下一批”▪付费开发者:执行单元配额为5。
即每位开发者可使用5个执行单元,可以自由创建或删除部署,资源充足。
需要多于5个则需要在配额管理中提交申请。
注意:普通开发者,若删除部署,对应的执行单元会回收。
当试用资源不足时将无法创建。