作者:阿里云用户mr_wid ,z)NKt#   @I6A9do   如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV   RsfTUb)<   投票标题:  28、【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』;作者:mr_wid 5yi q#   G5J ZB7C   投票地址: http://bbs.aliyun.com/read/178799.html?spm=5176.7189909.0.0.b88gbW $ow`)?sh   Jjh!/pWZ4   e*6` dz@   附件: 演示代码及Demo应用"徽博"项目下载WCTW#<izm   ace-huibo-project.zip (57 K) 下载次数:7

评测介绍   •评测产品: 云引擎ACE服务 •开发语言: PHP •评测人: mr_wid •评测时间: 2014年10月13日-19日     评测概要   非常有幸能够申请到ACE的公测资格, 在本篇评测中, 笔者将以一个开发者的角度来对云引擎ACE服务进行介绍与使用。在本篇评测中, 您将看到:•ACE能够做些什么 •ACE应用的创建与发布 •应用的配置与调试 •ACE扩展服务的使用 •评测总结及建议 •附件: 演示代码及Demo应用"徽博"项目下载                ACE能够做些什么   阿里云应用引擎(ACE)是阿里云计算推出一款基于弹性扩展的网络应用托管平台, 通俗的讲,可以将其看做一个无需进行复杂配置的就可以快速进行部署、发布Web应用程序的应用运行平台, 且能根据应用负载情况自动弹性伸缩应用所需资源,使应用性能时刻维持在最佳状态。告别节日、活动等大量流量涌入时, 现有硬件无法支撑应用的运行, 而又临时无法解决的尴尬情况。   在ACE上, 用户只需将编写好的程序、资源通过svn提交到ACE, 而无需再关心服务器的维护、软件的配置等细节。使开发者/用户能够集中精力编写、运营ACE中托管的应用程序, 从而从繁重的服务器运维工作中解放出来。   ACE除了能够让你轻松部署出属于自己的WordPress博客、Discuz论坛等常规网站类应用, 同时配合ACE的扩展服务, 同样能通过编写 Web API/Services 对移动APP、桌面应用等提供强大的后台支撑能力。               ACE应用的创建与发布   创建一个ACE应用的过程是十分愉快的, 只需为它填上精心准备的应用名称与二级域名, 再选上开发语言, 就可以创建了。如图所示, 笔者创建了一个名为 ACE公测评测 的应用, 并且二级域名为 wid-ace-test.aliapp.com,等应用发布后, 便可以通过二级域名进行访问。   此外, 也可将自己注册的域名的来"替换"这个二级域名进行访问, 具体操作作为后话, 暂且按下不表。

在应用环境的模式选项, 有单实例和集群模式可选, 集群模式是指在同一时间内, 应用有多个实例同时运行, 在运行过程中, 即便有其中一个实例发生运行故障, 也几乎不会影响应用的正常访问。   对于弹性策略, 可以说是ACE服务的最大亮点之一, 开启自动弹性后, 能让应用程序真正做到了不再担心可用资源是否充足、应用是否达到了性能瓶颈等问题。     实例模式与弹性策略在应用创建后也是可以根据需要随时切换的, 所以不用纠结自己的应用在创建时应该选择哪种模式。点确定创建应用, 并返回查看这个已创建的应用信息, 如图:

接下来, 我们创建一个仅有一个页面的Web网站程序, 并且在接下来的评测中慢慢扩展它。   ACE目前使用SVN的方式来提交应用, SVN是一个开源版本控制系统, 管理方便, 易于维护, 在Windows、Linux、OS X下均有相关的svn客户端, 本文中以Windows下的 TortoiseSVN 为例来创建应用仓库和提交应用。     首先在ACE应用的版本管理页生成一个应用仓库, 选择 生成SVN, 在弹出的对话框中选择创建空一个的SVN目录:

