?;ZnD(4?
评测介绍
1V-sibE
j |LOg
- 评测产品: 云引擎ACE服务
- 开发语言: PHP
- 评测人: mr_wid
- 评测时间: 2014年10月13日-19日
XV1XzG#C
.>p.k*vU
评测概要
9]:F!d/
fYlqaO4[
很是有幸可以申请到ACE的公测资格, 在本篇评测中, 笔者将以一个开发者的角度来对云引擎ACE服务进行介绍与使用。在本篇评测中, 您将看到:
- ACE可以作些什么
- ACE应用的建立与发布
- 应用的配置与调试
- ACE扩展服务的使用
- 评测总结及建议
- 附件: 演示代码及Demo应用"徽博"项目下载
<tdsUh:?&
ACE可以作些什么 0@RVM|
zEDN^K '
阿里云应用引擎(ACE)是阿里云计算推出一款基于弹性扩展的网络应用托管平台, 通俗的讲,能够将其看作一个无需进行复杂配置的就能够快速进行部署、发布Web应用程序的应用运行平台, 且能根据应用负载状况自动弹性伸缩应用所需资源,使应用性能时刻维持在最佳状态。告别节日、活动等大量流量涌入时, 现有硬件没法支撑应用的运行, 而又临时没法解决的尴尬状况。 oWq]\yT<`
I7W?}bR*6
在ACE上, 用户只需将编写好的程序、资源经过svn提交到ACE, 而无需再关心服务器的维护、软件的配置等细节。使开发者/用户可以集中精力编写、运营ACE中托管的应用程序, 从而从繁重的服务器运维工做中解放出来。 iB+ _+A
`t+;[G>ZE
ACE除了可以让你轻松部署出属于本身的WordPress博客、Discuz论坛等常规网站类应用, 同时配合ACE的扩展服务, 一样能经过编写 Web API/Services 对移动APP、桌面应用等提供强大的后台支撑能力。
l7U<]i GL
ACE应用的建立与发布 M,we,!B0
g|M>C:ZT
建立一个ACE应用的过程是十分愉快的, 只需为它填上精心准备的应用名称与二级域名, 再选上开发语言, 就能够建立了。
如图所示, 笔者建立了一个名为 ACE公测评测 的应用, 而且二级域名为 wid-ace-test.aliapp.com,等应用发布后, 即可以经过二级域名进行访问。 u/%Z0`X
{Rn*)D9
此外, 也可将本身注册的域名的来"替换"这个二级域名进行访问, 具体操做做为后话, 暂且按下不表。 H=9{|%iS
YTg8Zg-Z
在应用环境的模式选项, 有单实例和集群模式可选, 集群模式是指在同一时间内, 应用有多个实例同时运行, 在运行过程当中, 即使有其中一个实例发生运行故障, 也几乎不会影响应用的正常访问。
' ?a d
B.~[m}
对于弹性策略, 能够说是ACE服务的最大亮点之一, 开启自动弹性后, 能让应用程序真正作到了再也不担忧可用资源是否充足、应用是否达到了性能瓶颈等问题。 8L[\(~Zf
bVr`a*EM
S";}gw?r6
实例模式与弹性策略在应用建立后也是能够根据须要随时切换的, 因此不用纠结本身的应用在建立时应该选择哪一种模式。
点肯定建立应用, 并返回查看这个已建立的应用信息, 如图: 3gv?rJV
G<Urj+3/Xo
接下来, 咱们建立一个仅有一个页面的Web网站程序, 而且在接下来的评测中慢慢扩展它。 " s/ws
~;uU{TT
ACE目前使用SVN的方式来提交应用, SVN是一个开源版本控制系统, 管理方便, 易于维护, 在Windows、Linux、OS X下均有相关的svn客户端, 本文中以Windows下的 TortoiseSVN 为例来建立应用仓库和提交应用。 cL4Xh|NBp
_p<wATv?7t
_5o5/@
首先在ACE应用的版本管理页生成一个应用仓库, 选择 生成SVN, 在弹出的对话框中选择建立空一个的SVN目录: a..LbQQ
[-^xw1:
获得了SVN地址, 就能够经过SVN客户端对项目执行SVN检出(Checkout), 在检出的过程,是经过阿里云帐号和SVN密码进行身份验证的, 第一次使用时, 须要为SVN设置认证密码(见上图), 不然没法正常检出。 lU`t~|>r+
RY\ 0dv>
在目标目录下, 右键,SVN检出, 检出流程如图: <2wC)l3j*
:\^jIKvZ
成功后, 在检出目录下将多出如图中所示的文件/文件夹。
webroot 为站点的根目录, 在 webroot 目录下的文件, 除在配置里作特殊设置外, 均能被用户经过浏览器直接访问, 所以, 较为敏感的文件, 不要放在该目录中。 [_*?~
q-S#[I+g
w8F`RRHEE
app.yaml , 应用的配置文件, 能够配置URL重写、防盗链、访问控制等。
(W#^-*$R
()<?^lr33
发布第一个应用
E`|vu*l7
f67t.6Vw2+
在第一个应用中, 将使用经典的 phpinfo 函数来查看ACE服务中的PHP环境详细状况。
在 webroot 目录下, 新建 phpinfo.php 文件并添加代码: VdGpreRPC
xEufbFAN?
添加代码中应注意将代码保存为 UTF-8 无 BOM 编码方式(不一样文本编辑器下操做有所不一样), 避免出现没必要要的麻烦。 l!:L<B
k{bC3)'$#R
接下来使用SVN将新添加的phpinfo页面提交到ACE中, 操做过程如图: <VhD>4f{]
Yi <1z:\
提交成功后, 到ACE管理页面, 在 版本管理 项, 选择 "发布" 应用。约1分钟后, 便可经过二级域名访问。 #P {|7}jk
bd2QQ1[1vh
从 phpinfo 的信息中能够看到, ACE服务的PHP版本为5.4.14, 而且启用了经常使用的一些扩展, 因此绝大多数以前编写好的PHP应用, 均可以不加修改的直接在ACE上运行。 GQ sE5Vb
PoLk{{l3
ACE的Web服务器程序选用的是Tengine, 由淘宝网发起的Web服务器项目, 目前已开源, 基于Nginx 1.4.7, 对其进行了大量的改进与优化, 使得性能与稳定性上都有了进一步的提高。详情参见 http://tengine.taobao.org/
F6_e n z
sAnb
绑定外部域名
^_BjO(b'e
9x eg,#1
若须要使用独立的域名, 如 www.example.com 来代替 xxx.aliapp.com 进行访问, 可在应用控制面板中添加一个外部域名绑定, 并在域名服务商那添加 CNAME 记录解析到 ACE 的二级域名, 便可完成绑定。
绑定的条件是域名必须是通过备案的。
mdlMciP
应用的配置与调试
>[Tt'.S!?
,x?Jrcx~'C
在这以前, 咱们先将第一个应用进行扩展, 使它看起来更有意义一点。 对的, 咱们来作一个超级简约的"匿名社交网站"(好吧, 其实就是一个匿名留言板), 名字笔者都想好了, 就叫徽博好了。
Q'YakEv >=
N;4wbUPL7h
因为这个应用与第一个发布的应用并没有太大联系, 或者说功能改进实在太大, 咱们选择从新生成一个空的SVN目录, 即一个新的版本, 这样作的好处之一就是, 等新的版本上线了, 又忽然发现新版本存在若干重大BUG, 那么咱们就能够快速一键切换回旧版本。
Y/ %XkDC~
数据库采用ACE提供的MySQL数据库服务, 在控制面板的扩展服务将其打开。 w"L]?#
WwUHHm<v
"徽博" 是此次ACE评测中笔者"临时起意"编写的一个小Web应用, 全部的源码、资源文件以及文档等, 将会以附件的形式放在评测的最后。来一块儿看一下 1.0 版本的徽博真面容。用我好友的话说, "徽博"有着一个不忍直视的前端配色。外加奇葩 -_-|||
arvKJmD
]1MZ:]k
PS: 首创的随便登陆, 无需注册, 更是让徽博独具"特点"。演示地址: http://wid-ace-test.aliapp.com/
u(8dsg R
un}!&*+
配置应用
V`G^Jyj
9U3.=J
经过编辑 app.yaml 配置文件可对应用作代码层配置, app.yaml 在wwwroot目录的同级目录下, 能够配置目录权限、IP黑白名单、URL重写、防盗链等。
ACE还提供了xml版本的配置语法, 配置文件为 app.xml, 一样与 wwwroot 同级目录, 可手动建立, 当 app.xml 与 app.yaml 同时存在时, 仅有 app.xml 配置文件生效。
fZQ2<*)pqO
\y+^r|IL
限制: app.yaml 与 app.xml 文件大小最大均不得超过 1.6k 字节。 j|{ n?
修改配置文件后, 须要重启发布应用(若未启用自动部署), 而且手动从新启动应用后才会生效。 5Ha(i [d
5x!rT&!G
Y Azj>c&
笔者这里以 app.yaml 版本的配置文件做为介绍。
f`8?]@y{
+o35${
关于配置文件的特殊说明
=&~ K;=:
PGuPw'2;[
在测试配置文件的时候, 发现了一些可能会对配置时成困扰的问题:
P G zwS
:_Iz( 2hV
1>. 配置中不支持使用 tab(\t) 缩进(请勿在配置的任何位置出现\t), 使用 tab缩进会形成重启失败, 错误内容 : while scanning for the next token found character '\t'that cannot start any token n*Hx"2XF
s.a@uR^
!e+Sa{X
2>. 同一级配置下, 空格的缩进数目需相同, 这点相似于Python的缩进语法, 不然一样会重启失败。
问题图示以下(以配置目录访问控制为例):
%v UUx+
O`Htdnu
目录权限配置
09i77
L @J$kqWY
配置语法:
@c}Gw;e
ONUa7
目录结尾的 / 不可省略, 省略后会被断定为前缀匹配。例如配置成 - /lib, 则如 /libpng 目录, /libxxx.html 等以lib开头的路径都将没法访问。
支持最多配置10个重写规则。使用示例见上图[正确配置]。
-s^cy+jd
%}unlSTPP
伪静态 rewrite 配置
\w-3Spk*
"B9zQ,[Q
ACE的 rewrite 语法与与 nginx 一致, 仅写法的格式上有所不一样。数量上仅容许10个rewrite规则。
/=QsZ,~xo
@KJmNM1]V
示例: 将 http://wid-ace-test.aliapp.com/articleView.php?aid=12138 伪静为 http://wid-ace-test.aliapp.com/article/12138.html D0L s~qr
M&e=LV
u,~+ho@
配置规则:
:Ye~I;"8
BF"eVKA
- rewrite:
- - url: ^/article/(.+)\.html$
- script: /articleView.php?aid=$1 last
`W7;-
;zSV~G6-
配置规则解释:
^/article/(.+)\.html$ 一条正则表达式表示的伪静态路径, 用于匹配路径规则,当请求的URI符合该正则规则时, 转交给目标脚本处理。这里配置的目标脚本为 /articleView.php?aid=$1 last。 QaXdO=3
Psm9hP :m
对于这里有一点不太好理解的就是 $1 从何而来, $1 表示一个参数, 它表示匹配路径规则中的 (.+) 部分, 即示例中的 12138,当匹配规则中有多个相似于 (.+) 时, 参数依次类推为 $一、$二、$n。 last 为rewrite结束标志。 >b~Q%{1
P<9T.l
伪静效果图示: COD^osM@
Z*(OcQ-
IP黑白名单配置 ^5+7D1>W%
-*2b/=$u
ACE一样支持对指定目录的IP访问控制, 每条规则最多支持10个IP, 以 /ontask/ 目录为例, 假设该目录仅容许 127.0.0.1(回传地址, 本机) 与 112.12.50.153 访问, 则可作以下配置:
z; >O5a>z
- denyuri:
- - path: /ontask/
- allowip: ['127.0.0.1', '112.12.50.153']
,S?:lQuK5
若要阻止某些IP访问指定目录, 如 /downloads/ 目录, 可采用 denyip 语句:
6K >(n
- denyuri:
- - path: /ontask/
- allowip: ['127.0.0.1', '112.12.50.153']
- - path: /download/
- denyip: ['121.13.8.242', '112.12.48.242']
R^.c
Z7Nhb{
自定义错误页
:4pO/I ~
\_+Af`
用户可在配置文件中对如404(资源未找到)、50x(服务器内部错误)配置错误页面:
W7 +Q&4Y
- error_page:
- - status: 500 502 503 504 505
- page: /50x.html
- - status: 404
- page: /404.php
uuy0fQQ8ti
rWBgYh
调试应用
rNgAzH
^(:na6C
ACE支持 XHProf 对应用进行性能调试。
先介绍下XHProf的使用, 首先在ACE应用的控制面板中侧栏的 性能分析 选项建立存储空间, 而后在PHP文件第一行加入Alibaba::Xhprof()->start() 启动调试, 在PHP文件的最后一行加Alibaba::Xhprof()->finish() 关闭调试, 而后在建立的存储空间中就能够查看相关的性能数据了,这是一个很是实用的性能分析工具, 对性能有必定要求的应用很是有用。 @d|]BqQ4jh
PG'I7)Bv
过程图示以下: 9y)}-TcSpY
v^ 1x}
XHProf的分析结果是以网页页面形式报告的, 其中有个很是直观的可视化视图, 针对"徽博"的首页性能进行性能分析的结果以下(可视视图):
X4"[,:Tw
从视图中能够看出, 应用在性能上总体仍是很是可观的, 首页总执行用时 36.5ms, 其中约一半的时间用在了数据库的处理上,约14ms处在数据库的链接上, 但由于笔者使用的是免费的共享型MySQL数据库, 而且走的外网数据库链接路线,因此该数据库的链接速度也算是比较优秀的了。
vY,]f^F"
ACE扩展服务的使用
1i Q(q\%
; d}
缓存服务(Cache)
be.Kx< I
,qhv(
使用缓存, 最直接的目的之一就是提升数据的读取速度, 对于即时性要求不高的热点数据, 如网站的站内统计、阅读排行等, 提供了极大的便利, 大大减小了数据库的查询次数, 而且也减小了程序对数据的重复运算处理, 可以显著提升应用的性能。
在应用的扩展服务列表中找到 缓存服务(Cache), 并按照提示建立缓存空间。 P?y{9H*
A^F0}MYT
在代码中使用缓存服务:
w_q =mKu
- // $expire缓存过时时间, UNIX时间戳
- // 调用方式: Alibaba::Cache('缓存空间名称')->方法名();
- // 经常使用方法
- set($key, $var, $expire = null); //添加一条cache, 若 $key 不存在则新建, 若存在则覆盖
- add($key, $var, $expire = null); //添加一条cache, 若 $key 已存在则添加失败并返回 false
- replace($key, $var, $expire = null); //替换cache值, 若 $key 不存在则新建
- delete($key); //删除一条cache
- get($keys); //获取cache, $keys 可为 string 或 array
QSOJHRl=C
tNW0 C]
使用示例: `]<~lf
ralU9MN.
测试页面: http://wid-ace-test.aliapp.com/test-cache.php
>Wj8[9zf
l3kBt-m
定时任务服务
iLFhm4.PO
N37#Vs
定时任务容许在特定的时间点或周期性的执行一个请求URI的动做, 最小单位为分钟(即不支持秒级任务), 可用来刷新缓存、同步资源、统计数据等。 Js!Zk\O
?^: xNRE$j
如图所示建立一个任务名称为 test-task 而且每隔 30分钟 执行一次的定时任务, 执行的方式为发起一个 HTTP GET请求, 也就是执行 /onTask/updateCounts.php 脚本。 JZcW?Or
&E!-~'|z
定时任务的时间规则采用的 Cron 表达式, 对Cron 表达式不熟悉的同窗, 能够网页搜索 "在线Cron表达式生成器", 根据所需任务规则进行生成。
一些经常使用的任务规则: m*TJ@gI*t
~Q1%DV.
uvGFo)9q3
如何保护任务脚本不被用户调用? 能够在任务脚本中取 GET 方式的参数进行身份验证。
如保护示例中的 updateCount.php, 可在建立任务时的执行URL 中设置被执行的 URL 为: updateCount.php?howareyou=imok
lb#`f,r>
并在 updateCount.php 进行验证: rW9ULS2 d
-Cf< #'x_
应用实例: 在"徽博"首页右侧栏, 24小时热门中, 即运用的定时器配合缓存服务, 每30分钟更新一次热门。 Gt?ckMB
h&?tF~h
演示地址: http://wid-ace-test.aliapp.com/
ekuRGG
[Uu!:SZ
存储服务(Storage)
wB0ONH[
&k {1N.
应用须要在本地写文件时, 须要先配置 存储服务, 不然全部本地写入操做会被认为是临时的, 不具有持久性。首先在扩展 存储(Storage) 服务中建立一个名称任意的存储空间, 而后在配置文件中指定所需写入文件的目录, 示例:
jhSc9
- ossprefix:
- - /ace/app/webroot/upload/
{2%@I~US
将 upload 指定为可写目录。 其中 /ace/app/ 是绝对路径, 不可省略。
限制: ACE免费的存储服务, 总存储空间大小为1GB。 gUxJ>~
=nN&8vRH
V9kL\Ys
在默认的配置模板中, 已将 /ace/app/ 设置配置为自动存储目录, 即默认应用目录下写入文件, 都可被保存, 但建议根据须要来指定特定目录便可, 提升文件储服务的效率。 uEkUK|
v#`P?B\
此外, 存储服务也容许经过SDK方式来存取文件。经过 SDK 方式写入文件, 再配合 rewrite 配置, 可达到任意路径的文件伪静态效果。 B(dq$+4
示例伪静态配置:
m/W)IG>
- rewrite:
- - url: ^/files/(.+)$
- script: /oss-sdk-test/view-file.php?file=$1 last
vc(6lN9>
在上述伪静的配置中, 将 /files/ 路径后的全部请求, 转向 view-file.php 处理, view-file.php再经过 OSS SDK, 获取文件并输出, 完成静态文件的输出效果。 fdTyY ;
演示地址: http://wid-ace-test.aliapp.com/oss-sdk-test/ ]i@VIvYq
效果图示: l]o&D))R
$mG&4Y
``mW\=fe
限于评测主题以及篇幅长度, 因此扩展服务的介绍不能作到面面俱到, 更多扩展服务以及详细用法, 请参阅相关帮助文档。
ACE开发者手册, 参见: http://ace.aliapp.com/
~ugK&0i[2
评测总结及建议
g4^df%)&
3?GEXO&,E
ACE的相关特点及亮点, 笔者已经在评测中或多或少的都进行了相关的介绍。针对ACE服务, 用一句话总结就是: 弹性、零运维, 是中小型Web应用的首选服务。
对ACE服务的相关建议以下:
3EKqXXzOB
p V^hZ.
功能改进:
- 更多的扩展服务, 如邮件服务、推送服务等、统计服务、短信服务等;
- 增长流量仪表盘, 提供访问数据和视图;
- MySQL扩展容许内网路线;
- 对各语言均提供日志写入SDK API;
- 更多的编程语言支持, 如: 我大Python。
/xRPQ|
用户体验:
- 在版本发布页, "发布" 选项旁, 添加 "发布并重启", 使发布与重启一步到位。
- 突破"10"的限制, 在配置上, 不少规则仅容许10条之内, 建议根据用户需求可以相应增长。而且在定时任务的任务名称上, 也仅容许 2-10 字符, 这个就有点短了, 最好多留个输入框来写任务描述。
- 完善ACE应用文档, 丰富各服务、扩展使用细节描述, 整合相关FAQ到帮助文档。
,-*oc>
we&g9j'
疑似BUG:
在OSS以SDK方式存取文件时, 经过本地文件上传方式 $Storage->saveFile存入文件, 存入后, 在获取 content-type 时, 发现 content-type 并不能返回预期文件类型。如,当上传的文件为 jpg格式的图片时, content-type 预期应为 image/jpeg, 但使用
L7tC?F]}SK
- $meta = $Storage->getMeta($filename);
- echo $meta['content-type'];
kiFTx &gf
方式得到到的 type, 总为 application/octet-stream
+9mnxU>
:kDHwYv$
评测中的文件输出代码: QNH5Cq;Y
IU`&h2KZ.
这就致使了, 在取出文件后, 向浏览器输出时, 全部的文件都将如下载的方式进行保存, 而不能使浏览器根据响应头中的Content-type, 来在浏览器直接显示浏览器已识别类型的文件。
D-BWgK
n1xN:A
若是在设计时就是将全部OSS中的文件看作 octet-stream 类型, 那么同时也但愿, 可以在 meta 中取得真实的 MIME Type。 j6KGri
czf|c
sCFqz[I
固然, 也有多是笔者对OSS SDK的使用还不够熟悉, 在取文件类型的方法上调用错误, 如是操做上的问题, 还但愿可以及时指正! 谢谢。
Py[Z9KLX
+SSF=]4+
参加活动:http://promotion.aliyun.com/act/aliyun/freebeta/ php