Google推出Web开发利器:App Engine
作者 Geoffrey Wiseman譯者 胡鍵 發(fā)布于 2008年4月14日 上午3時(shí)59分 社區(qū) Architecture, SOA
?
2008年4月7號(hào),Google在Campfire One上介紹了一種簡(jiǎn)化創(chuàng)建、運(yùn)行和構(gòu)建伸縮性Web應(yīng)用的工具——Google App Engine。簡(jiǎn)而言之,Google App Engine允許你本地使用Google基礎(chǔ)設(shè)施構(gòu)建Web應(yīng)用,待其完工之后再將其部署到Google基礎(chǔ)設(shè)施之上。
這次發(fā)布的是沒有包含全部特性的預(yù)覽版,提供了一個(gè)配額系統(tǒng),它限制了在預(yù)覽期間應(yīng)用免費(fèi)可用的存儲(chǔ)、CPU和帶寬。一旦預(yù)覽期結(jié)束,配額仍將免費(fèi),但是開發(fā)者需要按需購買額外資源。額外資源的價(jià)格尚未公布(甚至可能尚未確定)。
預(yù)覽版的配額包括:3個(gè)應(yīng)用/開發(fā)者、500MB存儲(chǔ)/應(yīng)用、2000封郵件/天(連續(xù)24小時(shí))、10 GB入站帶寬、10 GB出站帶寬、200M CPU兆周、650k HTTP請(qǐng)求、2.5M Datastore API調(diào)用和160k URL Fetch API調(diào)用。
技術(shù):開發(fā)環(huán)境和API
盡管Google說‘未來將支持更多的語言’,但是目前技術(shù)棧是基于Python的,它是Google認(rèn)同的語言之一。出于安 全和伸縮性的目的,Google提供了一個(gè)運(yùn)行在安全沙箱中的Python運(yùn)行時(shí)環(huán)境,它提供對(duì)底層操作系統(tǒng)有限制的訪問。該環(huán)境包括標(biāo)準(zhǔn)庫,并可通過模 塊進(jìn)行擴(kuò)展,編寫模塊的語言目前不支持C語言。
該環(huán)境包括Python標(biāo)準(zhǔn)庫。當(dāng)然,調(diào)用那些違反沙箱限制的庫方法(如打開socket或?qū)懳募?#xff09;將不會(huì)成功。為了方便起見,幾個(gè)核心特性不被支持的標(biāo)準(zhǔn)庫中的模塊被禁用了。那些引入它們的代碼會(huì)出錯(cuò)。
應(yīng)用代碼只能用Python書寫。不支持使用C來編寫擴(kuò)展。
其他安全限制包括:出站通信(outbound communication)只能通過所提供的郵件和URL fetch API進(jìn)行,通過HTTP和HTTPS作為傳輸?shù)娜胝就ㄐ?#xff08;inbound communication)使用標(biāo)準(zhǔn)端口,禁止文件系統(tǒng)寫操作和禁止子進(jìn)程或代碼在請(qǐng)求/響應(yīng)循環(huán)外執(zhí)行(例如后臺(tái)操作和批操作)。
此外,Google提供了訪問一個(gè)Datastore、Google用戶帳號(hào)、URL fetch和郵件服務(wù)的API。App Engine還包括一個(gè)簡(jiǎn)化的Web應(yīng)用框架和Django 0.96.1,盡管App Engine Datastore不是關(guān)系型的,而且也不能使用全部的Django API。
Datastore API背后由Google的BigTable支持,但是它與一個(gè)簡(jiǎn)單的對(duì)象持久化API(或一個(gè)對(duì)象關(guān)系映射框架,即使Google強(qiáng)調(diào)這個(gè)Datastore不是關(guān)系型的)有很多相同之處:
你們中的大多數(shù),在使用這個(gè)Datastore時(shí)可能會(huì)有點(diǎn)不習(xí)慣:如我所說,它不是SQL。這是個(gè)巨大的區(qū)別。然而,我們想 了一下之后,認(rèn)為這個(gè)Datastore可能會(huì)引起你們的興趣,因?yàn)樗屢恍┦虑樽兒?jiǎn)單了。比如說,我們的Datastore沒有模式,這意味著它可以支 持任意的新屬性或列,你可以用代碼創(chuàng)建,無需把所有事情預(yù)先設(shè)計(jì)好并創(chuàng)建一個(gè)模式。這就回到了我們盡可能簡(jiǎn)化Web應(yīng)用編寫的目標(biāo):只需開始編碼就好了。 你的數(shù)據(jù)模型可以隨你應(yīng)用的演變而演變。
即使Datastore違背了SQL,我們?nèi)匀恢С帜阆胍膫鹘y(tǒng)關(guān)系數(shù)據(jù)庫的許多強(qiáng)大功能。對(duì)于任何你提供的單個(gè)屬性或?qū)傩约?合,Datastore都提供了高效查詢。它還支持對(duì)查詢結(jié)果的排序,包括按多屬性進(jìn)行排序。它對(duì)寫操作支持事務(wù),通過事務(wù)分組來控制。對(duì)于提取或創(chuàng)建大 量實(shí)體,它也支持批操作。它給你機(jī)會(huì)讓你來控制你實(shí)體的主鍵,以獲得更好的查詢效率和更短的URL。
并且,即使Datastore不是SQL,我們也為你提供了類SQL查詢以簡(jiǎn)化查詢的表達(dá),叫做GQL。GQL受到了jQuery和FBQL的啟發(fā):底層的存儲(chǔ)不是SQL,但是幾乎你想要的所有查詢?nèi)匀豢梢酝瓿伞?/p>
你可能已經(jīng)注意到我們的Datastore缺少一個(gè)大特性,那就就是連接(join)。這是因?yàn)檫B接通常是分布式系統(tǒng)效率問題的根源,當(dāng)你有不止一臺(tái)機(jī)器時(shí):很難在跨多個(gè)機(jī)器和多個(gè)硬盤的分布式系統(tǒng)上進(jìn)行連接操作。
盡管Datastore API支持事務(wù),但是它們有嚴(yán)格的限制,而且和實(shí)體組關(guān)聯(lián):
每個(gè)實(shí)體都屬于一個(gè)實(shí)體組,在一個(gè)事務(wù)內(nèi)可以操作一個(gè)或多個(gè)實(shí)體。實(shí)體組關(guān)系告訴App Engine在分布式網(wǎng)絡(luò)的同一部分保存幾個(gè)實(shí)體。一個(gè)事務(wù)為一個(gè)實(shí)體組設(shè)置Datastore操作,所有這些操作按組實(shí)施,如果事務(wù)失敗就全部撤銷。
當(dāng)應(yīng)用創(chuàng)建一個(gè)實(shí)體時(shí),它可以分配另一個(gè)實(shí)體作為新實(shí)體的父。給一個(gè)新實(shí)體分配父時(shí),將使它進(jìn)入父實(shí)體所在的實(shí)體組。
沒有父的實(shí)體是根實(shí)體。一個(gè)實(shí)體的父實(shí)體也可以有父。從一個(gè)實(shí)體到根的父實(shí)體鏈就是這個(gè)實(shí)體的路徑,路徑的成員是實(shí)體的祖先。實(shí)體的父只能在創(chuàng)建時(shí)定義,之后就不能修改。
祖先是同一根實(shí)體的所有實(shí)體都在相同的實(shí)體組中,組中的所有實(shí)體存儲(chǔ)在同一Datastore節(jié)點(diǎn)中。單個(gè)事務(wù)可以修改單個(gè)組中的多個(gè)實(shí)體,或通過將組中現(xiàn)有實(shí)體變成為新實(shí)體的父來把一個(gè)新實(shí)體加到組中。
因?yàn)锳pp Engine迫使你以一種特殊的方式(如Datastore on BigTable,而不是數(shù)據(jù)庫)來處理你的開發(fā),Google聲稱你的應(yīng)用將更易于伸縮,而且這種伸縮性幾乎是透明的:
當(dāng)一個(gè)Web應(yīng)用變得流行起來時(shí),突如其來的流量可以壓垮各種規(guī)模的應(yīng)用,從創(chuàng)業(yè)公司到大公司都發(fā)現(xiàn)需要一 年幾次的重新架構(gòu)他們的數(shù)據(jù)庫和整個(gè)應(yīng)用。通過自動(dòng)復(fù)制和負(fù)載均衡,利用Bigtable和Google的可伸縮基礎(chǔ)設(shè)施中的其他組件,Google App Engine使得應(yīng)用可以從一個(gè)用戶伸縮到百萬級(jí)用戶。User API允許通過Google帳號(hào)進(jìn)行用戶驗(yàn)證和登錄,以及訪問帳號(hào)的綽號(hào)和郵件。其他更多的用戶信息可以從應(yīng)用保存在Datastore中的用戶信息直接獲取。
URL fetch API能通過提取HTTP和HTTPs URL(支持GET、POST、HEAD、PUT和DELETE,因此這似乎可以支持REST功能)檢索遠(yuǎn)程服務(wù)器的信息。
Mail API允許App Engine應(yīng)用異步發(fā)送郵件,如果郵件服務(wù)器不可用時(shí)允許重試。
App Engine SDK包含模擬App Engine Python運(yùn)行時(shí)環(huán)境的服務(wù)器,以及:
- 模擬模塊引入限制,只允許處理程序引入被許可的模塊,它們來自標(biāo)準(zhǔn)庫、包含在App Engine Python環(huán)境中的第三方庫,以及應(yīng)用目錄中的模塊
- 模擬應(yīng)用緩沖行為
- 使用本地文件模擬App Engine Datastore
- 模擬包含有登錄和注銷頁面的Google帳號(hào),登錄參數(shù)可以是任何郵件地址。
- 通過提取你計(jì)算機(jī)的URL模擬URL fetch服務(wù)
- 使用你選擇的SMTP服務(wù)器或Sendmail配置模擬郵件服務(wù)
乍一看,絕大多數(shù)的應(yīng)用配置似乎可用YAML來寫。
動(dòng)機(jī)和競(jìng)爭(zhēng)
Google的公告稱他們的動(dòng)機(jī)是,簡(jiǎn)化Web應(yīng)用的構(gòu)建、部署和伸縮性:
嗯,我們構(gòu)建Web應(yīng)用是因?yàn)槲覀兿胍嗟腤eb應(yīng)用被創(chuàng)建出來。我們注意到,目前創(chuàng)建一個(gè)Web應(yīng)用真的很難:即使部署一個(gè)最簡(jiǎn)單的Web應(yīng)用也有巨大的前端挑戰(zhàn)。你需要做很多事情。當(dāng)然,首先你必須為你的應(yīng)用編寫代碼。
但是接著,你還需書寫你的Apache Web服務(wù)器配置和啟動(dòng)腳本,安裝你的數(shù)據(jù)庫,創(chuàng)建所有表和設(shè)置口令,安裝監(jiān)視器來了解你的流量和日志,決定你如何推出代碼的新版本等等。
那只是我們注意到的技術(shù)方面的挑戰(zhàn)。然后,一旦你完成了所有那些系統(tǒng)管理員的工作,你就有了另一個(gè)挑戰(zhàn):你必須著手去找你能使 用的機(jī)器來運(yùn)行你的應(yīng)用,不論是物理的還是虛擬的提供商。現(xiàn)在,就要花錢了:即使是最簡(jiǎn)單的應(yīng)用,一周用幾次,你都必須支付一大筆預(yù)支費(fèi)用來讓它在一個(gè)傳 統(tǒng)主機(jī)托管提供商處運(yùn)行。
那么,這就是財(cái)務(wù)或物理方面的挑戰(zhàn)。然后,一旦你搞定了整件事情并且運(yùn)行了,而且找到地方并為此付費(fèi)來測(cè)試它,你又面臨了另一 個(gè)挑戰(zhàn):隨著你應(yīng)用的成長(zhǎng),你必須去維護(hù)它。你的機(jī)器崩潰了,你的配置有錯(cuò)誤,你的硬盤壞了,你的流量開始增長(zhǎng),你必須重新分享你的數(shù)據(jù)庫,安裝更多更多 的機(jī)器。隨著應(yīng)用的成長(zhǎng),任何事情都象是一場(chǎng)激戰(zhàn)。
所有這些激戰(zhàn)正是我們?cè)噲D通過App Engine避免的。它們是我們正試圖解決的問題。
其他人已經(jīng)揣測(cè)出了言外之意。很多人指出了Google與Amazon和微軟在未來云計(jì)算和Web服務(wù)方面的競(jìng)爭(zhēng),常常將App Engine與Amazon的Web服務(wù)EC2、S3、SQS和SimpleDB相提并論:
-
O'Reilly Radar認(rèn)為:
自 從Amazon Web服務(wù)有這么好的開局之后,我們都知道這只不過是時(shí)間問題(我們可以有把握地假定下一個(gè)將會(huì)是微軟)。盡管拿AWS與GAE作對(duì)比是顯而易見的,但是 它們真的不是同一類工具。Amazon已發(fā)布的一組獨(dú)立服務(wù)可以被用來創(chuàng)建一個(gè)通用的計(jì)算平臺(tái)。盡管這些服務(wù)可以一起工作,但是它們沒有作為整體打包在一 起。
另一方面,App Engine是一個(gè)驅(qū)動(dòng)Web應(yīng)用的引擎。它將AWS提供的許多特性進(jìn)行了整體打包:存儲(chǔ)類似S3、自動(dòng)伸縮性和處理能力類似EC2,Datastore 類似SimpleDB。App Engine還提供了AWS沒有的特性,如Python運(yùn)行時(shí),Google特定的API,以及可能是最吸引人的免費(fèi)服務(wù)部分。
-
VentureBeat:“Google App Engine準(zhǔn)備與Amazon競(jìng)爭(zhēng)”
其他人暗示微軟也正攜一些工具向這個(gè)方向挺進(jìn),比如Ray Ozzie's Mesh strategy和SQL Server Data Services,但是可能已經(jīng)太晚了:
- Network world 說,“Google再次領(lǐng)先微軟”
- ZDNet問:“Google App Engine:微軟將何時(shí)圍捕競(jìng)爭(zhēng)者?”
看看事情的另一角度,某些人暗示這會(huì)使Google在收購方面棋高一著,這是一種風(fēng)險(xiǎn)基礎(chǔ)設(shè)施(venture infrastructure)形式:
- Business Week認(rèn)為Google和Amazon間的競(jìng)爭(zhēng)沒有提及這一點(diǎn):鼓勵(lì)創(chuàng)業(yè)公司在Google的基礎(chǔ)設(shè)施上開發(fā)他們的應(yīng)用,這使Google“不僅可以很好地了解人們想要的應(yīng)用和需要克服的問題,而且能敏銳地發(fā)現(xiàn)Google想收購的有前途的新創(chuàng)業(yè)公司”。
- ZDNet補(bǔ)充:它可以節(jié)約Google在收購方面的金錢:“想象一下,如果收購一家已經(jīng)使用Google技術(shù)的公司會(huì)省下多少時(shí)間和努力?”
- GigaOM說:“這種虧本銷售的服務(wù)將那些創(chuàng)業(yè)公司帶進(jìn)了Google的大門,這使得這家公司可以訪問最新的想法并可從天才企業(yè)家池中做出選擇”
-
在“Google如何吃掉Amazon的午餐”中,Kevin Kelleher稱這為投資:
在這次采訪中,我大聲地推測(cè)Amazon所做事情很像公司風(fēng)險(xiǎn)投資的(如Intel投資部)做法——投資和他們以后要合作(或者要收購)的創(chuàng)業(yè)公司。只是不用硬通貨,而是基礎(chǔ)設(shè)施。我得說,非常精明。
高管的反應(yīng)是:Amazon根本沒這么做,而且永遠(yuǎn)不會(huì)用Web服務(wù)那么做。我心里想了一下,但是沒說:嗯,如果你們不這樣做,有人會(huì)這么做的。
現(xiàn)在,有些人正在說Google正在這么做。隨著有價(jià)值的Google員工整理他們的桌子并啟動(dòng)一家新的創(chuàng)業(yè)公司,推出GAE是Google將他們重新召回的最好策略。這也是從Amazon身下抽走地毯的絕佳方法,戰(zhàn)略上明智而且盈利上也明智。
反饋、分析和資源
- 遍布網(wǎng)上和博客的其他分析:
- Jaiku,a Google新近收購的公司,宣布它將移植到App Engine。
- TechCrunch
- news.com
- Farhan Mashraqi說:這大大推進(jìn)了Python語言,和blist所做的一樣。
- fuzzmeister在Digg上的評(píng)論暗示這會(huì)有重大影響,“這會(huì)演變成對(duì)Web站點(diǎn)托管和運(yùn)行方式有根本性改變的事情”
- Wayne Pan認(rèn)為‘免費(fèi)’角度是最大的新聞,App Engine要真正吸引人需要支持其他語言和外部服務(wù)模型。
- Nate Koechley指出Guido Van Rossum是GAE團(tuán)隊(duì)成員之一。
- FaceReviews指出Robert Scoble在公告發(fā)布之后與Pownce進(jìn)行了交談,他們覺得沒有什么特別的。
- Adnans記錄了一些API相關(guān)的筆記。
- Technosailor說他沒看出有什么新意,既沒有創(chuàng)新,也不令人感到震撼。他是個(gè)懷疑論者。
- 以下論壇已經(jīng)就App Engine開始了一些討論:
- The Wait List
- How to debug on the server.
- Using the django ORM
- One-way application creation
- 預(yù)了解更多關(guān)于Google App Engine的信息:
- 訪問Google Code上的Google App Engine站點(diǎn)。
- 觀看YouTube上的視頻。
- 參與官方論壇的討論。
- 訪問官方博客
- 研究application gallery或Jaiku上的一些App Engine應(yīng)用。
- 閱讀google代碼知識(shí)庫上的FAQ。
- 閱讀一些關(guān)于App Engine的文章,包括
- Running Django
- Serving Dynamic Images
- Uploading Data and Making it Searchable
- The Django Form Validation Framework
- Logging Events in your Application
查看英文原文:Google 'simplifies web development' with AppEngine
轉(zhuǎn)載于:https://www.cnblogs.com/Henrya2/archive/2008/12/28/1363928.html
總結(jié)
以上是生活随笔為你收集整理的Google推出Web开发利器:App Engine的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 装修先刮大白还是先打衣柜家装是先刷墙还是
- 下一篇: 龙昆南宜家广场为什么烂尾