Sina App Engine(SAE)是新浪公司(sina.com.cn)推出的一款云应用引擎,自2009年11月问世后,SAE一直受到开发者的青睐。到2013年11月止,SAE已经有近40万开发者,共托管了约56万个应用。一些成熟的软件和框架,如WordPress、CodeIngiter、YII等,都被移植到SAE。其中WordPress的安装次数已经超过11万,异常火爆。
SAE现在支持多种语言如PHP、Java、Python,采用不同技术的开发者都可以使用SAE服务。除了网页应用,SAE也有移动云平台,可以开发移动应用。
SAE吸引了大量的开发者。SAE体现了新浪的一贯作风:一流客服+一流运营,就易用性和稳定性而言,要远远超过其他竞争者。
这里从应用创建、搭建本地开发环境和SAE常用服务等方面,介绍如何搭建基于SAE的开发环境。
SAE采用新浪微博账号体系进行登录,所以你需要有一个新浪微博账号或邮箱即可。
进入SAE官网(http://sae.sina.com.cn/),在页面顶部右上角可以看到“注册”链接,如图3-6所示。
图 3-6
进入了“SAE新浪云计算平台”的登录页面。如果你已经有新浪微博账号,在此页面输入账号和密码,点击“登录”即可,如图3-7所示。
如果你还没有新浪微博账号,请先点击右上角的“注册”链接,用邮箱注册一个新浪微博账号,再返回此页面进行登录。
登录后进入授权页,点击“授权”按钮即可完成注册,如图3-8所示。
图 3-7
图 3-8
至此,你已经完成了SAE的注册,SAE的账号就是你的微博账号。
SAE有四种代码管理方式:在线安装应用、在线编辑、本地开发环境上传和SVN部署。
在线安装应用的方式,适用于安装SAE应用仓库(http://sae.sina.com.cn/?m=appstore)里的Web应用和开发框架,安装后可以直接使用。这类应用包括开源博客系统WordPress、开源PHP框架CodeIgniter、Yii和ThinkPHP等。后续需要修改代码,可以通过在线编辑和SVN等方式实现。
为方便用户在线编辑代码,SAE提供了在线编辑器,通过在线编辑器可以创建、编辑、上传代码和文件。在线编辑器可以在应用的“代码管理”部分找到,如图3-10所示。如果通过在线代码编辑器对代码进行修改、部署等操作,也会和执行svn commit一样,产生一个新的提交,即可以使用SVN客户端执行svn update获取最近的更新或其他操作。
图 3-9
图 3-10
本地开发环境见3.2.2节。
这里推荐SVN部署,其优势在于,对代码的任何修改都有记录,可以回退到任意历史版本。
在Windows下开发应用,推荐使用Tortoise SVN客户端,下载地址为:http://tortoisesvn.net/downloads.html。应用对应的SVN配置如下:
·SVN仓库地址:https://svn.sinaapp.com/YOUR_APP_NAME
·SVN用户名:SAE安全邮箱
·SVN密码:SAE安全密码
完成了账号申请和SVN安装,接下来就可以开始创建第一个应用了。
首先登录SAE,访问我的首页(http://sae.sina.com.cn/?m=dashboard),单击“创建新应用”按钮,如图3-11所示。
页面会弹出提醒,禁止创建包含违法、违规或“擦边球”内容的应用,如图3-12所示。
图 3-11
图 3-12
填写二级域名、应用名称等,单击“创建应用”按钮,应用就被创建了,如图3-13所示。所填写的域名就是应用的访问地址。需要注意的是应用创建后,二级域名和开发语言不可修改,请慎重填写。
图 3-13
现在选择你的本地工作目录,如G:\sae。单击鼠标右键,在弹出的菜单中选择“SVN Checkout”命令,如图3-14所示。
图 3-14
在弹出页面中填写仓库路径,如:https://svn.sinaapp.com/weixinproject100(其中weixinproject 100是刚创建的应用名称),如图3-15所示。
图 3-15
单击“OK”按钮开始执行update操作,如果是第一次使用会弹出Authentication窗口进行身份验证(另外,如果不希望每次使用都进行身份验证,可以勾选“Save authentication”复选框),如图3-16所示。
图 3-16
·username:注册SAE时填写的安全邮箱(并非微博账号)
·password:注册SAE时填写的安全密码(并非微博密码)
身份验证成功后SVN会自动将应用同步到本地工作目录中并创建以应用命名的文件夹。
接下来需要创建一个版本,在该文件夹中创建一个新的文件夹作为这个应用的版本(注意文件夹的名称就是应用的版本号,必须是正整数)。
现在可以使用你最喜欢的编码工具(如:EditPlus、Notepad++等)在该文件夹下创建你的第一个页面,如index.php(如果你创建的是PHP应用),文件内容如下:
<?php echo ' Welcome to SAE!'; ?>
完成后,该文件左侧会出现一个红色的“!”,右键单击该文件,在弹出的菜单中选择“SVN Commit...”,执行提交操作,如图3-17所示。
图 3-17
在弹出窗口的Message处填写更新的理由,点击“Ok”,即可完成代码的上传。
现在,在浏览器中输入应用的地址,就可以马上访问。本例地址为http://weixinproject100.sinaapp.com(其中weixinproject100为应用名称),如图3-18所示。
图 3-18
为方便开发者测试开发,SAE提供了本地开发环境。它们能模拟SAE的大部分功能和服务,在本地开发环境中进行开发调试,无须频繁地上传代码,不但节省时间,而且减少调试程序时调用SAE服务造成的云豆消耗。
SAE本地开发环境集成了Apache、PHP、Redis等服务,又用PHP文件模拟SAE的Storage、KVDB、FetchURL等服务。这是一个绿色软件,解压缩之后可以直接运行。值得注意的是,该软件没有集成MySQL,如果在开发应用时用到,需要自行配置;该软件没有可视化界面,只有命令行方式。目前版本为1.3.0,仅支持Windows操作系统。
SAE本地开发环境可以在SAE公共资源加速网站(http://lib.sinaapp.com/)获取,点击页面底部的“SAE Local Environment(Windows)”链接即可下载。
下载到本地的文件是SAELocalEnvironment-windows-1.3.0.zip,解压缩后看到的文件目录结构如下:
bin <DIR># 可执行文件/ 程序目录,Apache 、PHP 、Redis 等都在此文件夹下 emulation <DIR># 环境模拟文件,用来模仿SAE 环境,包括FetchUrl 、Storage 等 storage <DIR>#storage 存储目录 tmp <DIR># 临时目录 wwwroot <DIR># 根目录,网站代码应放在此处 changelog # 变更历史 init.cmd #SAE 环境初始化脚本 readme # 帮助文本,介绍环境的常见命令 sae.conf #SAE 配置文件,可配置Apache 、Redis 、MySQL 等参数 tool.cmd #SAE 本地模拟环境数据清理工具
运行本地开发环境只需要执行“init.cmd”脚本即可。如果你所使用的是Windows XP操作系统,请确保当前登录用户是计算机管理员;如果为Win7、Vista、Win8、Win8.1等,需要使用管理员身份运行,如图3-19所示。
图 3-19
“Init.cmd”脚本的运行场景如下,可以看到启动了Apache和Redis等服务。当Windows命令行界面出现“LocalSAE>”字符时,就表示SAE本地模拟开发环境启动成功,可以使用了,如图3-20所示。
现在我们要创建一个名为“demo”的应用,步骤大致为:创建应用→选择或切换应用→创建版本→更新配置文件(可选)。
图 3-20
(1)创建应用
命令如下:
LocalSAE> capp demo 应用创建成功
创建成功后,wwwroot目录下自动增加了一个名为“demo”的文件夹。
(2)选择或切换应用
因为可能同时存在多个应用,所以使用前需要切换到当前开发的应用。
LocalSAE> use demo 已切换当前应用
如果想查看当前选择的应用,可以用sapp命令。
LocalSAE> sapp demo
(3)创建版本
版本的意义在于你的应用可以同时以多个面目存在,推出新版本时又需要保留旧版,这种情况下多版本就很有必要。SAE最多允许创建10个版本,并且版本号必须为正整数。运行以下命令:
LocalSAE> cversion 1 创建版本成功
在你的应用目录下,会添加名称为“1”的文件夹。
还可以设置一个默认版本,当用户访问时,会首先呈现默认版本。
LocalSAE> defver 1 设置默认版本成功
同时可以查看当前默认版本号:
LocalSAE> sversion 1
(4)更新配置文件
由于你的操作会更改config.yaml文件,完成以上步骤后,需要更新config.yaml文件,保证你的操作生效。
更新单个版本的配置文件:
LocalSAE> upconfig 1 config.yaml 文件更新成功
更新应用的所有版本下的配置文件:
LocalSAE> upallconfig demo 应用的config.yaml 文件更新成功
至此,我们创建了一个名为“demo”的应用,默认版本号为1。按照SAE的路由规则,我们可以通过demo.sinaapp.com或1.demo.sinaapp.com访问刚才创建的应用。
要在本地访问,是否要配置HOSTS?
打开HOSTS文件(默认位置在C:\Windows\System32\drivers\etc\hosts,如果没有请查看%Systemroot%\System32\drivers\etc\hosts,其中%Systemroot%指系统安装路径),发现SAE已经给配好了。
127.0.0.1 demo.sinaapp.com 127.0.0.1 1.demo.sinaapp.com
在浏览器中打开1.demo.sinaapp.com和demo.sinaapp.com,发现SAE已经在欢迎我们了,如图3-21和图3-22所示。
图 3-21
图 3-22
SAE的常用服务包括云计算类和云存储类,前者解决程序运行问题,后者解决数据存储问题。
云计算有两个重要的特点:
·分布式。将大量廉价的计算机通过共享网络(如互联网)连接起来,共同运行程序或应用。
·弹性计算。云计算提供的服务应该能根据用户的资源使用量动态调整,而用户只需为自己使用的资源付费。
为此SAE提供了多种云计算服务来满足各种场景业务的需求。
(1)Cron:定时服务
Cron服务是SAE为开发者提供的分布式定时服务,用来定时触发开发者的特定动作。Cron的应用场景主要是让用户可以在指定的时间执行一些计划任务,可以分为两类:
·每隔一定时间执行,例如每30分钟更新一下排行榜。
·在某个特定时间点执行,例如每天0点备份数据库。
(2)Image:图像处理服务
Image是SAE为开发者提供的分布式图像处理服务,用来同步地对图片进行CPU密集型操作。Image服务封装了一些常见的图像处理方法,包括缩放、水平翻转、垂直翻转、裁剪和添加文字/图片水印等,可以满足一般需要。
(3)FetchURL:网页抓取服务
FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步抓取http页面。
FetchURL主要用于发起http请求,包括get和post,并且支持https和重定向。
(4)Mail:邮件发送服务
Mail是SAE为开发者提供的分布式邮件发送服务,用来异步发送标准SMTP邮件。Mail常见的应用场景是注册账号时发送确认邮件、发送订阅内容等。
(5)TaskQueue:任务队列服务
TaskQueue是SAE为开发者提供的分布式任务队列服务,用来以异步HTTP方式执行用户任务。SAE提供了顺序队列和并发队列,顺序队列的任务顺序执行,而并发队列中的任务则以并行的方式执行。对于没有数据关联的任务,可以使用并发队列来批量处理。
(6)DeferredJob:离线任务服务
DeferredJob是SAE为开发者提供的分布式重量级的长时间离线任务执行队列。DeferredJob通常用于没有截止时间限制、数据量大并且运行时间较长的任务,例如用户的数据库大文件导入/导出、数据库批量操作等。同样是任务队列,DeferredJob与TaskQueue差别很大,这里做一个比较,如下表所示。
(7)Channel:实时消息推送服务
Channel是SAE为开发者提供的实时消息推送服务,用来支持实时性较高的应用,如游戏、在线聊天室、在线直播等。Channel服务在2014年2月14日正式对外开放。
云存储是与云计算密切相关的一个重要研究方向。与云计算一样,优秀的云存储平台需要具备以下几个条件:
·安全。这是云存储的首要要求。数据不能被授权之外的人或机器窃取,并且保证数据完整。
·透明化。当用户通过云存储平台读取或存放数据时,只须通过平台提供的接口去读写,无须关心数据存储在哪块物理磁盘,也无须担心物理磁盘是否已满等。
·按需分配。用户只为自己使用的服务付费。举例来说,某用户存储数据用了20M空间,那他只用支付20M空间的钱,肯定不会花费一个磁盘的钱。
·动态服务。动态意味着可扩展。例如,一个刚上线的产品,前期访问人数较少,这时所需的云计算和云存储资源也较少;某一天,运营人员发起了一个给力的营销活动,访问人数暴增。这时平台需要有可扩展性,来应对突如其来的流量。
作为优秀的应用引擎,SAE提供了多种云存储类服务,包括MySQL、Storage、Memcache、KVDB、Counter和Rank,对企业用户还提供CDN服务。
图3-23是SAE云存储类服务的结构图。从是否为关系型数据库来分类,云存储类服务可分为关系型数据库和非关系型数据库。从严格意义来说,Memcache、Counter和Rank不算是数据库。
图 3-23
SAE上的关系型数据库是MySQL。SAE上的MySQL服务和普通MySQL服务几乎一样,所以你可以按照常规的MySQL使用方法来使用。
非关系型数据库即近年来得到广泛关注和发展的NoSQL。NoSQL是Not Only SQL的简写,意为“不仅仅是SQL”。它不是单纯地反对关系型数据库,而是强调根据应用所需业务的不同,灵活地采用键值、文档、图形关系等数据库的优点,来达到高并发(High Performance)、大存储(Huge Storage)、高可扩展性和高可用性(High Scalability & High Availability)的目的。下面对SAE的几个非关系型数据库做一个简介,详细分析见后续各章节。
Storage属于文档型数据库,从SAE早期文档中可以看到,其存储系统采用著名的文档型数据库MongoDB的GFS文件存储(MongoGFS)。Storage为开发者提供分布式文件存储服务,用来存放用户的持久化存储的文件,例如用户上传的图片、附件等。
KVDB属于键值型数据库,类似于Redis,提供分布式键值数据存储服务。据SAE文档所述,KVDB对每个用户可支持100G的存储空间,可支持10亿条记录,并且高性能高可靠,读写可达10w qps。
Memcache为开发者提供分布式缓存服务,主要用于缓存程序中经常读取又在一段时间内不变的数据,其使用与标准的Memcache一致。
Counter为开发者提供计数器服务。例如中国好声音网上投票,每秒钟有数以万计的人参与,这时要求云存储具有在高并发情景下处理计数的能力。Counter简化了计数应用的开发,通过API即可对计数器进行加减操作,得到统计结果。
Rank是为开发者提供的分布式环境下的排行榜服务,其特点是快速可靠,可以用于实时环境。利用Rank服务可以轻松地实现热门文章排行、用户活跃度排行等。