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