3.2 新浪云环境搭建
Sina App Engine(SAE)是新浪公司(sina.com.cn)推出的一款云应用引擎,自2009年11月问世后,SAE一直受到开发者的青睐。到2013年11月份为止,SAE已经有100余万用户,累计托管的应用数约有750万个。一些成熟的软件和框架(如Wordpress、CodeIgniter、Yii等)都被移植到SAE。其中,Wordpress的安装次数已经超过11万次,异常火爆。
SAE现在支持多种语言,包括PHP、Java、Python、NodeJS、Go,采用不同技术的开发者都可以使用SAE服务。除了网页应用,SAE也有移动云平台,可以开发移动应用。
SAE吸引了大量开发者,并体现了新浪的一贯作风:一流客服+一流运营。就易用性和稳定性而言,要远远超过其他竞争者。
这里从应用创建、本地开发环境和SAE常用服务等方面介绍基于SAE的开发环境搭建。
3.2.1 应用创建
1.注册账号
SAE采用新浪微博账号体系进行登录,需要有一个新浪微博账号或邮箱。
进入SAE官方网站(http://t.cn/RGrPouX)后,在页面顶部右上角可以看到“注册”链接,如图3-6所示。
进入“SAE新浪云计算平台”登录页面后,如果你已经有了新浪微博账号,在此页面输入账号和密码,单击“登录”即可,如图3-7所示。
图3-6
图3-7
如果你还没有新浪微博账号,就先单击右上角的“注册”链接,用邮箱注册一个新浪微博账号,再返回此页面进行登录。
登录后进入授权页,单击“授权”按钮即可完成,如图3-8所示。
图3-8
这样就完成了SAE的注册,SAE的账号就是微博账号。
2.使用SVN部署代码
SAE代码部署的原理图如图3-9所示。
图3-9
SAE有4种代码管理方式:在线安装应用、在线编辑、本地开发环境上传和SVN部署。
在线安装的方式适用于安装SAE应用仓库(http://sae.sina.com.cn/?m=appstore)里的Web应用和开发框架,安装后可以直接使用。这类应用包括开源博客系统Wordpress、开源PHP框架CodeIgniter、Yii和ThinkPHP等。后续需要修改代码,可以通过在线编辑和SVN等方式实现。
在线编辑器可以在应用的“代码管理”部分找到,如图3-10所示。如果通过在线代码编辑器对代码进行修改、部署等操作,也会和执行svn commit一样,产生新的提交,以使用SVN客户端执行svn update获取最近的更新或其他操作。
图3-10
本地开发环境见3.2.2节。
这里推荐SVN部署,优势在于任何对代码的修改都有记录,可以回退到任意的历史版本。
在Windows下开发应用推荐Tortoise SVN客户端,下载地址为:http://tortoisesvn.net/downloads.html。如果在浏览器中打不开,那么可以在各软件商店搜索Tortoise SVN下载。
应用对应的SVN配置为:
3.准备工作
完成了账号申请和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所示。
在弹出的页面中填写仓库路径,如https://svn.sinaapp.com/weixinproject100(其中weixinproject100是刚创建的应用名称),如图3-15所示。
图3-14
图3-15
图3-16
单击OK按钮,开始执行update操作,如果是第一次使用,就会弹出Authentication窗口进行身份验证。(另外,如果不希望每次使用都进行身份验证,可以勾选Save authentication复选框),如图3-16所示。
- username:注册SAE时填写的安全邮箱(并非微博账号)
- password:注册SAE时填写的安全密码(并非微博密码)
身份验证成功后SVN会自动将应用同步到本地工作目录中,并创建以应用命名的文件夹。
接下来需要创建一个版本,在该文件夹中创建一个新的文件夹,作为这个应用的版本(注意文件夹的名称就是应用的版本号,必须是正整数,如1, ...)。
现在可以使用最喜欢的编码工具(如EditPlus、Notepad++等)在该文件夹下创建第一个页面,如index.php(如果创建的是PHP应用),文件内容如下:
<?php echo ' Welcome to SAE!'; ?>
完成后,该文件左侧会出现一个红色的“!”,右击该文件,在弹出的菜单中选择SVN Commit...,执行提交操作,如图3-17所示。
在弹出窗口的Message处填写更新的理由,单击OK按钮,即可完成代码的上传。
在浏览器中输入应用的地址就可以马上访问了,本例地址为http://weixinproject100.sinaapp.com(其中weixinproject100为应用名称),如图3-18所示。
图3-17
图3-18
如果提交代码时出现“非法的目录或文件”的错误,就要注意目录是否使用了中文。如图3-19所示,文件名为“新建文件夹”,改为英文就可以避免此问题了。
图3-19
3.2.2 搭建本地开发环境
为方便开发者测试开发,SAE提供了本地开发环境。它们都能模拟SAE的大部分功能和服务,在本地开发环境开发和调试不用频繁上传代码,不但节省时间,而且可以减少调试程序时调用SAE服务造成的云豆消耗。
SAE本地开发环境集成了Apache、PHP、Redis等服务,又用PHP文件模拟SAE的Storage、KVDB、FetchURL等服务。这是一个绿色软件,解压缩之后可以直接运行。值得注意的是,该软件没有集成MySQL,如果在开发应用时用到,需要自行配置。该软件没有可视化界面,只有命令行方式,仅支持Windows操作系统。
1.下载与环境初始化
SAE本地开发环境可以在SAE公共资源加速网站(http://lib.sinaapp.com/)获取,单击页面底部的SAE Local Environment(Windows)链接即可下载。
下载到本地的文件是SAE Local Environment-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本地模拟环境数据清理工具
图3-20
运行本地开发环境只需要执行init.cmd脚本即可。如果你的Windows操作系统为XP,请确保当前登录用户是计算机管理员;如果为Windows 7、Vista、Windows 8、Windows 8.1等,需要使用管理员身份运行,如图3-20所示。
Init.cmd脚本的运行场景如图3-21所示,可以看到启动了Apache和Redis等服务。当Windows命令行界面出现“LocalSAE>”字符时,表示SAE本地模拟开发环境启动成功,可以使用了。
图3-21
2.常用应用管理命令
现在我们要创建一个名称为demo的应用,步骤大致为:创建应用→选择应用→创建版本→更新配置文件(可选)。
(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-22和图3-23所示。
图3-22
图3-23
3.2.3 SAE常用服务
SAE的常用服务包括云计算类和云存储类,前者解决程序运行问题,后者解决数据存储问题。
1.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差别很大,表3-1对二者进行了比较。
表3-1 DeferredJob与TaskQueue的比较
(7)Channel:实时消息推送服务
Channel是SAE为开发者提供的实时消息推送服务,用来支持实时性较高的应用,如游戏、在线聊天室、在线直播等。Channel服务在2014年2月14日正式对外开放。
2.SAE云存储类服务
云存储是与云计算密切相关的重要研究方向。优秀的云存储平台需要具备以下几个条件:
- 安全。这是云存储的首要要求。数据不能被授权之外的人或机器窃取,并且保证数据完整。
- 透明化。当用户通过云存储平台读取或存放数据时,只需通过平台提供的接口读写,无须关心数据存储在哪块物理磁盘,也无须担心物理磁盘是否已满等。
- 按需分配。用户只为自己使用的服务付费。举例来说,某用户存储数据用了20M空间,那么只需要支付20M空间的钱,肯定不会花费一个磁盘的钱。
- 动态服务。动态意味着可扩展。例如,一个刚上线的产品,前期访问人数较少,这时所需的云计算和云存储资源也较少,某一天运营发起了一个给力的营销活动,访问人数暴增,这时平台需要有可扩展性,以应对突如其来的流量。
作为优秀的应用引擎,SAE提供了多种云存储类服务,包括MySQL、Storage、Memcache、KVDB、Counter和Rank,对企业用户还提供CDN服务。
图3-24所示是SAE云存储类服务的概括图。从是否为关系型数据库来分类,云存储类服务可分为关系型数据库和非关系型数据库。从严格意义来说,Memcache、Counter和Rank不算是数据库。这里的分类着重是否为SQL或NoSQL。
图3-24
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,提供分布式key-value数据存储服务。据SAE文档所述,KVDB对每个用户可支持100GB的存储空间,可支持10亿条记录,并且高性能、高可靠,读写可达10bit/s。
Memcache为开发者提供分布式缓存服务,主要用于缓存程序中经常读取,又在一段时间内不变的数据,其使用与标准Memcache一致。
Counter为开发者提供计数器服务。例如,中国好声音网上投票每秒钟有数以万计的人参与,这时对云存储的要求是高并发情景下处理计数的能力。Counter简化了计数应用的开发,通过API即可对计数器进行加减操作,得到统计结果。
Rank是为开发者提供的分布式环境下的排行榜服务,其特点是快速可靠,可以用于实时环境。利用Rank服务可以轻松实现热门文章排行、用户活跃度排行等。
3.2.4 新浪云虚拟主机
前面介绍了新浪云应用SAE的创建与使用方法。SAE与普通的虚拟主机环境相比,最大的差异是不允许本地读写,如果现有项目运行时需要修改本地代码,就必须进行兼容处理。
新浪云又推出了云虚拟主机来解决这个问题。云虚拟主机是新浪云计算结合多年云计算经验推出的新一代虚拟主机服务。
和传统虚拟主机服务相比,有如下优点:
- 可靠性高(可用性达到99.99%)。
- 性能强大(最高可具有传统虚拟主机10倍的性能)。
- 操作方便。
和云计算服务相比,有如下优点:
- 操作简单。
- 一键部署。
- 完美兼容所有环境。
云虚拟主机本地可读写,并带有免费的数据库,创建后可以直接运行各种主流的PHP框架和系统。同时只限制网络的带宽,没有流量限制,一次付费,任意使用。除初始化费用之外不收取任何费用。
创建虚拟主机
进入管理控制台可以查看当前拥有的虚拟主机,单击左上角的“创建主机”按钮,进入创建主机页面,在页面中选择好套餐、语言环境、购买时间等,阅读并同意《新浪云产品使用协议》后,单击右侧的“创建主机”按钮,即可创建虚拟主机,如图3-25所示。
图3-25
创建主机后,可以单击主机进行管理,如图3-26所示。
图3-26
主机概览
在主机概览页面可以汇总查看虚拟主机的各项功能指标,如到期时间、主机信息、使用情况、服务状态等,同时还有FTP和MySQL服务的连接信息,以及数据的快捷管理方式,如图3-27所示。
图3-27
代码管理
目前虚拟主机提供3种代码管理方式,即FTP管理、在线编辑和代码包上传。
在代码管理页面可以查看FTP的详细信息,包括连接地址和用户名密码等,可以通过FTP客户端连接并上传代码文件,同时可以通过在线编辑器直接管理代码,或者通过上传zip代码压缩包的形式上传代码。
注解
若不需要使用FTP上传功能,则建议关闭FTP服务(见图3-28),避免因为用户名密码被恶意猜测导致网站代码泄漏或被黑客利用。
图3-28
数据库管理
虚拟主机创建后,会自动创建一个MySQL数据库供使用,数据库的相关连接信息在数据库管理页面显示,同时可以通过在线phpMyAdmin直接管理数据库中的数据,如图3-29所示。
图3-29
域名管理
虚拟主机可以方便地绑定独立域名使用,可以绑定的独立域名个数和等级相关,在域名管理界面可以方便地对独立域名进行绑定、解绑等操作,如图3-30所示。
图3-30
日志管理
在日志管理界面可以查看当前主机的访问日志和错误日志,并且可以单击“下载日志”下载所需要的日志文件,如图3-31所示。
图3-31
高级设置
高级设置提供了对虚拟主机的高级配置,其中包括对PHP、默认首页、自定义错误页面等配置,如图3-32所示。
图3-32
网站监控
网站监控可以监控网站的运行状态,包括请求数、流量等信息,如图3-33所示。
图3-33