詳細介紹
2008年4月7號,Google在Campfire One上介紹了一種簡化創建、運行和構建伸縮性Web套用的工具——Google App Engine。簡而言之,Google App Engine允許你本地使用Google基礎設施構建Web套用,待其完工之後再將其部署到Google基礎設施之上。
這次發布的是沒有包含全部特性的預覽版,提供了一個配額系統,它限制了在預覽期間套用免費可用的存儲、CPU和頻寬。一旦預覽期結束,配額仍將免費,但是開發者需要按需購買額外資源。額外資源的價格尚未公布(甚至可能尚未確定)。
預覽版的配額包括:3個套用/開發者、500MB存儲/套用、2000封郵件/天(連續24小時)、10 GB入站頻寬、10 GB出站頻寬、200M CPU兆周、650k HTTP請求、2.5M Datastore API調用和160k URL Fetch API調用。
您可以使用 Google提供的免費域名(見擴展閱讀)為您的應用程式提供服務,也可以使用 Google Apps 從您自己的域為它提供服務。您可以與全世界的人共享您的應用程式,也可以限制為只有您組織內的成員可以訪問。
您可以免費開始使用 App Engine。註冊一個免費帳戶即可開發和發布您的應用程式以供全世界的人共享,而且不需要承擔任何費用和責任。每個免費帳戶都可使用多達 500MB 的持久存儲空間,以及可支持每月約 500 萬頁面瀏覽量的足夠 CPU 和寬頻。
使用 Google App Engine 的試用版本期間,只可以使用免費帳戶。您很快就能夠購買其他的計算資源。 App Engine提供了一個web套用運行的框架,App Engine應用程式易於運行、部屬和擴展。App Engine不同於其他方案:App Engine不是
格線計算—它不能運行任意的作業。它不提供物理
主機但提供了打包代碼上傳的方式。用戶在只需要在代碼中指定了response和request,剩下的運行和部署的任務就交給了App Engine。用戶不需要預留資源,例如RAM、CPU或者諸如此類。
Google App Engine是Google提供的可擴展系統上構建網路應用程式。每個Google App Engine應用程式都可使用多達500MB的持久存儲空間以及可支持每月500萬綜合瀏覽量的足夠頻寬和CPU。目前每個用戶可以免費創建十個套用。
Google App Engine可讓您在Google的基礎架構上運行您的網路應用程式。App Engine應用程式易於構建和維護,並可根據您的訪問量和數據存儲需要的增長輕鬆擴展。使用Google App Engine,將不再需要維護伺服器:您只需上傳您的應用程式,它便可立即為您的用戶提供服務。
應用程式環境
通過 Google App Engine,即使在
重載和數據量極大的情況下,也可以輕鬆構建能安全運行的應用程式。該環境包括以下特性:
持久存儲有查詢、分類和事務
自動擴展和載荷平衡
用於對用戶進行身份驗證和使用 Google 帳戶傳送電子郵件的 API
一種功能完整的本地
開發環境,可以在您的計算機上模擬 Google App Engine
當前,Google App Engine官方正式 支持 Python 語言、 JAVA 語言、
Go語言和PHP語言,而對應perl的開發工作,Google的開發小組也正在進行。
雖然,Google App Engine支持的語言並不多,但是,藉助強大的JAVA語言的Java Scripting Engine功能,實際上很多
腳本語言都可以在Google App Engine上運行,例如Scala、Groovy、JavaScript、PHP、JRuby等等。
Sandbox
在安全環境中運行的應用程式,僅提供對基礎作業系統的有限訪問許可權。這些限制讓 App Engine 可以在多個伺服器之間分發應用程式的網路請求,並可以啟動和停止伺服器以滿足訪問量需求。Sandbox 將您的應用程式隔離在它自己的安全可靠環境中,該環境與
網路伺服器的硬體、作業系統和物理位置無關。
安全 Sandbox 環境的限制實例包括:
應用程式只能通過提供的網址獲取和
電子郵件服務和 API 訪問網際網路中的其他計算機。其他計算機只能通過在標準連線埠上進行 HTTP(或 HTTPS)請求來連線至該應用程式。
應用程式無法向檔案系統寫入。應用程式只能讀取通過應用程式代碼上傳的檔案。該應用程式必須使用 App Engine 資料庫存儲所有在請求之間持續存在的數據。
應用程式代碼僅在回響網路請求時運行,且必須在幾秒鐘內返迴響應數據。請求處理程式不能在回響傳送後產生子進程或執行代碼。
運行時環境
App Engine 提供了一個使用 Python 程式語言的運行時環境。將來的版本將考慮使用其他程式語言和運行時環境配置。
Python 運行時環境使用 Python 2.5.2 版。
該環境包括 Python 標準庫。當然,您無法調用違反了 Sandbox 限制的庫方法,例如嘗試打開
套接字或向檔案寫入。方便起見,其主要功能不受該運行時環境支持的標準庫中的多個模組已被禁用,而導入這些模組的代碼將發生錯誤。
應用程式代碼只能以 Python 編寫。具有用 C 編寫的擴展的代碼不受支持。
Python 環境為資料庫、Google 帳戶、網址獲取和
電子郵件服務提供了豐富的 Python API。App Engine 還提供了一個稱為 webapp 的簡單 Python 網路應用程式框架,從而可以輕鬆開始構建應用程式。
方便起見,App Engine 還包括 Django 網路應用程式框架 0.96.1 版。請注意,App Engine 資料庫不是某些 Django 組件所需的關係資料庫。某些組件(例如 Django
模板引擎)按照文檔化的程式工作,而其他組件則需要做更多工作。有關將 Django 與 App Engine 一起使用的提示,請參閱文章部分。
只要這些庫是完全使用 Python 實現並且不需要任何不受支持的標準庫模組,您就可以使用您的應用程式上傳其他第三方庫。
有關 Python 運行時環境的詳細信息,請參閱 Python 運行時環境。
資料庫
App Engine 提供了一個強大的分散式數據存儲服務,其中包含查詢引擎和事務功能。就像
分散式網路伺服器隨訪問量增加一樣,該
分散式資料庫也會隨數據而增加。
資料庫的 Python API 包括一個可以定義資料庫實體結構的
數據建模界面。數據模型可以指示屬性值必須位於給定範圍內,如果未給定任何範圍,還可以提供默認值。您的應用程式可以根據需要向數據提供或多或少的結構。
資料庫使用樂觀鎖定進行
並發控制。如果有其他進程嘗試更新某實體,而同時該實體位於以固定次數進行重新嘗試的事務中,此時該實體將更新。應用程式可以在一個事務中執行多項資料庫操作(全部成功或者全部失敗),從而確保數據的完整性。
資料庫通過其
分散式網路使用“實體組”實現事務。一個事務操作一個組內的實體。同一組的實體存儲在一起,以高效執行事務。應用程式可以在實體創建時將實體分配到組。
有關資料庫的詳細信息,請參閱資料庫 API 參考。
Google 帳戶
App Engine 包括用於與 Google 帳戶集成的服務 API。應用程式使用戶可以通過 Google 帳戶登錄,並可以訪問與該帳戶關聯的電子郵件地址和可顯示的名稱。使用 Google 帳戶使用戶可以更快地開始使用您的應用程式,因為用戶可以不需要創建新帳戶了。Google 帳戶還省去只為您的應用程式執行用戶帳戶系統的麻煩。
如果您的應用程式正在 Google Apps 下運行,則它可以與您組織的成員和 Google Apps 帳戶成員使用相同的功能。
用戶 API 還可告知應用程式當前用戶是否是應用程式的註冊管理員。這樣便可以輕鬆實現您站點上僅用於管理的區域。
有關與 Google 帳戶集成的詳細信息,請參閱用戶 API 參考。
服務
App Engine 提供了多種服務,從而使您可以在管理應用程式的同時執行常規操作。提供了以下 API 以訪問這些服務:
網址獲取
應用程式可以使用 App Engine 的網址獲取服務訪問網際網路上的資源,例如
網路服務或其他數據。網址獲取服務使用用於為許多其他 Google 產品檢索網頁的高速 Google 基礎架構來檢索網路資源。有關網址獲取服務的詳細信息,請參閱網址獲取 API 參考。
郵件
應用程式可以使用 App Engine 的郵件服務傳送電子郵件。郵件服務使用 Google 基礎架構傳送電子郵件。有關郵件服務的詳細信息,請參閱郵件 API 參考。
Memcache
Memcache 服務為您的應用程式提供了高性能的記憶體鍵值快取,您可通過應用程式的多個實例訪問該快取。Memcache 對於那些不需要資料庫的永久性功能和事務功能的數據很有用,例如臨時數據或從資料庫複製到
快取以進行高速訪問的數據。有關 Memcache 服務的詳細信息,請參閱 Memcache API 參考。
圖片操作
圖片服務使您的應用程式可以對圖片進行操作。使用該 API,您可以對 JPEG 和 PNG 格式的圖片進行大小調整、剪下、旋轉和翻轉。有關圖片操作服務的詳細信息,請參閱圖片 API 參考。
開發工作流程
App Engine 軟體開發套件 (SDK) 包括可以在您的本地計算機上模擬所有 App Engine 服務的
網路伺服器應用程式。該 SDK 包括 App Engine 中的所有 API 和庫。該網路伺服器還可以模擬安全 Sandbox 環境,包括檢查是否存在禁用模組的導入以及對不允許訪問的系統資源的嘗試訪問。
Python SDK 完全使用 Python 實現,可以在裝有 Python 2.5 的任何平台上運行,包括 Windows、Mac OS X 和 Linux。您可以在 Python 網站上獲得適用於您的系統的 Python。該 SDK 以 Zip 檔案提供,安裝程式可用於 Windows 和 Mac OS X。
該 SDK 還包括可將您的應用程式上傳到 App Engine 的工具。創建了您應用程式的代碼、靜態檔案和配置檔案後,即可運行該工具上傳數據。該工具會提示您提供 Google 帳戶電子郵件地址和密碼。
構建已在 App Engine 上運行的應用程式的新主要發行版時,可以將新發行版作為新版本上傳。在您改為使用新版本之前,舊版本可以繼續為用戶提供服務。可以在仍運行舊版本的同時在 App Engine 上測試新版本。
管理控制台是基於網路的界面,用於管理在 App Engine 上運行的應用程式。您可以使用它創建新應用程式、配置域名、更改您的應用程式當前的版本、檢查訪問許可權和
錯誤日誌以及瀏覽應用程式資料庫。
限額和限制
創建 App Engine應用程式不僅簡單,而且是免費的!您可以創建帳戶,然後發布一個應用程式,用戶無需承擔任何費用和責任即可立即使用該應用程式。通過免費帳戶獲得的應用程式可使用多達 500MB 的存儲空間和多達每月 500 萬的頁面瀏覽量。
此試用時間內,僅提供免費帳戶。您很快就能夠以有競爭力的市場價格購買其他的計算資源。試用期過後,免費帳戶可繼續使用。
此試用期間,最多可註冊 3 個應用程式。
應用程式資源限制(“限額”)會不斷刷新。如果您的應用程式達到基於時間的限額(例如寬頻),則該限額將以給定限制的比率立即開始刷新。固定限額(例如存儲使用量)僅在降低使用量時才會減小。
有些功能會施加與限額無關的限制,以保護系統的穩定性。例如,當調用某應用程式以為網路請求提供服務時,該應用程式必須在幾秒鐘內發出回響。如果該應用程式花費的時間過長,則進程將被終止並且伺服器將向用戶返回錯誤代碼。回響逾時是動態的,如果請求處理程式經常達到其逾時,則可以縮短請求逾時以節省資源。
服務限制的另一實例是查詢返回的結果數。一個查詢最多可返回 1,000 條結果。要返回更多結果的查詢只能返回該最大值。在這種情況下,執行這種查詢的請求不可能在逾時前返回請求,但限制仍存在以節省資料庫上的資源。
試圖破壞或濫用限額(例如同時在多個帳戶上操作應用程式)違反服務條款,並可能導致應用程式被禁用或帳戶關閉。
設計
首先,在編程方面,Datastore是基於"Entity(實體)"這個概念,而且Entity和"對象"這個概念比較類似,同時Entity可以包括多個Property(屬性),Property的類別有整數,浮點和字元串等,比如,可以設計一個名為"Person"的Entity,它包含名為"Name"的字元串Property和名為"Age"的整數Property。由於Datastore是"Schema-less"的,所以數據的Schema都由套用維護,而且能非常方便地對一個Entity所包含的屬性進行增刪和修改。在存儲方面,一個Entity的實例可以被認為是一個普通的"Row(行)",而包含所有這種Entity的實例的Table被稱為Kind,比如,所有通過"Person"這個Entity生成實例,比如小吳,小朱和小華等,它們都會存放在同一個名為"Person"的Kind中。在結構方面,雖然也能通過特定的方式在Datastore中實現關係型結構,但是Datastore在設計上是為層次(Hierarchical)性結構"度身定做"的,有Root Entity和Child Entity之分,比如,可以把"Person"作為Root Entity(父實體),"Address"作為"Person"的Child Entity,兩者合在一起可以稱為一個"Entity Group"。這樣做的好處是能將這兩個實體集中一個BigTable本地分區中,而且能對這兩個實體進行本地事務。
下表為Datastore和傳統的關係型資料庫之間的比較:
| Datastore
| 關係型資料庫
|
SQL支持
| 只支持一些基本的查詢
| 全部支持
|
主要結構
| 層次(Hierarchical)
| 關係
|
Index
| 部分可自動創建
| 手動創建
|
事務
| 只支持在一個Entity Group內執行
| 支持
|
平均執行速度(ms)
| 低於200
| 低於100
|
擴展型
| 非常好
| 很困難,而且需要進行大量的修改
|
表1. Datastore和關係型資料庫之間的比較
總體而言,Datastore在設計理念上和傳統的關係型資料庫有很大的不同,所以其在反應速度和寫數據方面不是最優的,但是如今Web套用以讀為主,而且需要能通過簡單的擴展就能支持其海量的數據,而這兩點卻是Datastore所擅長,所以Datastore非常適合支撐Web套用。
技術
儘管Google說‘未來將支持更多的語言’,但是當前技術棧是基於Python的,它是Google認同的語言之一。出於安全和伸縮性的目的,Google提供了一個運行在安全沙箱中的Python運行時環境,它提供對底層作業系統有限制的訪問。該環境包括標準庫,並可通過模 塊進行擴展,編寫模組的語言當前不支持C語言。
該環境包括Python標準庫。當然,調用那些違反沙箱限制的庫方法(如打開socket或寫檔案)將不會成功。為了方便起見,幾個核心特性不被支持的標準庫中的模組被禁用了。那些引入它們的代碼會出錯。
套用代碼只能用Python書寫。不支持使用C來編寫擴展。
其他安全限制包括:出站通信(outbound communication)只能通過所提供的郵件和URL fetch API進行,通過HTTP和HTTPS作為傳輸的入站通信(inbound communication)使用標準連線埠,禁止檔案系統寫操作和禁止子進程或代碼在請求/回響循環外執行(例如後台操作和批操作)。
此外,Google提供了訪問一個Datastore、Google用戶帳號、URL fetch和郵件服務的API。App Engine還包括一個簡化的Web套用框架和Django 0.96.1,儘管App Engine Datastore不是關係型的,而且也不能使用全部的Django API。
Datastore API背後由Google的BigTable支持,但是它與一個簡單的對象持久化API(或一個對象關係映射框架,即使Google強調這個Datastore不是關係型的)有很多相同之處。
套用
1、Google App Engine空間
Google App Engine也就是GAE,是Google推出的一款網路運用程式,也是個免費虛擬主機空間,其實這比一般虛擬主機強悍的多,你可以利用Google App Engine工具來開發網站或製作網路應用程式,Google會在自己的龐大伺服器集群上為你提供空間、頻寬、資源等。
Google App Engine對全球開發者免費開放使用,你可以充分利用Google的提供的免費空間、免費資料庫、免費二級域名等來展示你開發的應用程式,提供給全球的用戶下載和使用。
只要你有一個Google賬號就可以在Google App Engine上註冊和開通一個免費賬號,免費賬號允許你創建25個套用,每一個套用提供1GB的容量,月流量是60GB(傳出頻寬是1GB/天,傳入頻寬1GB/天)。
驗證碼
Google App Engine套用需要驗證手機,這一驗證主要是為了防止Google App Engine套用被濫用。在使用Google App Engine套用時,部分移動或者聯通的手機無法接受到驗證碼簡訊(SMS),又無法更換手機申請,那么我們怎么處理呢?還好,谷歌的服務總是從顧客的角度出發的,如果你收不到驗證碼簡訊(SMS),那么可以填寫申請表單來實現。
最新報導
谷歌2008年推出App Engine幫助外部開發人員在谷歌數據中心和伺服器網路上開發和運行程式,從而正式進軍公共雲計算領域,與在該行業占據領先地位的亞馬遜展開競爭。
雲計算提供商通常互相競爭,希望儘可能多的客戶使用自己的數據中心。但在周二,谷歌宣布與初創企業AppScale合作,允許App Engine上的應用程式不經修改即可在其他雲伺服器或公司自有數據中心和伺服器上運行。
谷歌的這一舉措使得開發人員有可能通過App Engine開發應用程式,然後拿到其他雲服務提供商那裡運行。不過谷歌雲平台全球解決方案主管Miles Ward稱,上述舉措將幫助公司吸引更多雲客戶,尤其是礙於所謂“雲割據”規定、無法按慣常方式在某些國家提供應用程式和網頁服務的情況下。