什么是GAE:Google App Engine介紹
什么是GAE?
Google App Engine (GAE)可讓您在 Google 的基礎(chǔ)架構(gòu)上運(yùn)行您的網(wǎng)絡(luò)應(yīng)用程序。App Engine 應(yīng)用程序易于構(gòu)建和維護(hù),并可根據(jù)您的訪問量和數(shù)據(jù)存儲需要的增長輕松擴(kuò)展。使用 Google App Engine,將不再需要維護(hù)服務(wù)器:您只需上傳您的應(yīng)用程序,它便可立即為您的用戶提供服務(wù)。
您可以使用 Google 企業(yè)應(yīng)用套件通過自己的域名(例如 http://www.example.com/)提供應(yīng)用程序。或者,您可以使用 appspot.com 域上的免費(fèi)域名來為您的應(yīng)用程序提供服務(wù)。您可以與全世界的人共享您的應(yīng)用程序,也可以限制為只有貴組織的成員可以訪問。
Google App Engine 支持以幾種編程語言編寫的應(yīng)用程序。通過 App Engine 的 Java 運(yùn)行時(shí)環(huán)境,您可以使用標(biāo)準(zhǔn) Java 技術(shù)(包括 JVM、Java servlet 和 Java 編程語言,或使用基于 JVM 的解釋器或解譯器的任何其他語言,例如 JavaScript 或 Ruby)構(gòu)建應(yīng)用程序。App Engine 還提供一個(gè)專用的 Python 運(yùn)行時(shí)環(huán)境,該環(huán)境包括一個(gè)快速 Python 解釋器和 Python 標(biāo)準(zhǔn)庫。Java 和 Python 運(yùn)行時(shí)環(huán)境構(gòu)建為確保應(yīng)用程序快速、安全運(yùn)行,并不受系統(tǒng)上的其他應(yīng)用程序的干擾。
在 App Engine 中,您只需為您使用的資源付費(fèi)。沒有設(shè)置成本,也沒有重復(fù)的費(fèi)用。您的應(yīng)用程序使用的資源,如存儲空間和帶寬以千兆字節(jié)衡量,并以有競爭力的費(fèi)率收費(fèi)。您可以控制您的應(yīng)用程序可以消費(fèi)的***資源量,使其一直保持在預(yù)算范圍內(nèi)。
可以免費(fèi)開始使用 App Engine。所有應(yīng)用程序都可以使用多達(dá) 500 MB 的存儲空間,以及可支持每月約 500 萬頁面瀏覽量的足夠的 CPU 和帶寬,完全免費(fèi)。為您的應(yīng)用程序啟用付費(fèi)后,您的免費(fèi)配額將提高,您只需為使用的超過免費(fèi)水平的資源付費(fèi)。
應(yīng)用程序環(huán)境
通過 Google App Engine,即使在負(fù)載很重和數(shù)據(jù)量極大的情況下,也可以輕松構(gòu)建能安全運(yùn)行的應(yīng)用程序。App Engine 包括以下功能:
◆動(dòng)態(tài)網(wǎng)絡(luò)服務(wù),提供對常用網(wǎng)絡(luò)技術(shù)的完全支持
◆持久存儲空間,支持查詢、分類和事務(wù)
◆自動(dòng)擴(kuò)展和負(fù)載平衡
◆用于對用戶進(jìn)行身份驗(yàn)證和使用 Google 帳戶發(fā)送電子郵件的 API
◆一種功能完整的本地開發(fā)環(huán)境,可以在您的計(jì)算機(jī)上模擬 Google App Engine
◆用于在指定時(shí)間和定期觸發(fā)事件的計(jì)劃任務(wù)
您的應(yīng)用程序可在以下兩個(gè)運(yùn)行時(shí)環(huán)境之一中運(yùn)行:Java 環(huán)境和 Python 環(huán)境。各環(huán)境均為網(wǎng)絡(luò)應(yīng)用程序開發(fā)提供標(biāo)準(zhǔn)協(xié)議和常用技術(shù)。
沙盒
應(yīng)用程序在安全環(huán)境中運(yùn)行,該安全環(huán)境僅提供對基礎(chǔ)操作系統(tǒng)的有限訪問權(quán)限。這些限制讓 App Engine 可以在多個(gè)服務(wù)器之間分發(fā)應(yīng)用程序的網(wǎng)絡(luò)請求,并可以啟動(dòng)和停止服務(wù)器以滿足訪問量需求。沙盒將您的應(yīng)用程序隔離在它自己的安全可靠環(huán)境中,該環(huán)境與網(wǎng)絡(luò)服務(wù)器的硬件、操作系統(tǒng)和物理位置無關(guān)。
安全沙盒環(huán)境的限制示例包括:
◆應(yīng)用程序只能通過提供的網(wǎng)址抓取以及電子郵件服務(wù)訪問互聯(lián)網(wǎng)中的其他計(jì)算機(jī)。其他計(jì)算機(jī)只能通過在標(biāo)準(zhǔn)端口上進(jìn)行 HTTP(或 HTTPS)請求來連接至該應(yīng)用程序。
◆應(yīng)用程序無法向文件系統(tǒng)寫入。應(yīng)用程序只能讀取通過應(yīng)用程序代碼上傳的文件。該應(yīng)用程序必須使用 App Engine 數(shù)據(jù)存儲區(qū)、memcache 或其他服務(wù)存儲所有在請求之間持續(xù)存在的數(shù)據(jù)。
◆應(yīng)用程序代碼僅在響應(yīng)網(wǎng)絡(luò)請求或 cron job 時(shí)運(yùn)行,且任何情況下必須在 30 秒鐘內(nèi)返回響應(yīng)數(shù)據(jù)。請求處理程序不能在響應(yīng)發(fā)送后生成子進(jìn)程或執(zhí)行代碼。
Java 運(yùn)行時(shí)環(huán)境
您可以使用常用 Java 網(wǎng)絡(luò)開發(fā)工具和 API 標(biāo)準(zhǔn)開發(fā)在 Java 運(yùn)行時(shí)環(huán)境中運(yùn)行的應(yīng)用程序。您的應(yīng)用程序使用 Java Servlet 標(biāo)準(zhǔn)和環(huán)境交互,并可以使用常用網(wǎng)絡(luò)應(yīng)用程序技術(shù),例如 JavaServer 頁面 (JSP)。
Java 運(yùn)行時(shí)環(huán)境使用 Java 6。App Engine Java SDK 支持使用 Java 5 或 6 開發(fā)應(yīng)用程序。
該環(huán)境包括 Java SE 運(yùn)行時(shí)環(huán)境 (JRE) 6 平臺和庫。沙盒環(huán)境的限制在 JVM 中實(shí)現(xiàn)。只要應(yīng)用程序不超過沙盒的限制,就可以使用任何 JVM 字節(jié)碼或庫功能。例如,嘗試打開套接字或向文件寫入的字節(jié)碼將引發(fā)運(yùn)行時(shí)異常。
您的應(yīng)用程序使用 Java 標(biāo)準(zhǔn) API 來訪問大多數(shù) App Engine 服務(wù)。對于 App Engine 數(shù)據(jù)存儲區(qū),Java SDK 包括 Java 數(shù)據(jù)對象 (JDO) 和 Java 持久性 API (JPA) 接口的實(shí)現(xiàn)。應(yīng)用程序可使用 JavaMail API 通過 App Engine 郵件服務(wù)發(fā)送電子郵件。java.net HTTP API 訪問 App Engine 網(wǎng)址抓取服務(wù)。App Engine 還包括低級 API 以使用其服務(wù)實(shí)現(xiàn)額外適配器或直接從應(yīng)用程序使用。請參閱有關(guān)數(shù)據(jù)存儲區(qū)、memcache、網(wǎng)址抓取、郵件、圖像和 Google 帳戶 API 的文檔。
通常,Java 開發(fā)人員使用 Java 編程語言和 API 來實(shí)現(xiàn) JVM 的網(wǎng)絡(luò)應(yīng)用程序。通過使用 JVM 兼容的解譯器或解釋器,您還可以使用其他語言來開發(fā)網(wǎng)絡(luò)應(yīng)用程序,例如 JavaScript、Ruby 或 Scala。
Python 運(yùn)行時(shí)環(huán)境
通過 App Engine 的 Python 運(yùn)行時(shí)環(huán)境,您可以使用 Python 編程語言實(shí)現(xiàn)應(yīng)用程序,并在優(yōu)化的 Python 解釋器上運(yùn)行。App Engine 包括針對 Python 網(wǎng)絡(luò)應(yīng)用程序開發(fā)的豐富的 API 和工具,包括功能豐富的數(shù)據(jù)建模 API、易于使用的網(wǎng)絡(luò)應(yīng)用程序框架和用于管理和訪問您的應(yīng)用程序的數(shù)據(jù)的工具。您還可以利用針對 Python 網(wǎng)絡(luò)應(yīng)用程序開發(fā)的多種成熟的庫和框架,例如 Django。
Python 運(yùn)行時(shí)環(huán)境使用 Python 2.5.2 版。將在未來版本中考慮對于 Python 3 的額外支持。
Python 環(huán)境包括 Python 標(biāo)準(zhǔn)庫。當(dāng)然,不是該庫的所有功能都可以在沙盒環(huán)境中運(yùn)行。例如,對嘗試打開套接字或向文件寫入的方法的調(diào)用將引發(fā)異常。為方便起見,主要功能不受該運(yùn)行時(shí)環(huán)境支持的標(biāo)準(zhǔn)庫中的多個(gè)模塊已被禁用,而導(dǎo)入這些模塊的代碼將引發(fā)錯(cuò)誤。
為 Python 環(huán)境編寫的應(yīng)用程序代碼只能以 Python 編寫。用 C 語言編寫的擴(kuò)展不受支持。
Python 環(huán)境為數(shù)據(jù)存儲區(qū)、Google 帳戶、網(wǎng)址抓取和電子郵件服務(wù)提供了豐富的 Python API。App Engine 還提供了一個(gè)稱為 webapp 的簡單 Python 網(wǎng)絡(luò)應(yīng)用程序框架,從而可以輕松開始構(gòu)建應(yīng)用程序。
只要其他第三方庫是使用純 Python 實(shí)現(xiàn)的并且不需要任何不受支持的標(biāo)準(zhǔn)庫模塊,您就可以使用您的應(yīng)用程序上傳這些庫。
數(shù)據(jù)存儲區(qū)
App Engine 提供了一個(gè)強(qiáng)大的分布式數(shù)據(jù)存儲服務(wù),其中包含查詢引擎和事務(wù)功能。就像分布式網(wǎng)絡(luò)服務(wù)器隨訪問量增加一樣,該分布式數(shù)據(jù)存儲區(qū)也會隨數(shù)據(jù)而增加。
該 App Engine 數(shù)據(jù)存儲區(qū)與傳統(tǒng)關(guān)系數(shù)據(jù)庫不同。數(shù)據(jù)對象(或“實(shí)體”)有一類和一組屬性。查詢可以檢索按屬性值過濾和分類的指定種類的實(shí)體。屬性值可以是受支持的屬性值類型中的任何一種。
數(shù)據(jù)存儲區(qū)實(shí)體是“無架構(gòu)”的。數(shù)據(jù)實(shí)體的結(jié)構(gòu)由應(yīng)用程序代碼提供和執(zhí)行。Java JDO/JPA 接口和 Python 數(shù)據(jù)存儲區(qū)接口包括用于在您的應(yīng)用程序內(nèi)應(yīng)用和執(zhí)行結(jié)構(gòu)的功能。您的應(yīng)用程序還可以直接訪問數(shù)據(jù)存儲區(qū)以根據(jù)需要應(yīng)用或多或少的結(jié)構(gòu)。
數(shù)據(jù)存儲區(qū)高度一致并使用樂觀并發(fā)控制。如果有其他進(jìn)程嘗試更新某實(shí)體,而同時(shí)該實(shí)體位于以固定次數(shù)進(jìn)行重新嘗試的事務(wù)中,此時(shí)該實(shí)體將更新。應(yīng)用程序可以在一個(gè)事務(wù)中執(zhí)行多項(xiàng)數(shù)據(jù)存儲區(qū)操作(全部成功或者全部失敗,從而確保數(shù)據(jù)的完整性)。
數(shù)據(jù)存儲區(qū)通過其分布式網(wǎng)絡(luò)使用“實(shí)體組”實(shí)現(xiàn)事務(wù)。一個(gè)事務(wù)操作一個(gè)組內(nèi)的實(shí)體。同一組的實(shí)體存儲在一起,以高效執(zhí)行事務(wù)。應(yīng)用程序可以在實(shí)體創(chuàng)建時(shí)將實(shí)體分配到組。
Google 帳戶
App Engine 支持將應(yīng)用程序與用于用戶驗(yàn)證的 Google 帳戶集成。應(yīng)用程序使用戶可以通過 Google 帳戶登錄,并可以訪問與該帳戶關(guān)聯(lián)的電子郵件地址和可顯示的名稱。使用 Google 帳戶使用戶可以更快地開始使用您的應(yīng)用程序,因?yàn)橛脩艨梢圆恍枰獎(jiǎng)?chuàng)建新帳戶了。Google 帳戶還省去只為您的應(yīng)用程序?qū)崿F(xiàn)用戶帳戶系統(tǒng)的麻煩。
如果您的應(yīng)用程序正在 Google 企業(yè)應(yīng)用套件下運(yùn)行,則它可以與您組織的成員和 Google 企業(yè)應(yīng)用套件帳戶成員使用相同的功能。
用戶 API 還可告知應(yīng)用程序當(dāng)前用戶是否是應(yīng)用程序的注冊管理員。這樣便可以輕松實(shí)現(xiàn)您站點(diǎn)上僅管理員可訪問的區(qū)域。
什么是GAE:App Engine 服務(wù)
App Engine 提供了多種服務(wù),從而可讓您在管理應(yīng)用程序的同時(shí)執(zhí)行常規(guī)操作。提供了以下 API 以訪問這些服務(wù):
網(wǎng)址抓取
應(yīng)用程序可以使用 App Engine 的網(wǎng)址抓取服務(wù)訪問互聯(lián)網(wǎng)上的資源,例如網(wǎng)絡(luò)服務(wù)或其他數(shù)據(jù)。網(wǎng)址抓取服務(wù)使用檢索許多其他 Google 產(chǎn)品的網(wǎng)頁的高速 Google 基礎(chǔ)架構(gòu)來檢索網(wǎng)絡(luò)資源。
郵件
應(yīng)用程序可以使用 App Engine 的郵件服務(wù)發(fā)送電子郵件。郵件服務(wù)使用 Google 基礎(chǔ)架構(gòu)發(fā)送電子郵件。
Memcache
Memcache 服務(wù)為您的應(yīng)用程序提供了高性能的內(nèi)存鍵值緩存,您可通過應(yīng)用程序的多個(gè)實(shí)例訪問該緩存。Memcache 對于那些不需要數(shù)據(jù)存儲區(qū)的持久性存儲和事務(wù)功能的數(shù)據(jù)(例如臨時(shí)數(shù)據(jù)或從數(shù)據(jù)存儲區(qū)復(fù)制到緩存以進(jìn)行高速訪問的數(shù)據(jù))很有用。
圖像操作
圖像服務(wù)使您的應(yīng)用程序可以對圖像進(jìn)行操作。使用該 API,您可以對 JPEG 和 PNG 格式的圖像進(jìn)行縮放、裁剪、旋轉(zhuǎn)和翻轉(zhuǎn)。
計(jì)劃任務(wù)
Cron 服務(wù)允許您將任務(wù)計(jì)劃為按指定間隔運(yùn)行。有關(guān)此服務(wù)的詳細(xì)信息,請參閱 Python 或 Java cron 文檔。
開發(fā)工作流
分別針對 Java 和 Python 的 App Engine 軟件開發(fā)工具包 (SDK) 包括可以在您的本地計(jì)算機(jī)上模擬所有 App Engine 服務(wù)的網(wǎng)絡(luò)服務(wù)器應(yīng)用程序。每一 SDK 均包括 App Engine 中的所有 API 和庫。該網(wǎng)絡(luò)服務(wù)器還可以模擬安全沙盒環(huán)境,包括檢查是否嘗試訪問在 App Engine 運(yùn)行時(shí)環(huán)境下不允許的系統(tǒng)資源。
SDK 還包括可將您的應(yīng)用程序上傳到 App Engine 的工具。創(chuàng)建了您的應(yīng)用程序的代碼、靜態(tài)文件和配置文件后,即可運(yùn)行該工具上傳數(shù)據(jù)。該工具會提示您提供 Google 帳戶電子郵件地址和密碼。
構(gòu)建已在 App Engine 上運(yùn)行的應(yīng)用程序的新主要發(fā)行版時(shí),可以將新發(fā)行版作為新版本上傳。在您改為使用新版本之前,舊版本可以繼續(xù)為用戶提供服務(wù)??梢栽谂f版本仍運(yùn)行的同時(shí)在 App Engine 上測試新版本。
Java SDK 在具有 Java 5 或 Java 6 的任何平臺上運(yùn)行。SDK 以 Zip 文件提供。如果您使用 Eclipse 開發(fā)環(huán)境,您可以使用 Eclipse Google 插件來創(chuàng)建、測試和上傳 App Engine 應(yīng)用程序。SDK 還包括用于運(yùn)行開發(fā)服務(wù)器和上傳應(yīng)用程序的命令行工具。
Python SDK 通過純 Python 實(shí)現(xiàn),可以在裝有 Python 2.5 的任何平臺(包括 Windows、Mac OS X 和 Linux)上運(yùn)行。該 SDK 以 Zip 文件形式提供,對于 Windows 和 Mac OS X 還提供安裝程序。
管理控制臺是基于網(wǎng)絡(luò)的接口,用于管理在 App Engine 上運(yùn)行的應(yīng)用程序。您可以使用它創(chuàng)建新應(yīng)用程序、配置域名、更改您的應(yīng)用程序當(dāng)前的版本、檢查訪問權(quán)限和錯(cuò)誤日志以及瀏覽應(yīng)用程序數(shù)據(jù)存儲區(qū)。
【編輯推薦】