得到了SVN地址, 就可以通过SVN客户端对项目执行SVN检出(Checkout), 在检出的过程,是通过阿里云账号和SVN密码进行身份验证的, 第一次使用时, 需要为SVN设置认证密码(见上图), 否则无法正常检出。   在目标目录下, 右键,SVN检出, 检出流程如图:

成功后, 在检出目录下将多出如图中所示的文件/文件夹。webroot 为站点的根目录, 在 webroot 目录下的文件, 除在配置里做特殊设置外, 均能被用户通过浏览器直接访问, 因此, 较为敏感的文件, 不要放在该目录中。     app.yaml , 应用的配置文件, 可以配置URL重写、防盗链、访问控制等。   发布第一个应用   在第一个应用中, 将使用经典的 phpinfo 函数来查看ACE服务中的PHP环境详细情况。在 webroot 目录下, 新建 phpinfo.php 文件并添加代码:

添加代码中应注意将代码保存为 UTF-8 无 BOM 编码方式(不同文本编辑器下操作有所不同), 避免出现不必要的麻烦。   接下来使用SVN将新添加的phpinfo页面提交到ACE中, 操作过程如图:

提交成功后, 到ACE管理页面, 在 版本管理 项, 选择 "发布" 应用。约1分钟后, 即可通过二级域名访问。

从 phpinfo 的信息中可以看到, ACE服务的PHP版本为5.4.14,  并且启用了常用的一些扩展, 所以绝大多数之前编写好的PHP应用, 都可以不加修改的直接在ACE上运行。   ACE的Web服务器程序选用的是Tengine, 由淘宝网发起的Web服务器项目, 目前已开源, 基于Nginx 1.4.7, 对其进行了大量的改进与优化, 使得性能与稳定性上都有了进一步的提升。详情参见 http://tengine.taobao.org/   绑定外部域名   若需要使用独立的域名, 如 www.example.com 来代替 xxx.aliapp.com 进行访问, 可在应用控制面板中添加一个外部域名绑定, 并在域名服务商那添加 CNAME 记录解析到 ACE 的二级域名, 即可完成绑定。绑定的条件是域名必须是经过备案的。               应用的配置与调试   在这之前, 我们先将第一个应用进行扩展, 使它看起来更有意义一点。 对的, 我们来做一个超级简约的"匿名社交网站"(好吧, 其实就是一个匿名留言板), 名字笔者都想好了, 就叫徽博好了。   由于这个应用与第一个发布的应用并无太大联系, 或者说功能改进实在太大, 我们选择重新生成一个空的SVN目录, 即一个新的版本, 这样做的好处之一就是, 等新的版本上线了, 又突然发现新版本存在若干重大BUG, 那么我们就可以快速一键切换回旧版本。 数据库采用ACE提供的MySQL数据库服务, 在控制面板的扩展服务将其打开。

"徽博" 是这次ACE评测中笔者"临时起意"编写的一个小Web应用, 所有的源码、资源文件以及文档等, 将会以附件的形式放在评测的最后。来一起看一下 1.0 版本的徽博真面容。用我好友的话说, "徽博"有着一个不忍直视的前端配色。外加奇葩 -_-|||

PS: 独创的随便登录, 无需注册, 更是让徽博独具"特色"。演示地址: http://wid-ace-test.aliapp.com/   配置应用   通过编辑 app.yaml 配置文件可对应用做代码层配置, app.yaml 在wwwroot目录的同级目录下, 可以配置目录权限、IP黑白名单、URL重写、防盗链等。ACE还提供了xml版本的配置语法, 配置文件为 app.xml, 同样与 wwwroot 同级目录, 可手动创建, 当 app.xml 与 app.yaml 同时存在时, 仅有 app.xml 配置文件生效。   限制: app.yaml 与 app.xml 文件大小最大均不得超过 1.6k 字节。 修改配置文件后, 需要重启发布应用(若未启用自动部署), 并且手动重新启动应用后才会生效。     笔者这里以 app.yaml 版本的配置文件作为介绍。   关于配置文件的特殊说明   在测试配置文件的时候, 发现了一些可能会对配置时成困扰的问题:   1>. 配置中不支持使用 tab(\t) 缩进(请勿在配置的任何位置出现\t), 使用 tab缩进会造成重启失败, 错误内容 : while scanning for the next token found character '\t'that cannot start any token     2>. 同一级配置下, 空格的缩进数目需相同, 这点类似于Python的缩进语法, 否则同样会重启失败。问题图示如下(以配置目录访问控制为例):

