2009 年,我發(fā)現(xiàn)了谷歌 App Engine,并很快愛上了這一服務(wù)。這一服務(wù)承諾,任何軟件開發(fā)者都能開發(fā)面向任何用戶,在任何時間、任何地點都可以使用的應(yīng)用,同時不必?fù)?dān)心服務(wù)器配置、數(shù)據(jù)庫設(shè)置、操作系統(tǒng)版本、信息安全漏洞、負(fù)載平衡,或是規(guī)模如何擴大的問題。這意味著,應(yīng)用將可以自動擴大規(guī)模!我們所要做的只是撰寫代碼,而 App Engine 將為我們完成其余一切工作。
在 2009 年時我就已經(jīng)看到,到 2015 年,很大一部分互聯(lián)網(wǎng)代碼將運行在類似的平臺上。誰會想要糾結(jié)配置和運營問題?系統(tǒng)管理員將可以從復(fù)雜的工作中被解放出來。最終,我們將可以自由編寫代碼,而不必?fù)?dān)心如何去執(zhí)行,以及通過什么平臺去執(zhí)行。我們不必再關(guān)注規(guī)模,并可以從復(fù)雜的運營工作中被解放出來。我們的未來一片光明,不必再關(guān)注如何配置等細(xì)節(jié)。
然而,事情與我們想象中并不完全一樣。
為什么會這樣?
目前的現(xiàn)實并不是“ 一次開發(fā),在任何地方運行 ”。AppEngine 仍在履行,并將繼續(xù)履行最初的承諾。(這是我仍在 業(yè)余項目 中使用 App Engine 的原因。)然而在這一過程中,你會遇到種種問題,例如難以解釋的內(nèi)存泄漏,或是漫長的等待時間。正如一名來自谷歌的朋友所說:“App Engine 非常有趣。該服務(wù)面向所有用戶的運行速度都是同樣的緩慢,而無論用戶有多少。”
市面上還有許多其他平臺即服務(wù)(PaaS)提供商。例如,云計算市場領(lǐng)先者亞馬遜也提供了 PaaS 產(chǎn)品,即 Elastic Beanstalk。我也曾頻繁使用 Heroku,但這款產(chǎn)品同樣非常糟糕。在處理異步任務(wù)和自動負(fù)載平衡等方面,Heroku 不如 App Engine,不過在部署和 PostgreSQL 數(shù)據(jù)庫等方面要好。然而,Heroku 并未提供廣泛的應(yīng)用程序接口(API)。通過谷歌,你實際上能獲得比其他地方更好的 API。這就是你通過谷歌平臺去運行代碼的優(yōu)勢和劣勢。
不過目前,谷歌自身也不像 2009 年時一樣重視這一領(lǐng)域。2012 年時,由于對 App Engine 狀況的不滿,谷歌推出 谷歌 Compute Engine,即亞馬遜 AWS 服務(wù)的直接競爭對手。毫無疑問,相對于采購設(shè)備并搭建自己的服務(wù),利用這樣的服務(wù)將更方便。不過,從易用性、靈活性和部署時間來看,這些服務(wù)相對于 PaaS 服務(wù)似乎是一種倒退。那么,為何 PaaS 服務(wù)未能征服所有市場?
PaaS 服務(wù)取得過成功。例如,Snapchat 就運行在 App Engine 之上,可汗學(xué)院 也是如此。Genius 和 ProductHunt 則基于 Heroku。這兩大平臺也為其他許多創(chuàng)業(yè)公司和大公司提供了服務(wù)。不過,如果 PaaS 能取得更大的成功,那么谷歌原本沒有必要推出 Compute Engine,Docker 就不會成為新的熱點,而 DevOps 也不會像現(xiàn)在一樣知名。
那么,為何仍有許多人放棄 PaaS,轉(zhuǎn)而開發(fā)自己的 AWS 和 Compute Engine 實例?為何 App Engine、Heroku 和 Elastic Beanstalk 未能征服世界?良好的控制性是否真的很重要?
我猜測,原因包括 3 個方面:成本、對開發(fā)者的鎖定,以及文化。
App Engine 的 價格 會經(jīng)常性下調(diào),但這樣的調(diào)價過于頻繁,令人迷惑。單一的實例,即一個簡單的虛擬機,成本要超過每天 1 美元,這還不計算存儲或帶寬成本。Heroku 的情況也是類似。通過購買及運行自己的服務(wù)器,你能獲得更好的性價比。盡管這時你會遇到更多的麻煩,導(dǎo)致開發(fā)時間被延長,但轉(zhuǎn)而使用 PaaS 帶來的好處對許多人來說并沒有足夠的價值。
隨后是被鎖定的問題。一旦你在 App Engine 的訂制 API 之上開發(fā)了應(yīng)用,你將需要專注于這一平臺。你沒有一種較好的方式回退,并轉(zhuǎn)而使用另一家公司的平臺。這種對開發(fā)者的鎖定在其他 PaaS 服務(wù)中并不是很明顯,但仍然存在?;A(chǔ)設(shè)施即服務(wù)(IaaS)領(lǐng)域有著 OpenStack 和 Docker 等通用標(biāo)準(zhǔn),而 PaaS 領(lǐng)域沒有這樣的事實標(biāo)準(zhǔn)。
第三個原因,也是被認(rèn)為最重要的一點原因在于文化。企業(yè)并不希望放棄對自主系統(tǒng)的控制,即使這樣的控制權(quán)將導(dǎo)致很嚴(yán)重的復(fù)雜性。可以理解,系統(tǒng)管理員不希望丟掉自己的工作。
不過,這 3 點原因都是暫時性的。成本正在持續(xù)下降,文化在不斷改變。有跡象表明,可互操作的 PaaS 服務(wù)和相應(yīng)標(biāo)準(zhǔn)正在 緩慢發(fā)展 。(你可以認(rèn)為,Docker 就是這一趨勢下的產(chǎn)物。)
在電力剛剛出現(xiàn)的時代,所有工廠都使用自己的發(fā)電機,但隨后都轉(zhuǎn)向了公共的電網(wǎng)。IaaS 相當(dāng)于所有公司都從電網(wǎng)中獲得電力,但隨后通過自主的變壓器將電力轉(zhuǎn)換為自己所需的形式。我認(rèn)為,PaaS 服務(wù)仍將繼續(xù)發(fā)展。在這樣的世界里,在代碼運行過程中,開發(fā)者不必了解或關(guān)注服務(wù)器的問題。這樣的趨勢只是比我想象中略微緩慢。
-----------------------------------