AppEngine:应用程序引擎,是托管网络应用程序的云计算平台。
云计算通常简称为“云”,是一种通过Internet按需交付计算资源(从应用到数据中心都属于计算资源)和按使用付费的基础架构。
公共云由一些公司运营和拥有,这些公司使用这种云为其他组织和个人提供对价格合理的计算资源的快速访问。使用公共云服务,用户无需购买硬件、软件或支持基础架构,这些都是由提供商拥有并管理的。
混合云使用私有云作为基础,同时结合了公共云服务的策略使用。事实是私有云不会独立于公司其他的IT资源和公共云而单独存在。大多数使用私有云的公司都将发展为管理跨数据中心的工作负载、私有云和公共云—因此创建了混合云。
基础架构即服务以"按使用付费"为基础,为公司提供各种计算资源,包括服务器、网络、存储和数据中心空间。
平台即服务提供了基于云的环境,其中具有可支持您构建和交付基于web(云)应用的完整生命周期所需的一切没有购买和管理基础软件、硬件、供应和托管的成本与复杂性。
基于云的应用—或软件即服务(SaaS)—在远端"云中的"计算机上运行,这些其他人拥有和运营的云计算机可以通过Internet和web浏览器连接到用户的计算机。
谷歌GAE(GoogleAppEngine)
支持的编程语言:Python、Java、Go(可扩展其它语言)
新浪SAE(SinaAppEngine)
百度BAE(BaiduCloudEnvironment)
开发语言:Java、Python,同时Node.js开放内测
阿里ACE(AliyunCloudEngine)
支持PHP,NODE.JS语言编写的应用程序
盛大GrandCloud
支持PHP,Ruby,Java,Python等语言编写的Web应用
亚马逊AmazonAWS
微软MicrosoftServerCloud
IBMcloudcomputing
思科CiscoCloudVerse
Autotask
AppEngine的基础服务省却了许多系统管理的操作,以便将规模扩大到数以百万计的访问。Google负责处理一组代码,可以监测、容错,在必要的时候还会开发一些应用实例。
带宽和CPU的使用、送达请求的数量、并发请求的数量、以及调用各种API的次数,皆设有每天和每分钟的限额。个别的请求,如果需时超过30秒或返回超过10MB的数据,都会被终止。
项目
限制
普通请求60秒,任务请求10分钟,后台请求无限
每个应用程序的文件
1000个
HTTP响应的大小
32MB
Datastore单项大小
1MB
应用程序代码大小
150MB
配额
每天的Email数量
100封
每天的输入数据
无限
每天的输出数据
1GB
每天可使用CPU
28小时
每天调用DatastoreAPI次数
50000次*
数据存储
每天调用URLFetchAPI次数
657000次*
SAE作为国内的公有云计算,从开发伊始借鉴吸纳Google、Amazon等国外公司的公有云计算的成功技术经验,并很快推出不同于他们的具有自身特色的云计算平台。SAE选择在国内流行最广的Web开发语言PHP作为首选的支持语言,Web开发者可以在Linux/Mac/Windows上通过SVN或者Web版在线代码编辑器进行开发、部署、调试,团队开发时还可以进行成员协作,不同的角色将对代码、项目拥有不同的权限;SAE提供了一系列分布式计算、存储服务供开发者使用,包括分布式文件存储、分布式数据库集群、分布式缓存、分布式定时服务等,这些服务将大大降低开发者的开发成本。同时又由于SAE整体架构的高可靠性和新浪的品牌保证,大大降低了开发者的运营风险。另外,作为典型的云计算,SAE采用“所付即所用,所付仅所用”的计费理念,通过日志和统计中心精确的计算每个应用的资源消耗(包括CPU、内存、磁盘等)。
总之,SAE就是简单高效的分布式Web服务开发、运行平台。
SAE的基本目标用户有两种,一种是Web开发者,另一种是普通互联网上网人群。
对于Web开发者,SAE带来的好处有:
·硬件成本更低,无需预先购买设备,承担更大的投入风险
·开发成本更低,SAE提供许多服务供开发者使用,开发者无需重复开发,包括队列、数据库、缓存、定时、验证码、计数器,几乎覆盖了Web开发的所有领域。另外对于特定开放平台的开发者,比如新浪微博开发者,SAE已经集成了完整的OpenAPI的封装,将开发者的开发成本降到最低。值得一提的是,SAE的开发者目前已经形成了良好的交流氛围,在意见反馈中心、SAE官方群,SAE官方微群可以看到很多热情的开发者在一起共同提高
·运维成本更低,在SAE上的应用无需关心硬件维护、服务监控、数据容灾等操作,SAE会通过其高可靠的架构和方便的监控页面为用户将运维成本降到最低扩展性更强,在SAE上的服务无需关心服务压力猛增时带来的扩容等操作,SAE自动支持服务扩展
·更加安全可靠,SAE自动提供SQL语句性能分析、前端防攻击、代码检查等功能,在SAE上的所有应用均为多机房容灾部署,比传统的部署模式更加安全可靠,并且SAE提供服务的SLA来实现对用户服务质量的承诺
对于普通上网人群,使用SAE可以:
使用推荐应用一键安装Web应用,普通用户无需会编码,也可以在瞬间拥有自己的团购、博客、微博、Wiki等。
SAE从架构上采用分层设计,从上往下分别为反向代理层、路由逻辑层、Web计算服务池。而从Web计算服务层延伸出SAE附属的分布式计算型服务和分布式存储型服务,具体又分成同步计算型服务、异步计算型服务、持久化存储服务、非持久化存储服务。各种服务统一向日志和统计中心汇报,参考下图:
7层反向代理层:HTTP反向代理,在最外层,负责响应用户的HTTP请求,分析请求,并转发到后端的Web服务池上,并提供负载均衡、健康检查等功能。
Web服务池:由一些不同特性的Web服务池组成。每个Web服务池实际是由一组Apache(PHP)组成的,这些池按照不同的SLA提供不同级别的服务。每个Web服务进程实际处理用户的HTTP请求,进程运行在HTTP服务沙盒内,同时还内嵌同样运行在SAE沙盒内的PHP解析引擎。用户的代码最终通过接口调用各种服务。
各种分布式服务:SAE提供几乎可以覆盖Web应用开发所有方面的多种服务,用户可以通过StdLib(可以理解为SAEPHP版的STL)很方便的调用它们。
SAE平台出口IP:
220.181.129.126220.181.129.121220.181.136.229220.181.136.230220.181.129.93220.181.129.102220.181.129.117220.181.129.90
开发:
·代码检查,帮助检查不良函数并帮助移植
·代码部署
·分布式数据库
·分布式文件存储
·分布式缓存
·各种附属分布式服务,包括图像、定时、任务队列、邮件、计数器等
·对接多个开放平台,如新浪微博开发平台
·团队协作,可以邀请好友以不同的权限加入项目
·代码版本管理(计划支持)
运营:
·应用打包,通过我们的应用向导进行推广
·日志,包括访问日志、错误日志等
·资源报表,消耗SAE各项资源的统计
·服务监控,监控各项服务状态
·数据迁移,包括数据库导入、数据库导出等
SAE提供的服务
SAE目前已经提供了十多种服务,整体上分为计算型和存储型,计算型又包括同步计算和异步计算,而存储型则分为持久化存储和非持久化存储。具体列表如下:
服务名称
类型
说明
HTTP+PHP
同步计算
带SAE沙盒的Apache和Zend为用户提供Web计算服务
持久化存储
提供分布式文件存储
非持久化存储
提供分布式缓存服务
异步计算
异步离线轻量级任务队列,HTTP方式调用
异步离线重量级任务队列,系统方式调用
计数器服务
RankDB
分布式排行榜服务
分布式key/value存储服务
分布式定时服务
分布式抓取服务
提供临时文件存储,文件生命周期在一个会话内,Http请求结束文件自动消失
提供应用配置功能,取代Apachehtaccess
邮件发送服务
图像处理服务
Facebook提供的强大的PHP调优工具
SVN
持久存储
OnlineCodeEditor
在线代码编辑器,编辑的代码保存后入自动入SVN并部署到Web服务器
两大特性:扩展性与可靠性
·扩展性
SAE在服务的可扩展性上基本是动态可扩展性的思路,即资源和ID没有强对应关系,用户以服务使用者的身份使用SAE服务。
·可靠性
在计算可靠性方面,SAE主要是依靠多点部署来完成可靠性,多节点的计算一致性上,SAE有分布式锁服务提供比Paxos更好的容错逻辑。
在数据可靠性方面,SAE的所有数据都通过冗余存储来达到SLA。SAE通过主动复制和被动复制来实现多点数据冗余。
·传统服务托管面向的是硬件软件设备,使用者得到的也是设备的使用权;而SAE面向的服务,使用者得到的是服务的使用权。
·传统服务托管不面向开发者,开发者无法在其上享受到开发的乐趣;而SAE的一个重要用户就是webdeveloper,开发者可以在其上通过在线调试、日志分析、协作共享等功能进行web开发。
·传统服务托管不提供分布式系统解决方案;而SAE提供的完整的分布式web服务的解决方案,其中不仅仅包括分布式数据库、分布式文件系统,更包括分布式定时器系统、网页抓取服务、图像处理服务等。
·传统服务托管不解决域名问题,用户往往烦恼于域名申请;而SAE的用户将自动得到在sinaapp下的二级域名,同时SAE还支持域名cname。
·传统服务托管无法保证SLA(ServiceLevelAgreement),硬件故障的成本基本由使用者承担;而SAE保证用户的SLA,用户的web服务自动享有高冗余的前端服务器、享有自动负载均衡系统、服务自动扩展、服务自动收缩等功能。
·传统的服务托管采用预付费的方式,费用固定且和实际使用情况无直接关系;而SAE采用预充值方式,“所付即所用,所付仅所用”,web服务的一切损耗均提供报表查询和账单汇总,让用户一目了然。
SAE公有云计算和传统的虚拟主机的区别如下表。
类项
SAE
VPS
核心用户
Web开发者
无核心用户
使用方式
服务使用
设备租用
目标
力争覆盖Web服务所有需求,提供多种服务给开发者使用
仅基本需求
SLA(服务承诺)
高可靠性及严格的服务承诺
依服务商变化,无严格协议
计费方式
所付即所用,所付仅所用
预付费,无精确计费
SinaAppEngine项目始于2009年8月,目标为云计算时代的分布式web服务提供一整套解决方案。我们开发SAE主要是出于对内、对外两方面考虑:
对内,新浪很早以前就开始了关于私有云的开发和实践,所以为了进一步提高公司资源的利用率,更加提高web开发的效率,降低web运营的成本,决定了我们要开发SAE。
对外,亚马逊、Google都是国外的成功的提供公有云计算服务的公司,SAE也想借助云计算这样一个趋势,为国内广大用户提供云计算的分布式web服务的开发、运行平台。
云计算虽然是个新名词,但实际在国外已经有4、5年的历史。2006年,亚马逊就推出了以EC2为代表的公有云计算,并且已经实现了大规模盈利;2008年,Google则推出了以GoogleAppEngine为代表的公有云计算。国内的云计算却一直是炒的很厉害,各大互联网公司都在宣传,但真正有技术实力做出来而又对外公开使用的少之又少。
实际从2004年开始,新浪就开始了私有云方向的研究和实践,以此为基础的动态应用平台目前已经支撑新浪内部的绝大部分业务。从2008年起,新浪又启动了“浪云”的公有云计算计划,相继开发了分布式队列服务、P2P文件系统、分布式计算框架等一系列基础服务。实际SAE就是“浪云”战略的产物。
SAE从架构设计和代码编写开始,就明确了自身的两个目标:
·做公有云计算平台。公有云不同于私有云,更强调安全性和可靠性,这也对整体的架构设计和技术实现提出了更苛刻的要求
·为分布式Web服务提供一整套的解决方案。SAE争取提供开发者开发Web应用过程中所用到的所有服务。
经过技术团队一年的开发,SAE目前已经提供了十多种服务,整体上分为计算型和存储型,计算型又包括同步计算和异步计算,而存储型则分为持久化存储和非持久化存储。具体列表如下:
SAE在2009年11月3日发布了alpha1版本,2010年2月1日发布了alpha2版本,2010年9月1日发布了beta版本,2011年5月17日正式开放注册。
SAE重视每一名Web开发者和普通用户,SAE坚信:
“SAE的未来取决于能否帮助Web开发者实现其价值体现,取决于是否能和Web开发者实现双赢的良性循环,并最终为互联网所有用户提供高质量的有价值的应用和服务。”
百度云平台是百度开放其基础能力,为开发者提供的基于“云”的服务的统称,包括云环境,云服务,集成开发环境,移动测试以及移动建站工具等,未来还会加大对移动应用开发的支持。
图:百度云平台构成图
百度云环境,即BCE(BaiduCloudEnvironment),提供多语言、弹性的服务端运行环境,能帮助开发者快速开发并部署应用。云环境内置丰富的分布式计算API,并支持全方位的百度“云”服务,更能为您的应用带来强大动力,从“本地”变“分布式”,简单可依赖。
百度云消息,即BCM(BaiduCloudMessaging),提供消息队列,短消息、电子邮件发送等服务。
百度云推送(简称Channel)服务为开发者提供了向浏览器、手机和PC客户端推送消息的服务。
百度云存储,即BVM(BaiduVirtualMachine),提供多种配置的虚拟机服务。(仅对合作开发者开放)
百度SiteApp,是国内首家Web应用在线生成服务,可帮您将传统网站快速转化为移动Web应用。
百度移动测试中心(MTC),提供主流手机终端的真机的遍历测试,UI适配、安装卸载测试、手动测试等功能。
百度云众测,输出百万级别社区测试能力,提供APP评测、用户体验反馈、问卷调查等功能。
ACE(AliyunCloudEngine)是一个基于云计算基础架构的网络应用程序托管环境,帮助应用开发者简化网络应用程序的构建和维护,并可根据应用访问量和数据存储的增长进行扩展。ACE支持PHP,NODE.JS语言编写的应用程序;支持在线创建MYSQL远程数据库应用。
CloudApp是阿里云手机开发平台,CloudEngine作为阿里云手机在云端的延伸,为云手机开发者提供NodeJS运行环境和伸缩性的支持,让开发者有效的衔接手机和云端的开发,简化开发流程。
CloudEngine的目标用户有两种,分别是Web开发者和站长。使用CloudEngine,可以让您:
1、无需硬件的投资,降低投入风险;
2、内置丰富的服务,包括session,memcache,storage,cron,云数据库,应用管理和配置,覆盖了web开发的大部分领域;
3、高效稳定的运行环境,兼容大部分原生的PHP5.3程序,弹性伸缩,不用再当心访问量过大;
4、高效安全的云存储服务,不用当心数据会丢失;
5、经验丰富的阿里运维和安全团队,协助解决网络攻击,网站挂马,漏洞扫描,代码行为分析等,并对服务异常进行告警;
6、开发人员可以将自己的应用做成模板,发布其应用给其他人使用,站长可以从模板库中在线创建应用,即可进行自己的网站运营。
另外,ISV厂商可以在自己的系统中集成OpenAPI,允许管理和发布用户创建的应用。
CloudEngine可以保证您在负载很重和数据量极大的情况下,也可以轻松构建能安全运行的应用程序。
1、自动扩容,用户可以根据自身需求,申请存储,缓存等容量。
2、动态的网络服务,提供对常用网络技术的完全支持
3、持久存储空间,存储用户需要的落地的数据
4、负载平衡,选择当前较空闲的机器,执行任务
5、与本地开发环境兼容,方便开发者移植代码到CE运行环境
6、分布式定时计算,提供定时和定期触发事件的计划任务。
您的应用程序可在以下两个运行时环境之一中运行:NodeJS环境和PHP环境。各环境均为网络应用程序开发提供标准协议和常用技术。您的应用程序使用NodeJS和PHP的标准API来访问大多数CE服务。
1、Session,分布式session,开发者无需考虑跨多台机器的session处理
2、Storage,基于开放式存储服务,支持多台机器的同时访问
3、memcache,分布式缓存,有效解决memcache的多机共享,和实例重启引发的缓存清空
4、cron,通过函数调用方式,支持定时和定期执行任务
5、应用管理和配置,支持应用的创建、启动、停止、更新、查看等操作
6、mysql数据库支持,双机热备,支持在线迁移和备份,单表可支持上亿记录
1、开发者可利用模板库分发应用
2、站长可以通过模板库在线快速创建应用
3、平台可监控各种服务的状态
4、对消耗的资源有详细的统计记录
5、方便的数据导入和导出
云引擎
虚拟主机
用户群
web开发者和站长
站长
没有限定
服务租用
虚拟设备租用
运行环境
支持多种开发语言
支持较少开发语言
需要自己安装
开发者和站长的整体服务
展示性的网站
仅提供最基本的设施
安全保证
沙箱+专业的安全团队
根据服务商来定
根据用户能力来定
服务承诺
稳定可靠安全的服务承诺
互联网给PC带来了时代的变革,我们相信,云计算会给互联网带来更大的变革。以亚马逊EC2为代表的IaaS和以Google代表的PaaS,已经在国外掀起了互联网应用的高潮。反观国内,以阿里云为代表的互联网企业,率先将云计算服务落地,并对外提供公有云服务。
因此我们也向用户承诺,我们只做公有云的计算平台,保证平台上数据的安全性和可靠性,提供一个稳定高效的分布式webservice的解决方案,为用户提供尽可能多的服务。
为保证应用的安全性和稳定性,我们对各类服务设定了一些限制,请用户仔细阅读。
1、每个用户最多可以创建3个应用,包含从模板创建的应用
2、禁止本地文件读写,读写文件可以使用我们的OSS(开放存储服务),OSS存储空间不受容量限制
3、对试图破坏或滥用配额(例如同时在多个帐户上操作应用程序)违反服务条款的用户,可能导致应用程序被禁用或帐户关闭
ACE目前支持PHP运行环境,NodeJS运行环境,后续会支持更多的开发语言。
自动弹性伸缩,无需人工干预运维,根据实际使用量计费。
系统自带常见应用模板。开发人员可以将自己的应用做成模板,发布其应用给其他人使用;站长可以从模板库中在线创建应用,即可进行自己的网站运营。
兼容原生API,调试信息输出,可以方便的进行应用管理和配置。
CPU
内存
数据盘
带宽
价格(月)
价格(年)
经济A型
1核Xeon2.26GHz
512MB
40GB
1Mbps
85元
850元
经济B型
1.5GB
80GB
2Mbps
181元
1810元
标准A型
2核Xeon2.26GHz
130GB
5Mbps
376元
3760元
标准B型
2.5GB
230GB
500元
5000元
标准C型
4核Xeon2.26GHz
4GB
480GB
810元
8100元
标准D型
8GB
730GB
1205元
12050元
标准E型
8核Xeon2.26GHz
16GB
1916元
19160元
型号
内存(M)
存储(G)
最大连接数(个)
MySQL
新1型
240
10
60
70元
700元
新2型
600
20
150
200元
2000元
新3型
1200
50
300
408元
4080元
新4型
2400
100
808元
8080元
新5型
6000
200
1500
1888元
18880元
新6型
12000
500
2000
3816元
38160元
新7型
24000
1000
7470元
74700元
SQLServer
1型
530元
5300元
2型
1040元
10400元
3型
4000
400
2050元
20500元
4型
3060元
30600元
5型
8000
800
3870元
38700元
6型
5200元
52000元
7型
10040元
100400元
用户使用RDS期间产生的公网流量费用为1元/GB。内网流量免费,例如用户在云服务器和RDS之间进行的数据传输是免费的。
存储空间:
0GB-500GB
0.02元/GB*天(约0.6元/GB*月)
500GB-2TB
0.018元/GB*天(约0.55元/GB*月)
2TB-10TB
0.016元/GB*天(约0.5元/GB*月)
10TB-50TB
0.015元/GB*天(约0.45元/GB*月)
50TB
流入流量
免费
流出流量
0.75元/GB
0.7元/GB
0.65元/GB
0.6元/GB
注:内网流量免费:即OSS与阿里云服务器之间的网络流量,通过使用oss-internal.aliyuncs.com的方式可享受内网流量免费。
数据请求
Get/HeadObject
每10000次0.01元
其他所有请求
每1000次0.01元
OSS免费体验活动:
盛大云引擎是基于盛大云计算基础设施服务的Web应用托管平台,旨在降低应用的部署与运维成本,让应用开发者可以专心于业务的开发设计,不再担心后台的构建与运维。云引擎支持PHP,Ruby,Java,Python等语言编写的Web应用,后端提供丰富的数据存储服务,并根据应用访问量和业务规模进行弹性扩展。云引擎目前为Beta版本,各项功能不断上线。
零运维成本只需上传代码,无需手工操作,即可完成代码部署。同时,提供访问统计与运行资源监控,应用状况尽在掌控。
多语言支持应用管理基于CloudFoundry。用户可以提交PHP、Ruby、Java、Python等语言开发的Web程序。
弹性扩展按访问量自动增加运行实例,并提供访问负载均衡。
数据可靠系统使用盛大云的云硬盘与云数据库等服务,确保数据的高可靠性。
云端运行用户提交代码后,其应用程序运行在云主机中,数据存储在各种云端数据服务中,省去了常规的部署与运维操作。
负载均衡云引擎自动调整执行应用的虚拟机数目。HTTP请求在各个运行实例间轮转服务,实现动态的负载均衡。
开发语言提供MySQL,PostgreSQL,MongoDB等多种数据库服务。基于云数据库技术,内置多副本存储,保证高可靠。
数据库服务提供MySQL,PostgreSQL,MongoDB等多种数据库服务。
文件系统服务提供一致共享、多副本持久的文件系统服务,供需要文件存储的应用使用。
分布式缓存服务提供兼容Memcached协议并且动态可扩展的分布式缓存系统服务。
统计与监控在网页控制台上以图表形式来来展现应用的访问统计及资源占用信息。
目前云引擎部署在盛大云的华北节点。华北节点是BGP线路,包括电信、联通、移动、教育网、铁通。
云引擎Beta版本目前对用户全部免费。计费标准后续推出。基本的策略是针对Web应用的访问量以及占用系统资源综合考虑进行计费。
亚马逊是全球最大的在线图书零售商,在发展主营业务即在线图书零售的过程中,亚马逊为支撑业务的发展,在全美部署IT基础设施,其中包括存储服务器、带宽、CPU资源。为充分支持业务的发展,IT基础设施需要有一定富裕。2002年,亚马逊意识到闲置资源的浪费,开始把这部分富裕的存储服务器、带宽、CPU资源租给第三方用户。亚马逊将该云服务命名为亚马逊网络服务(AmazonWebServices,简称AWS)。2006年初,亚马逊成立了网络服务部门,专为各类企业提供云计算基础架构网络服务平台,用户(包括软件开发者与企业)可以通过亚马逊网络服务获得存储、带宽、CPU资源,同时还能获得其他IT服务,如亚马逊私有云(VPC)等。(以上介绍摘自互联网)
对于个人用户来说,使用AmazonAWS就意味着拥有独立的主机,存储空间,带宽,ip,数据库服务器,CDN等等,说白了就是有了实现各种互联网服务的十八般兵器。小到搭建自己的SVN/VNP服务器,网络硬盘,中到搭建个人网站/博客,大到构建大型网站,实施集群计算,AWS都能轻松应对。
在我看来,AWS的好处数不胜数,缺点只有一个,那就是在中国没有数据中心,离大陆最近的数据中心是日本。这意味着第一你的用户访问会有一定延迟(100ms以内),我的网站和博客就是放在日本数据中心,如果你觉得打开网页的速度可以接受,那就不是问题;第二就是你通过AWS建立的网站目前不可能获得工信部备案,对个人用户来说影响不大。
从数据库、应用配置、计费、域名绑定、平台服务对比了BAE、SAE以及GAE的优劣,最后给出云平台选型的建议。
SAE不支持InnoDB(可申请支持),BAE默认支持。
GAE使用Datasotre存取数据,最近也提供了云SQL(MySQL),但申请比较困难,配额/性能笔者未测试过。
另外,SAE显式给出了主从库的访问方式,应用可以比较灵活地设计存取策略,例如读写分离。并且SAE是每个应用都拥有自己的数据库,而BAE是所有应用共用一个库。
BAE的duapp-web.xml基本是抄袭GAE的appengine-web.xml,元素基本一致。
比较奇葩的是BAE静态资源配置默认所有后缀为静态文件类型(例如.html)的请求路径都默认假设为静态资源,需要在duapp-web.xml中指定排除。
BAE目前还没有详细的计费,只限定了应用数。公测结束后应该会细化计费模型。
GAE目前的计费模型主要是按API调用计数,流量分为In/Out配额。每天会定时刷新免费配额。
综上,GAE的计费一目了然,主要就是API调用次数;SAE的计费比较复杂,不同服务有不同的计费策略;BAE还没有明确的计费模型。
GAE开通企业套件后随便绑,企业套件有免费版。
SAE需要确认通过域名备案才能绑定,并且绑定后的流量计费翻倍。
SAE目前可以随便绑,但没备案的话绑定域名的请求走海外中转,流量计费翻倍(原二级域名请求计费不变)。
BAE目前可以随便绑,但没备案的后果自负。
SAE提供了SDK包,包含了开发需要的本地服务实现。
BAE则分别提供了服务Jar,调用方式按不同服务而异。
GAE提供了完整的SDK包,包含了开发需要的本地运行环境和配置客户端。
综上,GAE提供了完整的平台化服务,覆盖了从开发到上线运维的一系列工具;SAE则提供了部分工具,平台化不完整,增加了开发、运维难度;BAE则是分别提供不同服务给开发,没有统一的SDK与调用方式。
另外,值得一提的是BAE虽然服务没有整合到一个SDK中,但其分散的服务也比较适合应用自己选择。其中云消息(消息服务)以及云触发(数据变更通知)是GAE/SAE没有提供的服务,某些业务场景应该会非常适用。
SAE与BAE主要还是面向应用部署托管,普通应用修改后易迁移部署到BAE或SAE。
新应用开发可以选择和平台绑死(依赖平台服务)或按照普通应用开发。
使用配置工具来上传、更新应用配置其实是非常好的方式,但目前SAE/J、BAE/J都没有提供客户端配置工具,这增加了使用者的维护工作量。
GAE提供了比较完整的服务平台,覆盖了应用的生命周期,最近也提供了云MySQL服务以吸引更多开发者。
需要根据应用类型来考虑平台选型,例如GAE基本以API计数的配额就不适合做社交应用,‘墙’的问题也需要考虑解决方案。
----EOF----
充分利用混合模型
简介
多年来,在网络图中,我们已经习惯于使用一个云(特别是积雨云)来表示Internet。云状图像常被用来表示无固定形状的、不清晰但又必须包含在图表中的一些内容。而网络上的线惟一的作用就是穿过云以表示数据通过Internet。在以安全性为中心的图表上,这条穿过云的线可能还会在旁边多出一个挂锁以表示这个连接是安全的。
常用缩略词
现在云已经在网络图中扮演着主要角色。应用程序可以利用云来调用所添加的值,比如存储、队列及宿主应用程序。应用程序本身也可以被托管在云上。现在的线已不再是简单地穿过云,而是连接到云并将云用作应用程序的一部分。这就使云有了更实际的意义。
在本系列的第1部分,我们将着重研究一个混合示例,一个使用云计算服务和基础设施进行增强了的专用应用程序。通过研究这个混合应用程序,了解云计算的功用。为此,您需要探究它的渊源、云计算的主要提供商目前所能提供的功能。本系列的第2部分将会涵盖在第1部分中设计的这个混合应用程序的开发。第3部分将着重介绍此解决方案在安全性和管理方面的问题。
云计算究竟是什么?
IBM将云计算定义为一个新兴的计算范型,在这个范型中,数据和服务位于可大规模伸缩的数据中心中,并可被Internet上的任何连接设备随时访问。它为应用程序提供了可观的伸缩能力(在使用AmazonElasticComputingCloud的情况下—通常被称为AmazonEC2),并能托管应用程序自身。
云计算也特别适合于那些刚刚起步的公司。这些公司的创业者对投资资本家提出的问题恐怕都不会陌生,即“您的技术如何伸缩?”云计算是对此问题的一个很好的答案。然而,正如您在本系列后面的部分看到的,云计算也带来了所有权、安全与成本方面的问题。
云的形成
IBM和AmazonWebServices
在云计算得到广泛应用之前,我们使用的是网格计算与效用计算。网格计算与云计算的主要区别就是网格计算环境多是由不同的机器组成的,而云计算环境则更加可控制,后端机器通常都是相同的。效用计算是指按数据流量或应用程序的使用支付费用的一种业务模型。服务的“弹性”增长的概念也没有现在这么盛行,而随着使用的改变而相应增加(或减少)容量的能力却是云计算的一个重要部分。
从2000年初到2000年中,Google和Amazon各自独立开发了自己的云计算架构以便在其上运行各自的业务。开发了这种基础设施后,二者发现他们自已的基础设施本身成为了一个服务,可以按照每次的使用量卖给开发人员。Amazon更是意识到了其平台中的关键价值,以至于它完全相信有一天Amazon将会因其计算平台而再次名扬天下,一如它的在线零售网站一样。Amazon认识到它可以以服务的形式出售其平台(即PlatformasaService,缩写为PaaS—与SoftwareasaService即SaaS类似)。因此,Amazon常被视为是云计算商业化方面的领跑者,在计费和使用模型方面尤为突出。
在基于云的计算环境的设计方面堪称专业的成功供应商为数不多,其中包括Amazon和Google。认识到这一点,Google、IBM和几所大学组建了一个researchcloud来为从事云计算研究的学生提供一个云计算环境以便开发新的云计算技术与应用程序。尽管其规模不能与Amazon与Google的基础设施相提并论,但此项目还是为学生研究云服务提供了一个很好的环境。来自此项目的研究成果将会有助于对云计算进行更进一步的开发,比如有创建条件的组织可以在其基础上开发专用云。
混合模型应运而生
放弃所有本地应用程序而只使用云,或相反地,只依靠本地应用程序而忽略云,都不是明智之举,现在最流行的办法是将本地应用程序与云相结合使用。即所谓的混合模型。这就让一个公司在必要的时候使用云计算,而同时又能保持它对其关键应用程序的控制。例如,很多公司已经发现,使用Amazon的SimpleStorageService(S3)存储图片、视频或文档等会更经济。混合模型也有助于增量方法。
即使您认为将大部分甚至全部的应用程序都转向云更有意义,但是也不建议您这么做,因为一次性完成这样的转移风险太大。借助混合模型,可以先将容易的东西(比如文件存储)转向云。然后在您适应了这种部署模型后,再将应用程序更重要的部分转向云。这也是我在本系列中所采用的方式。接下来,让我们先看一下这个通过转移部分基础设施实现混合的应用程序。
设计一个混合应用程序
假设有一个现成的应用程序,在此应用程序的某个位置已经具有了这种系统,可以使用很多种方法实现此类系统,但一个相对优雅的方式是使用一个JMS。JMS规范是J2EE技术栈的一个重要部分。目前,针对此标准已经有很多专有或开源的实现。很容易想像有这样一个系统,它向一个JMS队列发送通知,而另外一个系统对这个JMS队列进行周期性地读取并为每个消息生成电子邮件提醒。
对于一个混合模型,可以先将这个JMS队列转移到云。换句话说,就是用在云中运行的一个服务来替代它。这是一种什么样的服务呢?如何更改应用程序以使其与此服务进行交互呢?这取决于所使用的云平台。接下来,我们来看一下各种平台及怎样使用这些平台来实现或像本例一样重新实现一个JMS队列的功能性。
AmazonWebServices
作为一个商业化云计算的先躯,Amazon提供了一系列开发人员感兴趣的成熟服务。Amazon最知名的云服务莫过于EC2(ElasticComputingCloud)服务。它允许构建可在Amazon自已的基础设施上运行的虚拟机实例(被称为AMI—AmazonMachineImages)。也许有人会说,除了使用的不是真实的计算机以及基于流量使用收费而非收取机器的租赁费之外,EC2更接近于托管提供商的一项服务。
Amazon的S3服务是一个在线存储服务,对于需要扩展存储能力的新起步的那些公司来说尤其具有引吸力。它可用作其他Amazon云服务(比如EC2)的一个附件。这就意味着一个AMI,或是一个运行着PHP的Linux计算机,可以使用AmazonS3作为它的数据存储。随着数据流量的增长,S3服也会弹性扩展。Amazon的SimpleDB是一个基于云的快速而简单的数据库,它可以提供索引、存储及访问。很显然,它比功能完善的关系数据库要简单很多,因为它不需要模式,它可以自动地索引数据,并提供了API用于存储及访问。
Amazon的SQS(SimpleQueueService)提供了一个队列服务,类似于JMS,但有一个RESTful接口。您也可以将SQS与Amazon的其他云服务联合使用,也可以将它作为任何一个可用简单的HTTPGET或POST连接到它的应用程序的一部分使用。对于这个混合应用程序,它是JMS队列的一个很好的替代品。它可以通过它的RESTful的XML接口访问到,可以方便地与一个现有应用程序集成。SQS可能是这类混合应用程序的最为直接的选择。
很多软件提供商都与Amazon有过合作以帮助其客户充分利用EC2。例如,IBM和Amazon合作开发了IBM的很多最受欢迎的企业软件,比如EC2上的DB2、Informix及WebSphere。
Google因其快速而准确的搜索而闻名,对于很多用户来说,它都是ArthurCClarke的名言“任何足够先进的技术都与魔法没有区别”的最好的体现。由于是技术将魔法变成了现实,因此Google是提供云计算平台的最佳之选。在Google的平台上运行应用程序的美好前景让开发人员无比兴奋,这完全可以理解。
Google提供了一个名为AppEngine的云计算平台,它基于的是Google早就建立起来的底层平台。这个平台包括GFS(GoogleFileSystem)和Bigtable(构建于GFS之上的数据库系统)。GoogleAppEngine内的编程采用的是Python。程序员用Python编写应用程序,然后再在AppEngine框架上运行。除Python外的其他语言在将来也会得到支持。出于开发的需要,可以下载AppEngine环境的一个本地仿真程序。AppEngine可免费使用并且包括多达500MB的存储及足够的CPU带宽来满足每天5百万次页面浏览。
GoogleAppEngine提供了一些有用的基础设施,比如源自GFS的数据存储和一个memcache实现。然而,它并不提供开箱即用的排队机制。不过,有了这样一个纯Python的编程环境,就可以在AppEngine之上很容易地创建您自已的JMS替代。这个数据存储很适合于混合应用程序,并且只需很少的Python编程就可以打造出一个面向您的队列的RESTful式接口。
MicrosoftAzure
正如您所期望的,Windows和.NET是WindowsAzure的主要特点。Microsoft已经提供了一个开发环境,在这个环境中,用VisualStudio编写的应用程序可以被托管于WindowsAzure环境并在其上运行。Azure平台提供了很多服务,比如像用于文件存储与数据访问的面向基础设施的服务,同时也提供了更为专用的服务,比如搜索和联系人管理。它还包括了NETServiceBus。这是典型的EnterpriseServiceBus(ESB)设计模式的Microsoft实现。ESB最简单的用法之一就是消息队列,它完全可以充当JSM队列的替代。NETServiceBus还是开发者友好的。它既支持使用XML的轻量的RESTful接口,也支持较重量的、包括了WS-*标准全部实现的基于SOAP的接口。这两个接口均支持现有应用程序和NETServiceBus间的简便的互操作性。
SalesForce.com
SalesForce.com提供了一个模型,借助这个模型,开发人员可以使用其Apex开发语言来访问SalesForce.com服务。SalesForce称Apex是“世界上第一个随需应变的编程语言”。随需应变主要表现在Apex代码托管于SalesForce的Force.com云服务,并在该上下文运行。在句法方面,Apex与Java或C#语言类似。
Apex代码被用来生成服务于VisualForce层的Web页面,该层就是实际的用户界面。它也使用了Model-View-Controller(MVC)模型。这非常类似于.NET中借助C#生成ASPX页面。这些VisualForce页面可以包含HTML、Ajax(XMLHttpRequest对象)及AdobeFlex。
VisualForce允许开发人员在SalesForce.comWeb界面上创建不同的变体。这对于喜欢SalesForce.com但又想向其添加功能的公司来说十分有用。与其要求SalesForce.com构建这种功能性,不如让Salesforce.com的用户通过创建VisualForce页面并用Apex代码将它们写入SalesForce.com后端来实现同样的目的。
Salesforce还提供了控制器,用来连接页面表示与来自SalesForce数据库的底层数据,包括如Edit或Save这样的标准的例程。Force.com云实现了巨大的成功。它不仅为开发人员提供了在云上构建应用程序的方法,借助它,还可以通过直接发行模型来向用户收取这些应用程序的使用费用。然而,它是一个非常专门化的云。它并不太适合增量方法。通常需要对Force.com云进行构建。
结束语
将JMS队列数据推向AmazonSQS队列
混合模型
在本文中,我将集中介绍如何向一个云提供商Amazon创建混合云应用程序。示例应用程序名为HybridCloud,它将从JMS队列中取出数据并将数据传送到寄存在Amazon云中的AmazonSQS队列。进入AmazonSQS队列之后,可以使用有权访问该队列的应用程序拉取数据。
具体情况请看示例。假设一家医疗组织需要通过图片处理应用程序处理X射线图。该组织安全地将X射线图写入AmazonSQS队列,射线图临时存储在该位置。即使X射线图的文件非常大,这对于云计算提供商而言也不是什么问题。同时,图片处理应用程序占用队列,在X射线图进入后进行读取。图片处理应用程序需要大量处理能力,因此它最好部署在虚拟环境中(私有云),在这个环境中可以快速添加硬件功能。经过图片处理应用程序的处理之后,X射线图将返回到另一个队列,可通过医疗应用程序接收。尽管X射线图是该示例的主要问题,实际上这适用于任何数据。很明显,X射线图涉及到较高的隐私和安全问题。本文的第3部分将探讨云的安全性和治理。
云计算空间
该架构的好处包括:
向AmazonSQS云服务确认身份
AmazonWebServices模型中的SecretAccessKey可以视为在Amazon.com和连接到AmazonWeb服务的开发人员之间的一个共享密匙。相反,AccessKeyID并不私密,因为它用于识别而不是验证。在第3部分中,我们将讨论这两个密匙的更多细节,以及其他云计算提供商使用的其他验证模型。
设计混合应用程序
正如开头所述,混合应用程序在本地处理数据并使用AmazonSQS云服务。因此,它有一个本地组件和一个云组件。在该应用程序设计中,通过本地从JMS队列接收数据(也许是从主机应用程序接收),然后使用HTTPGET和POST将数据发送到AmazonSQS队列。您将使用Java作为应用程序的语言。
应用程序有三个主要部分:
使用AmazonSQS
在HybridCloudJava应用程序中,首先放入AmazonSQS类(见清单1)。
清单1.导入AmazonSQS类
Importcom.amazonaws.queue.*;
HybridCloud应用程序使用AmazonSQS将数据写入队列,然后从队列读回数据。与AmazonSQS的连接建立在通过验证的Web服务连接之上,客户端使用AmazonAccessKeyID识别,使用AmazonSecretKeyID进行验证。要通过Java代码使用AmazonSQS,首先将AmazonAccessKeyID和AmazonSecretKeyID放入代码中(见清单2)。
清单2.设置Amazon键
StringaccessKeyId="12345678901234567890";StringsecretAccessKey="abcdefghijklmnopqrstuvwxyz";
接下来,实例化AmazonSQS的HTTPClient实现,传入AccessKeyID和SecretAccesskey作为变量(见清单3)。
AmazonSQSservice=newAmazonSQSClient(accessKeyId,secretAccessKey);
现在,您已经实例化了AmazonSQS客户端对象,但是还没有通过Internet连接到AmazonSQS服务。这是下一步要做的工作,您将在AmazonSQS云服务上创建队列。
创建AmazonSQS队列
该应用程序使用队列存储X射线图文件。在使用AmazonSQS队列之前,必须先创建一个队列。该队列必须有一个名称,在本例中为“imageQueue”。这是HybridCloud应用程序放置X射线图文件的地方(见清单4)。
清单4.创建Amazon队列
CreateQueueRequestrequest=newCreateQueueRequest();request.setQueueName("imageQueue");
现在运行名为createQueue的AmazonSQS服务对象方法,该方法创建对AmazonWebServices的HTTPGET(REST-style)请求以创建队列(见清单5)。
清单5.创建Amazon队列
CreateQueueResponseresponse=service.createQueue(request);
这将在AmazonSQS上创建一个REST风格的Web服务。当您运行代码创建AmazonSQS队列时,检测发送给AmazonSQS的REST风格的URL会很有趣。在此URL中,您可以清楚地看到AccessKeyID、签名(使用SecretKeyID)和实际的SQS队列,创建的队列名为imageQueue。当然,实际的SecretKeyID是不会发送的。消息的签名组件(见清单6)提供拥有SecretKeyID的证明。只有密钥持有者才能创建签名组件。
清单6.将REST风格的Web服务请求发送到AmazonWeb服务
queue.amazonaws.comAction=CreateQueue&SignatureMethod=HmacSHA256&AWSAccessKeyId=12345678901234567890&QueueName=imageQueue&SignatureVersion=2&Version=2008-01-01&Signature=U859J2Hoi5qBqlQx1R18dKPgSgrgjlOiJIDD8ug9FPI%3D&Timestamp=2009-04-01T03%3A25%3A13.575Z
现在,您已经创建了imageQueue队列,您可以将图像数据加载到其中。现在可以从本地JMS队列中获取该数据。本地队列本身可以来自虚拟环境(本地云)。
从本地JMS队列检索数据
现在已经创建了AmazonSQS队列,接下来将注意力转移到该混合应用程序的本地端。在将数据提供给AmazonSQS队列之前,您必须从本地队列中读取数据。比较本地队列使用的步骤与连接Amazon的SQS队列所需的步骤将会很有用。
需要导入Java库,首先是所有的JMSjar,然后是JNDIjar。这些文件允许Java应用程序使用JMS(见清单7)。
清单7.导入JMS类
importjavax.jms.ConnectionFactory;importjavax.jms.Connection;importjavax.jms.Session;importjavax.jms.MessageProducer;importjavax.jms.MessageConsumer;importjavax.jms.Queue;importjavax.jms.Session;importjavax.jms.Message;importjavax.jms.TextMessage;//RequiredforJNDI.importjavax.naming.*;
您使用JNDI设置JMS连接的上下文。例如,如果从文件系统读取数据,您可以使用清单8中的代码。
清单8.从本地队列读取文件
ConnectionFactorymyConnFactory;QueuemyQueue;Hashtableenv;Contextctx=null;env=newHashtable();env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");env.put(Context.PROVIDER_URL,"file:///C:/Images");ctx=newInitialContext(env);
现在创建队列和连接工厂(见清单9):
清单9.创建队列和连接工厂
StringMYCONNECTIONFACTORY="MyConnectionFactory";StringMYQUEUE="MyQueue";myConnFactory=(javax.jms.ConnectionFactory)ctx.lookup(MYCONNECTIONFACTORY);myQueue=(javax.jms.Queue)ctx.lookup(MYQUEUE);
接下来,创建一个连接,然后创建连接中的会话(见清单10)。
清单10.创建一个本地JMS队列的连接
ConnectionmyConn=myConnFactory.createConnection();SessionmySess=myConn.createSession(false,Session.AUTO_ACKNOWLEDGE);
要从队列中读取消息(在本例中最终涉及到从文件系统中读取数据,因为我们使用文件系统的JNDI标识符),使用清单11中的代码。
清单11.从本地JMS队列中读取
MessageConsumermyMsgConsumer=mySess.createConsumer(myQueue);myConn.start();Messagemsg=myMsgConsumer.receive();
现在检查从本地检索的消息中的内容(见清单12)。
清单12.检查本地检索消息的内容
if(msginstanceofTextMessage){TextMessagetxtMsg=(TextMessage)msg;StringinputText=txtMsg.getText());}
最后,关闭JMS队列的连接(见清单13)。
清单13.关闭本地JMS队列的连接
mySess.close();myConn.close();
现在,您已经将希望写入AmazonSQS队列的数据放到了名为inputText的字符串中。这是接下来要写入AmazonSQS队列的内容。
写入到AmazonSQS队列
传入到AmazonSQS队列的数据以字符串形式发送。尽管数据是图片,但它仍然以字符串形式发送到AmazonSQS。可以看到,它在SendMessageRequest对象中设置,以将消息发送到AmazonSQS队列(见清单14)。
清单14.向AmazonSQS队列发送消息
SendMessageRequestsendRequest=newSendMessageRequest();sendRequest.setMessageBody(inputText);
您必须设置相应的队列名称,这与您之前创建的队列名称相同(见清单15)。
清单15.设置AmazonSQS上的队列名称
sendRequest.setQueueName("imageQueue");
现在通过使用AmazonSQS对象的sendMessage方法将消息发送到AmazonSQS队列(见清单16)。
清单16.将我们的数据发送到AmazonSQS队列
SendMessageResponseresponse=service.sendMessage(sendRequest);
读取AmazonSQS响应
接下来从AmazonSQS队列读取响应。首先创建ReceiveMessageRequest对象(见清单17)。
清单17.创建ReceiveMessageObject从AmazonSQS队列中检索数据
receiveRequest=newReceiveMessageRequest();
接下来,设置队列名称(见清单18)。
清单18.设置队列名称
receiveRequest.setQueueName("imageQueue");
现在使用receiveMessage方法尝试从AmazonSQS队列中检索消息(见清单19)。
清单19.从AmazonSQS队列中检索响应
ReceiveMessageResponseresponse=service.receiveMessage(receiveRequest);
要检测结果,包括从云中检索到的消息ID和消息正文(见清单20),请将其传递到标准输出。
清单20.检查AmazonSQS队列中的响应
if(response.isSetReceiveMessageResult()){ReceiveMessageResultreceiveMessageResult=response.getReceiveMessageResult();java.util.List
使用XML网关连接本地应用程序和云
在本文中,使用Java代码连接本地应用程序和云计算环境。这是开发人员的理想解决方案,但作为应用程序的一部分,到Amazon云计算服务的连接不在网络运营团队的控制之下,网络运营团队监控使用、通信和可用性。此外,任何到云计算连接的更改都涉及到代码更改。尽管这超出了本文的范围,但可以使用网络基础结构在本地JMS队列和AmazonSQS云服务之间实现相同的连接,从而将连接置于网络运营团队的控制之下。
要将一个本地应用程序组件(比如JMS队列)连接到云,需要一个包含云计算连接器的XML网关(见参考资料中此类网关的示例)。将JMS队列连接到AmazonSQS队列的任务涉及到拖放连接筛选器,从而将数据从JMS队列中拉出然后传递到Amazon云服务。
这与我们熟悉的有线电视机顶盒很类似。电视机顶盒连接本地基础设施(电视机)和云(有线电视操作员)。XML网关提供本地有线电视机顶盒的功能。除了提供到云服务的连接之外,它还提供对该连接的监控和安全性。
您了解了Java应用程序如何将本地JMS队列和AmazonSQS云连接起来。您的HybridCloud应用程序使用本地资源(JMS队列)和基于云的资源(AmazonSQS)执行示例图片共享任务。使用比较类似的方法连接本地队列和AmazonSQS队列,但是在网络级别上,到AmazonSQS的连接通过HTTPGET和PUT(包含URL中传递的参数)发送。
在第3部分,即本系列的最后一部分,您将了解云计算中的治理和安全问题。您将看到各种云提供商使用的验证模型,并将讨论在隐私性、法规遵从性方面出现的问题和针对拒绝服务威胁提供的保护。
参考资料
学习
获得产品和技术
讨论
关于作者
MarkO'Neill是Vordel的CTO,这是一家XML网络公司。他还是“WebServicesSecurity”一书的作者,另外也参与了“HardeningNetworkSecurity”一书的写作,两本书均由McGraw-Hill/OsborneMedia出版。Mark负责监督Vordel的产品开发路线图,并建议Global2000公司和各国政府战略性地采用XML、Web服务和SOA技术。他具有TrinityCollegeDublin的数学与心理学的学位,并从牛津大学获得了神经网络编程的硕士学位。Mark现生活在马萨诸塞州的波士顿。