目录权限配置   配置语法:

复制代码

1.  deny: 2.    - /目录/ 3.    - /目录1/子目录/   目录结尾的 / 不可省略, 省略后会被判定为前缀匹配。例如配置成 - /lib, 则如 /libpng 目录,  /libxxx.html 等以lib开头的路径都将无法访问。支持最多配置10个重写规则。使用示例见上图[正确配置]。   伪静态 rewrite 配置   ACE的 rewrite 语法与与 nginx 一致, 仅写法的格式上有所不同。数量上仅允许10个rewrite规则。   示例: 将 http://wid-ace-test.aliapp.com/articleView.php?aid=12138 伪静为 http://wid-ace-test.aliapp.com/article/12138.html     配置规则:

复制代码

1.rewrite: 2.  - url: ^/article/(.+)\.html$ 3.    script: /articleView.php?aid=$1 last     配置规则解释: ^/article/(.+)\.html$ 一条正则表达式表示的伪静态路径, 用于匹配路径规则,当请求的URI符合该正则规则时, 转交给目标脚本处理。这里配置的目标脚本为 /articleView.php?aid=$1 last。   对于这里有一点不太好理解的就是 $1 从何而来, $1 表示一个参数, 它表示匹配路径规则中的 (.+) 部分, 即示例中的 12138,当匹配规则中有多个类似于 (.+) 时, 参数依次类推为 $1、$2、$n。 last 为rewrite结束标志。   伪静效果图示:

IP黑白名单配置   ACE同样支持对指定目录的IP访问控制, 每条规则最多支持10个IP, 以 /ontask/ 目录为例, 假设该目录仅允许 127.0.0.1(回传地址, 本机) 与 112.12.50.153 访问, 则可做如下配置:

复制代码

1.denyuri: 2.  - path: /ontask/ 3.    allowip: ['127.0.0.1', '112.12.50.153']   若要阻止某些IP访问指定目录, 如 /downloads/ 目录, 可采用 denyip 语句:

复制代码

1.denyuri: 2.  - path: /ontask/ 3.    allowip: ['127.0.0.1', '112.12.50.153'] 4.  - path: /download/ 5.    denyip: ['121.13.8.242', '112.12.48.242']     自定义错误页   用户可在配置文件中对如404(资源未找到)、50x(服务器内部错误)配置错误页面:

复制代码

1.error_page: 2.  - status: 500 502 503 504 505 3.    page: /50x.html 4.  - status: 404 5.    page: /404.php     调试应用   ACE支持 XHProf 对应用进行性能调试。先介绍下XHProf的使用, 首先在ACE应用的控制面板中侧栏的 性能分析 选项创建存储空间, 然后在PHP文件第一行加入Alibaba::Xhprof()->start() 启动调试, 在PHP文件的最后一行加Alibaba::Xhprof()->finish() 关闭调试, 然后在创建的存储空间中就可以查看相关的性能数据了,这是一个非常实用的性能分析工具, 对性能有一定要求的应用非常有用。   过程图示如下:

XHProf的分析结果是以网页页面形式报告的, 其中有个非常直观的可视化视图, 针对"徽博"的首页性能进行性能分析的结果如下(可视视图):

