Google應用服務引擎

**Google 應用服務引擎**是一個開發、代管網路應用程式的平台，使用 Google 管理的資料中心。它在 2008 年 4 月發布了第一個 beta 版本。

Google 應用服務引擎使用了雲端運算技術。它跨越多個伺服器和資料中心來虛擬化應用程式。

Google 應用服務引擎在使用者使用一定的資源時是免費的。支付額外的費用可以獲得應用程式所需的更多的儲存空間、頻寬或是 CPU 負載。

## 支援的程式語言和框架

當前，Google 應用服務引擎支援的程式語言是 Python、Java、PHP 和 Go（通過擴充，可以支援其他 JVM 語言，諸如 Groovy、JRuby、Scala 和 Clojure）。支援 Django、WebOb、PyYAML 的有限版本。Google 說它準備在未來支援更多的語言，Google 應用服務引擎也將會獨立於某種語言。任何支援 WSGI 的使用 CGI 的 Python 框架可以使用。框架可以與開發出的應用程式一同上傳，也可以上傳使用 Python 編寫的第三方庫。

## 與其他應用程式代管的區別

與其他可延伸的代管服務（例如 Amazon EC2）比較，App Engine 提供了更多基礎服務來方便編寫可延伸的應用程式，但僅限於 App Engine 設計框架以內的應用程式。

App Engine 的基礎服務省卻了許多系統管理的操作，以便將規模擴大到數以百萬計的存取。Google 負責處理一組代碼，可以監測、容錯，在必要的時候還會開發一些應用實例。

有些應用程式代管服務讓使用者安裝、組態幾乎所有 \*NIX 相容的軟體，而 App Engine 則要求開發者使用 Python 或 Java 語言來編程，而且只能使用一套限定的 API。當前的 API 允許程式於一個 BigTable 非關聯式資料庫上儲存和檢索資料、提出 HTTP 請求、傳送 E-mail、處理圖像、還有快取。大多數現存的 Web 應用程式，若未經修改，均不能直接在 App Engine 上執行，因為它們需要使用關聯式資料庫。

頻寬和 CPU 的使用、送達請求的數量、並行請求的數量、以及呼叫各種 API 的次數，皆設有每天和每分鐘的限額。個別的請求，如果需時超過 30 秒或返回超過 10MB 的資料，都會被終止。

## SQL 與 GQL 的區別

Google 應用服務引擎的 Datastore 使用一個與 SQL 類似的語言，叫做「GQL」。在 GQL 中，SELECT 語句僅可以用於一個表。因為要跨越不只一台機器， GQL 不支援效率很低的 JOIN 語句。欲建立一對多和多對多的關係，可使用 ReferenceProperty ()。採用這種無共享的方式，即使磁碟壞了，系統也不致癱瘓。

在 GQL 中，SELECT 語句中的 WHERE 從句只容許對僅僅一列進行 >、>=、< 或 <= 比較。所以，僅僅可以構造簡單的 WHERE 從句。在資料建模時，要從關聯式資料庫轉換到 Datastore，開發者需要轉變觀念。

App Engine 限制每次 Datastore 請求最多返回 1000 行資料。大多數 Web 應用程式，都不會受此影響，因為它們通常並不會在一張頁面上列出超過 1000 條記錄（可以用分頁和快取機制），只要按順序返回結果就可以了。若有應用程式需要在一次操作中返回更多的記錄，則需自行使用客戶端軟體或者 Ajax 頁面，按查詢順序提取更多條記錄。

這個 Datastore 的 API 是不關聯的，有別於一般關聯式資料庫 —— 比如 IBM DB2、Microsoft SQL Server、MySQL、Oracle 資料庫、或者 PostgreSQL。

## 限制

* 在 App Engine 的檔案系統中，開發者只有讀取的權限。
* App Engine 僅可在回應 HTTP 請求時執行代碼（計劃的後台任務、任務佇列和 XMPP 服務則不在此限）。
* 使用者可以上傳任意的 Python 模組，但必須是純 Python 模組，不得包含 C 擴充程式或其他需要編譯的代碼。
* App Engine 限制每次 Datastore 請求最多返回 1000 行資料。
* Java 應用程式只能使用 JRE 基本版本類別館中的一個子集（JRE 類白名單 （頁面存檔備份，存於網際網路檔案館））。
* Java 應用程式不能建立新的執行緒。

