?;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