从视图中可以看出, 应用在性能上整体还是非常可观的, 首页总执行用时 36.5ms, 其中约一半的时间用在了数据库的处理上,约14ms处在数据库的连接上, 但因为笔者使用的是免费的共享型MySQL数据库, 并且走的外网数据库连接路线,所以该数据库的连接速度也算是比较优秀的了。               ACE扩展服务的使用   缓存服务(Cache)   使用缓存, 最直接的目的之一就是提高数据的读取速度, 对于即时性要求不高的热点数据, 如网站的站内统计、阅读排行等, 提供了极大的便利, 大大减少了数据库的查询次数, 并且也减少了程序对数据的重复运算处理, 能够显著提高应用的性能。在应用的扩展服务列表中找到 缓存服务(Cache), 并按照提示创建缓存空间。

在代码中使用缓存服务:

复制代码

1.// $expire缓存过期时间, UNIX时间戳 2.// 调用方式: Alibaba::Cache('缓存空间名称')->方法名(); 3.// 常用方法 4.set($key, $var, $expire = null);    //添加一条cache, 若 $key 不存在则新建, 若存在则覆盖 5.add($key, $var, $expire = null);    //添加一条cache, 若 $key 已存在则添加失败并返回 false 6.replace($key, $var, $expire = null);    //替换cache值, 若 $key 不存在则新建 7.delete($key);    //删除一条cache 8.get($keys);    //获取cache, $keys 可为 string 或 array     使用示例:

测试页面: http://wid-ace-test.aliapp.com/test-cache.php   定时任务服务   定时任务允许在特定的时间点或周期性的执行一个请求URI的动作, 最小单位为分钟(即不支持秒级任务), 可用来刷新缓存、同步资源、统计数据等。   如图所示创建一个任务名称为 test-task 并且每隔 30分钟 执行一次的定时任务, 执行的方式为发起一个 HTTP GET请求, 也就是执行 /onTask/updateCounts.php 脚本。

定时任务的时间规则采用的 Cron 表达式, 对Cron 表达式不熟悉的同学, 可以网页搜索 "在线Cron表达式生成器", 根据所需任务规则进行生成。 一些常用的任务规则:

*/30 * * * ? 每隔30分钟执行一次 0 0 12 * * ? 每天中午12点触发 0 0 5 ? * MON 每周一早晨5点触发 0 30 6 ? * MON-FRI 周一至周五的上午6:30触发  0 0 9 5 * ? 每月5号上午9:00触发    如何保护任务脚本不被用户调用? 可以在任务脚本中取 GET 方式的参数进行身份验证。如保护示例中的 updateCount.php, 可在创建任务时的执行URL 中设置被执行的 URL 为: updateCount.php?howareyou=imok 并在 updateCount.php 进行验证:

应用实例: 在"徽博"首页右侧栏, 24小时热门中, 即运用的定时器配合缓存服务, 每30分钟更新一次热门。   演示地址: http://wid-ace-test.aliapp.com/   存储服务(Storage)   应用需要在本地写文件时, 需要先配置 存储服务, 否则所有本地写入操作会被认为是临时的, 不具备持久性。首先在扩展 存储(Storage) 服务中创建一个名称任意的存储空间, 然后在配置文件中指定所需写入文件的目录, 示例:

复制代码

1.ossprefix: 2.  - /ace/app/webroot/upload/   将 upload 指定为可写目录。 其中 /ace/app/ 是绝对路径, 不可省略。限制: ACE免费的存储服务, 总存储空间大小为1GB。     在默认的配置模板中, 已将 /ace/app/ 设置配置为自动存储目录, 即默认应用目录下写入文件, 均可被保存, 但建议根据需要来指定特定目录即可, 提高文件储服务的效率。   此外, 存储服务也允许通过SDK方式来存取文件。通过 SDK 方式写入文件, 再配合 rewrite 配置, 可达到任意路径的文件伪静态效果。 示例伪静态配置:

复制代码