## 可移植性

開發者擔心 App Engine 應用程式不能移植到其他平台上，因而被困在單一種技術 (Vendor lock-in) 之內。

## 從 App Engine 下載資料

App Engine 自 SDK1.2.2 版開始，已容許以批次的方式下載資料。此外，使用者也可使用開源專案 gaebar、approcket 和 gawsh 來下載、備份在 App Engine 上的資料。

## 限額

免費帳戶使用 App Engine 時，受配額限制。應用程式作者可以視乎需要，付錢購買更多配額。

### 硬性限制

### 免費的配額

供免費使用的配額曾於 2009 年 5 月 25 日 、2009 年 6 月 22 日以及 2011 年 5 月三度下調。

## 競爭對手

Google 應用服務引擎與 Amazon Web Services（一個應用程式服務系統，支援在 Amazon 的伺服器上代管檔案、執行代碼）直接競爭。不少科技分析師早在多年前已預計過，Google 會加入這場競賽。其中，Techdirt 的出版人 Mike Masnick 寫到，「Google 終於了解到它需要覇佔網路平台這個地位。我們可以期待，開發及落實易於擴充的網路應用程式會變得越來越容易，而應用程式也會越來越具創意。」

此外，紅帽公司的 openshift、微軟的 Azure 服務平台以及 Koding 也是 Google 應用服務引擎的競爭對手。

## 中華人民共和國封鎖

由於 Google 應用服務引擎允許使用者代管網路應用程式，且伺服器不在中華人民共和國境內，故有部分使用者利用其搭建代理（如 GoAgent）用於突破防火長城的審查，故 Google 應用服務引擎的域名 \*.appspot.com 的 SSL 加密連接長期遭到防火長城的封鎖。

* 2010 年 12 月 20 日，Google 應用服務引擎的域名 appspot.com 遭到防火長城的關鍵詞過濾封鎖。由於先前 Google 應用服務引擎的 SSL 連接已經被封，故中華人民共和國境內的使用者無法正常連接與使用。此次 Google 應用服務引擎被封鎖適逢 2010 年諾貝爾和平獎頒獎典禮。appspot.com 非加密連接於 2010 年 12 月 23 日解封。
* 2011 年 3 月兩會召開前夕，appspot.com 再次遭到防火長城的關鍵詞過濾封鎖及域名污染，同時部分伺服器的 IP 位址亦遭到徹底封鎖，甚至兩會結束後至今亦沒有解封。
* 至今 appspot.com 仍遭到 DNS 投毒污染、URL 域名關鍵詞過濾和伺服器 IP 位址封鎖三重封鎖，無法從中華人民共和國正常存取，但也仍有一些軟體或使用者通過修改本機 Hosts 等方法繞過封鎖以使用 GAE。

## 參考文獻

## 外部連結

* Official marketing page （頁面存檔備份，存於網際網路檔案館）
* 官方網站
* Official Google Cloud Platform Blog （頁面存檔備份，存於網際網路檔案館）
* Release notes （頁面存檔備份，存於網際網路檔案館）
* Google 應用服務引擎 - Run your web applications on Google's infrastructure （頁面存檔備份，存於網際網路檔案館） - a technical talk by Google engineer Guido van Rossum at Stanford University. (online video archive)
* Benefits of adopting Google 應用服務引擎 （頁面存檔備份，存於網際網路檔案館）
* Using an external database with Google 應用服務引擎 （頁面存檔備份，存於網際網路檔案館）
* Java Frameworks and libraries supported
* Web2py book -- online documentation -- Google 應用服務引擎 deployment recipe
* Google Cloud SQL Sample Projects （頁面存檔備份，存於網際網路檔案館）
* Google Cloud supports node.js （頁面存檔備份，存於網際網路檔案館）
* **Appmd**: Python development sample project. App Engine/django/Google Closure/Endpoints/Material design