做者:阿里雲用戶mr_widphp
評測介紹 •評測產品: 雲引擎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/