1.rewrite: 2.  - url: ^/files/(.+)$ 3.    script: /oss-sdk-test/view-file.php?file=$1 last   在上述伪静的配置中, 将 /files/ 路径后的所有请求, 转向 view-file.php 处理, view-file.php再通过 OSS SDK, 获取文件并输出, 完成静态文件的输出效果。 演示地址: http://wid-ace-test.aliapp.com/oss-sdk-test/ 效果图示:

限于评测主题以及篇幅长度, 所以扩展服务的介绍不能做到面面俱到, 更多扩展服务以及详细用法, 请参阅相关帮助文档。ACE开发者手册, 参见: http://ace.aliapp.com/               评测总结及建议   ACE的相关特色及亮点, 笔者已经在评测中或多或少的都进行了相关的介绍。针对ACE服务, 用一句话总结就是: 弹性、零运维, 是中小型Web应用的首选服务。对ACE服务的相关建议如下:   功能改进:•更多的扩展服务, 如邮件服务、推送服务等、统计服务、短信服务等; •增加流量仪表盘, 提供访问数据和视图; •MySQL扩展允许内网路线; •对各语言均提供日志写入SDK API; •更多的编程语言支持, 如: 我大Python。   用户体验:•在版本发布页, "发布" 选项旁, 添加 "发布并重启", 使发布与重启一步到位。 •突破"10"的限制, 在配置上, 很多规则仅允许10条以内, 建议根据用户需求能够相应增加。并且在定时任务的任务名称上, 也仅允许 2-10 字符, 这个就有点短了, 最好多留个输入框来写任务描述。 •完善ACE应用文档, 丰富各服务、扩展使用细节描述, 整合相关FAQ到帮助文档。     疑似BUG: 在OSS以SDK方式存取文件时, 通过本地文件上传方式 $Storage->saveFile存入文件, 存入后, 在获取 content-type 时, 发现 content-type 并不能返回预期文件类型。如,当上传的文件为 jpg格式的图片时, content-type 预期应为 image/jpeg, 但使用

复制代码

1.$meta = $Storage->getMeta($filename); 2.echo $meta['content-type'];   方式获得到的 type, 总为 application/octet-stream   评测中的文件输出代码:

这就导致了, 在取出文件后, 向浏览器输出时, 所有的文件都将以下载的方式进行保存, 而不能使浏览器根据响应头中的Content-type, 来在浏览器直接显示浏览器已识别类型的文件。   如果在设计时就是将所有OSS中的文件看做 octet-stream 类型, 那么同时也希望, 能够在 meta 中取得真实的 MIME Type。     当然, 也有可能是笔者对OSS SDK的使用还不够熟悉, 在取文件类型的方法上调用错误, 如是操作上的问题, 还希望能够及时指正! 谢谢。                 如果感觉该评测对您有所帮助, 欢迎投票给本文:    投票标题:  28、【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』;作者:mr_wid   投票地址: http://bbs.aliyun.com/read/178799.html?spm=5176.7189909.0.0.b88gbW      附件: 演示代码及Demo应用"徽博"项目下载  ace-huibo-project.zip (57 K) 下载次数:7

原文地址:http://bbs.aliyun.com/read/179824.html
参加活动:http://promotion.aliyun.com/act/aliyun/freebeta/

