Google應用服務引擎
開發者 | |
---|---|
首次發布 | 2008年4月7日 |
當前版本 | 1.9.51(2017年3月29日 | )
編程語言 | Python、Java、Go、PHP, Node.js |
操作系統 | linux (glibc)、Windows |
平台 | little-endian 32bits |
類型 | Web應用框架、雲端運算 |
許可協議 | 專有軟體、LGPL |
網站 | cloud |
Google App Engine是一個開發、託管網絡應用程序的平台,使用Google管理的數據中心。它在2008年4月發布了第一個beta版本。
Google App Engine使用了雲計算技術。它跨越多個服務器和數據中心來虛擬化應用程序。[1]
Google App Engine在用戶使用一定的資源時是免費的。支付額外的費用可以獲得應用程序所需的更多的存儲空間、帶寬或是CPU負載。[2]
支持的編程語言和框架
[編輯]當前,Google App Engine支持的編程語言是Python、Java、PHP和Go(通過擴展,可以支持其他JVM語言,諸如Groovy、JRuby、Scala和Clojure)。支持Django、WebOb、PyYAML的有限版本。Google說它準備在未來支持更多的語言,Google App Engine也將會獨立於某種語言。任何支持WSGI的使用CGI的Python框架可以使用。框架可以與開發出的應用程序一同上傳,也可以上傳使用Python編寫的第三方庫。[3][4]
與其他應用程序託管的區別
[編輯]與其他可擴展的託管服務(例如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 App Engine的Datastore使用一個與SQL類似的語言,叫做「GQL」。在GQL中,SELECT語句僅可以用於一個表。因為要跨越不只一台機器, GQL不支持效率很低的JOIN語句[5]。欲建立一對多和多對多的關係,可使用ReferenceProperty()[6]。採用這種無共享的方式,即使磁盤壞了,系統也不致癱瘓[7]。
在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類白名單 (頁面存檔備份,存於網際網路檔案館))[8]。
- Java應用程序不能創建新的線程。
可移植性
[編輯]開發者擔心App Engine應用程序不能移植到其他平台上,因而被困在單一種技術(Vendor lock-in)之內。[9]
從App Engine下載數據
[編輯]App Engine自SDK1.2.2版開始,已容許以批量的方式下載數據[10]。此外,用戶也可使用開源項目gaebar[11]、approcket[12] 和gawsh[13] 來下載、備份在App Engine上的數據。
限額
[編輯]免費帳戶使用App Engine時,受配額限制。應用程序作者可以視乎需要,付錢購買更多配額。[14]
硬性限制
[編輯]項目 | 限制 |
---|---|
每次請求的時間 | 普通請求60秒,任務請求10分鐘,後台請求無限 |
每個應用程序的文件 | 1000個 |
HTTP響應的大小 | 32 MB |
Datastore單項大小 | 1 MB |
應用程序代碼大小 | 150 MB |
免費的配額
[編輯]供免費使用的配額曾於2009年5月25日[15] 、2009年6月22日以及2011年5月三度下調[16]。
項目 | 配額 |
---|---|
每天的Email數量 | 100封 |
每天的輸入數據 | 無限 |
每天的輸出數據 | 1 GB |
每天可使用CPU | 28小時 |
每天調用Datastore API次數 | 50000次* |
數據存儲 | 1 GB |
每天調用URLFetch API次數 | 657000次* |
競爭對手
[編輯]Google App Engine與Amazon Web Services(一個應用程序服務系統,支持在Amazon的服務器上託管文件、執行代碼)直接競爭。不少科技分析師早在多年前已預計過,Google會加入這場競賽。其中,Techdirt的出版人Mike Masnick寫到,「Google終於了解到它需要覇佔網絡平台這個地位。我們可以期待,開發及落實易於擴展的網絡應用程式會變得越來越容易,而應用程式也會越來越具創意。」[17]
此外,紅帽公司的 openshift、微軟的Azure服務平台以及 Koding 也是Google App Engine的競爭對手。
中華人民共和國封鎖
[編輯]由於Google App Engine允許用戶託管網絡應用程序,且服務器不在中華人民共和國境內,故有部分用戶利用其搭建代理(如GoAgent)用於突破防火長城的審查[18],故Google App Engine的域名 *.appspot.com 的SSL加密連接長期遭到防火長城的封鎖。
- 2010年12月20日,Google App Engine的域名 appspot.com 遭到防火長城的關鍵詞過濾封鎖。由於先前Google App Engine的SSL連接已經被封,故中華人民共和國境內的用戶無法正常連接與使用。此次Google App Engine被封鎖適逢2010年諾貝爾和平獎頒獎典禮。appspot.com非加密連接於2010年12月23日解封。
- 至今appspot.com仍遭到DNS投毒污染、URL域名關鍵詞過濾和服務器IP地址屏蔽三重封鎖,無法從中華人民共和國正常訪問[19],但也仍有一些軟件或用戶通過修改本機Hosts等方法繞過封鎖以使用GAE。
參考文獻
[編輯]- ^ Python Runtime Environment. Google Developers. 11 December 2014 [2009-07-15]. (原始內容存檔於2012-03-12).
- ^ Quotas. Google Developers. 12 January 2015 [2009-07-15]. (原始內容存檔於2012-03-14).
- ^ What Is Google App Engine?. Google Developers. 9 December 2014 [2009-07-15]. (原始內容存檔於2011-03-23).
- ^ webapp Overview. Google Developers. 22 September 2014 [2009-07-15]. (原始內容存檔於2012-03-15).
- ^ Campfire One: Introducing Google App Engine (pt. 3). YouTube. 7 April 2008 [2009-07-15]. (原始內容存檔於2017-07-31).
- ^ Modeling Entity Relationships. Google Developers. 22 September 2014 [2009-07-15]. (原始內容存檔於2012-02-25).
- ^ Google Architecture - High Scalability -. highscalability.com. [2009-07-15]. (原始內容存檔於2021-01-09).
- ^ The JRE Class White List. Google Developers. 22 September 2014 [2009-07-15]. (原始內容存檔於2012-02-19).
- ^ Analysis: Google App Engine alluring, will be hard to escape. Ars Technica. [2009-07-15]. (原始內容存檔於2011-07-16).
- ^ Backup/Restore, Copy, and Delete Data. Google Developers. 27 January 2015 [2009-07-15]. (原始內容存檔於2012-03-12).
- ^ aral/gaebar. GitHub. [2009-07-15]. (原始內容存檔於2017-07-29).
- ^ approcket - Live synchronization between AppEngine and MySQL - Google Project Hosting. google.com. [2009-07-15]. (原始內容存檔於2016-01-23).
- ^ gawsh - Google Apps Web Service Helpers - Google Project Hosting. google.com. [2009-07-15]. (原始內容存檔於2016-01-23).
- ^ Understanding Application Quotas with Google App Engine. [2008-09-10]. (原始內容存檔於2008-12-18).
- ^ Google, Inc., Upcoming Changes to the Free Quotas (頁面存檔備份,存於網際網路檔案館)——於2009年2月26日覆閱過
- ^ Google, Inc., [1] (頁面存檔備份,存於網際網路檔案館) 於2009年6月17日覆閱過
- ^ Google Finally Realizes It Needs To Be The Web Platform. 2008-04-07 [2008-04-12]. (原始內容存檔於2018-03-13).
- ^ GAppProxy. [2011-02-09]. (原始內容存檔於2016-01-17).GTAP. [2011-02-09]. (原始內容存檔於2016-01-12).
- ^ Test Result for appspot.com. Greatfire.org. [2021-04-17]. (原始內容存檔於2021-04-17).
外部連結
[編輯]- Official marketing page (頁面存檔備份,存於網際網路檔案館)
- 官方網站
- Official Google Cloud Platform Blog (頁面存檔備份,存於網際網路檔案館)
- Release notes (頁面存檔備份,存於網際網路檔案館)
- Google App Engine - 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 App Engine (頁面存檔備份,存於網際網路檔案館)
- Using an external database with Google App Engine (頁面存檔備份,存於網際網路檔案館)
- Java Frameworks and libraries supported
- Web2py book -- online documentation -- Google App Engine 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
- Google Compute Engine 教學
- Google Kubernetes Engine 教學
- Google Cloud Platform 教學