【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』

做者:阿里云用户mr_wid ,z )NKt#   @I6A9do   若是感受该评测对您有所帮助, 欢迎投票给本文: UO<claV   RsfT Ub)<   投票标题:  2八、【阿里云产品公测】以开发者角度看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) 下载次数:7php

评测介绍   •评测产品: 云引擎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,等应用发布后, 即可以经过二级域名进行访问。   此外, 也可将本身注册的域名的来"替换"这个二级域名进行访问, 具体操做做为后话, 暂且按下不表。html

 

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

 

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

 

  获得了SVN地址, 就能够经过SVN客户端对项目执行SVN检出(Checkout), 在检出的过程,是经过阿里云帐号和SVN密码进行身份验证的, 第一次使用时, 须要为SVN设置认证密码(见上图), 不然没法正常检出。   在目标目录下, 右键,SVN检出, 检出流程如图:web

 

  成功后, 在检出目录下将多出如图中所示的文件/文件夹。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,当匹配规则中有多个相似于 (.+) 时, 参数依次类推为 $一、$二、$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的使用还不够熟悉, 在取文件类型的方法上调用错误, 如是操做上的问题, 还但愿可以及时指正! 谢谢。                 若是感受该评测对您有所帮助, 欢迎投票给本文:    投票标题:  2八、【阿里云产品公测】以开发者角度看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/

相关文章
相关标签/搜索