【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』的更多相关文章

  1. 【阿里云产品公测】利用PTS服务优化网站数据库读写性能

    [阿里云产品公测]利用PTS服务优化网站数据库读写性能 作者:阿里云用户千鸟 写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时 ...

  2. 【阿里云产品公测】云引擎ACE新手实战基于Wordpress

    [阿里云产品公测]云引擎ACE新手实战基于Wordpress 作者:阿里云用户imnpc ACE(Aliyun Cloud Engine) 是一款弹性.分布式的应用托管环境,支持Java.php多种语 ...

  3. 【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

    [阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实 ...

  4. 【阿里云产品公测】简单粗暴30S完成PTS测试配置附tornado服务器测试结果

    作者:阿里云用户morenocjm [阿里云产品公测]简单粗暴 30S完成PTS测试配置(附tornado服务器测试结果) -------------------------------------- ...

  5. 【阿里云产品公测】云引擎ACE初体验

    作者:阿里云用户蓝色之鹰 :RYYjmG5;  来投票支持我把=i2]qj\  序号2. [阿里云产品公测]云引擎ACE初体验:作者:蓝色之鹰 e(OKE7  序号10.[阿里云产品公测]结构化数据服 ...

  6. 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验

    [阿里云产品公测]消息队列服务MQS java SDK 机器人应用初体验 作者:阿里云用户啊里新人   初体验 之 测评环境 由于MQS支持外网访问,因此我在本地做了一些简单测试(可能有些业余),之后 ...

  7. 【阿里云产品公测】大数据下精确快速搜索OpenSearch

    [阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like ...

  8. 【阿里云产品公测】离线归档OAS,再也不用担心备份空间了

    [阿里云产品公测]离线归档OAS,再也不用担心备份空间了 作者:阿里云用户莫须有3i 1 起步  1.1 初识OAS  啥是OAS,请看官方说明: 引用: 开放归档服务(Open Archive Se ...

  9. 【阿里云产品公测】阿里云ACE部署通用完整教程及评测

    [阿里云产品公测]阿里云ACE部署通用完整教程及评测 作者:阿里云用户bailimei ACE应该是目前在公测的服务中应用最广泛的一项服务.在公测云引擎ACE前曾使用过新浪SAE,而ACE给我的最初印 ...

随机推荐

  1. poj 3060 Visible Lattice Points

    http://poj.org/problem?id=3090 Visible Lattice Points Time Limit: 1000MS   Memory Limit: 65536K Tota ...

  2. hdu 2084 数塔 (简单dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory L ...

  3. RAID对硬盘的要求及其相关

    Raid 0:至少需要两块硬盘,磁盘越多,读写速度越快,没有冗余. Raid 1:只能用两块硬盘,两块硬盘的数据互为镜像(写慢,读快),一块磁盘冗余. Raid 5:至少需要3块硬盘,一块磁盘冗余. ...

  4. KextWizard 的使用方法;以及Kext安装的几种工具下载

    a.将你需要安装的Kext拖到非中文的路径中: b.运行该软件,将Kext拖入下图对应的方框里,然后选择位置安装: c.选择修复权限和重建缓存(一个是修复Extra文件夹,一个是修复SLE) Kext ...

  5. hdoj 5375 Gray Code

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 编码规则:tmp = XOR(gr[i],gr[i-1]); 算是找规律的题目吧,考虑?前后字符 ...

  6. Cipher Message

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=34121#problem/C // File Name: c.cpp // Author: ...

  7. Unity3d:加载Gif格式图片

    unity里不支持Gif格式的图片,网上搜索也没有相关资料,殊不知我们已经太相信度娘了,而没有了自己的分析,我们知道Gif图是由多个静态图做成的,那我们就回归本土,第一步:把gif拆成n个静态图放在集 ...

  8. 关于TabControl的Trigger【项目】

    我有一个TabControl <TabControl x:Name="ToolSystemSection" Grid.Row="4" ContentTem ...

  9. 4.3、Libgdx启动类和配置

    (原文:http://www.libgdx.cn/topic/45/4-3-libgdx%E5%90%AF%E5%8A%A8%E7%B1%BB%E4%B8%8E%E9%85%8D%E7%BD%AE) ...

  10. C++ for循环效率

    1.考虑二维数组,在C++中,以先行后列的方式存储连续的数组元素.也就是同一行的元素在一起,同一列的元素之间有间隔,且间隔相同.理想情况下,二维数组的元素是随机访问的,可以直接定位,即i*列数+j.因 ...