云PaaS向容器生態(tài)系統(tǒng)的演變之路
譯文本文作者將分析云PaaS的演變之路(著眼于構(gòu)建并運(yùn)行云端Web應(yīng)用程序這一背景),并分析容器生態(tài)系統(tǒng)問世,尤其Docker和Kubernetes問世之后,在不遠(yuǎn)的將來會出現(xiàn)的影響。在眾多不同的云計算服務(wù)模式當(dāng)中,平臺即服務(wù)(PaaS)模式是最引人入勝的模式。云計算的實(shí)際好處在于,云平臺提供了運(yùn)營靈活性,我們沒必要為IT基礎(chǔ)設(shè)施而操心,只要專注于構(gòu)建應(yīng)用程序。如果你確實(shí)想要充分發(fā)揮云計算的真正魅力,又想發(fā)揮云計算提供的運(yùn)營靈活性,就應(yīng)該充分利用PaaS解決方案,而不是建立IaaS實(shí)例:與相應(yīng)的PaaS解決方案相比,基礎(chǔ)設(shè)施即服務(wù)(IaaS)實(shí)例需要大量的人工干預(yù)。
當(dāng)前的PaaS生態(tài)系統(tǒng):Azure、AWS和谷歌云三足鼎立
亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)是***個公有云平臺,它最初是從IaaS平臺起家的。另一方面,Azure起初就是一個PaaS平臺,微軟簡化了構(gòu)建應(yīng)用程序并部署到云端的方式。后來,AWS開始支持PaaS解決方案,Azure開始支持IaaS解決方案。與此同時,谷歌云(Google Cloud)推出了自己的PasS解決方案,旨在簡化構(gòu)建應(yīng)用程序并部署到云端的方式。
在微軟Azure中,主要的PaaS解決方案是“云服務(wù)” (Cloud Services),云服務(wù)提供了支持Java、Node.js、PHP、Python、.NET和Ruby的功能。云服務(wù)模式提供了兩種模式:Web角色(Web Role)和工作者角色(Worker Role)。Web角色讓你可以運(yùn)行Web應(yīng)用程序,而工作者角色讓你可以運(yùn)行后臺處理服務(wù)。Azure還提供了Azure網(wǎng)站,該網(wǎng)站也是在云端構(gòu)建 Web應(yīng)用程序的一個很好的選擇。但云服務(wù)更適合用來構(gòu)建多層次云應(yīng)用程序。Azure的解決方案其主要缺點(diǎn)在于,它基于Windows操作環(huán)境,這對非 Windows社區(qū)來說沒有吸引力。如果想部署非Windows系統(tǒng),你就得使用Azure的IaaS服務(wù)。但是對在.Net架構(gòu)和Windows上從事開發(fā)的開發(fā)人員來說,Azure是比其他任何云平臺更勝一籌的選擇。對于.Net開發(fā)人員而言,相比AWS的類似解決方案,Azure是個很好的選擇。我強(qiáng)烈推薦.Net開發(fā)者社區(qū)使用Azure。
AWS的PaaS服務(wù)可用于部署和管理Web應(yīng)用程序,名為“彈性Beanstalk” (Elastic Beanstalk)。彈性Beanstalk提供了支持Java、.NET、PHP、Node.js、Python和Ruby的功能。彈性 Beanstalk的一大優(yōu)勢在于,它與熟悉的服務(wù)器系統(tǒng)如影相隨,比如Apache、Nginx、Passenger和IIS。不像Azure,它隨帶多種操作系統(tǒng)平臺和服務(wù)器,這會吸引多個開發(fā)者社區(qū)。在這種背景下,相比Azure,彈性Beanstalk是一種更好的平臺。但是坦率地說,從PaaS 的角度來看,Azure云服務(wù)和Azure網(wǎng)站比彈性Beanstalk更好。如果你在AWS彈性Beanstalk和Azure云服務(wù)上都從事過開發(fā),就會青睞Azure云服務(wù),至少對.Net開發(fā)人員來說是這樣。
我發(fā)現(xiàn),許多AWS客戶使用IaaS服務(wù)主要是為了部署Web應(yīng)用程序,而不是使用AWS彈性Beanstalk。作為一名云解決方案架構(gòu)師,本人構(gòu)建云解決方案的方法是,只要有可能可以充分利用PaaS解決方案,就用它,而不是充分利用IaaS實(shí)例。原因在于,我們可以把更多的注意力放在應(yīng)用程序開發(fā)上,而且我們也沒有必要花時間在IaaS虛擬機(jī)上進(jìn)行許多設(shè)置。
谷歌云的 PaaS解決方案是“谷歌應(yīng)用引擎”(Google App Engine)。谷歌應(yīng)用引擎(GAE)提供了支持Python、 Java、PHP和Go的功能。它并不支持.Net,這是僅次于Java架構(gòu)的一大企業(yè)技術(shù)架構(gòu)。但我欣賞這個決定,因?yàn)锳zure是最適合.Net開發(fā)人員的解決方案。谷歌應(yīng)用引擎的一個優(yōu)點(diǎn)就是,它支持Go(Golang),這項新興技術(shù)可用于構(gòu)建下一代應(yīng)用程序。不過眼下,對Go的支持不是非常出色。
一般而言,當(dāng)前針對PaaS采取的做法是,為每一種編程語言和開發(fā)平臺提供單獨(dú)的運(yùn)行時環(huán)境。如果PaaS平臺不提供支持你所用語言環(huán)境的功能,就只好使用其IaaS實(shí)例,還需要搭建基礎(chǔ)設(shè)施。
Docker和Kubernetes:革命性的容器生態(tài)系統(tǒng)
應(yīng)用程序容器正在改變廣大開發(fā)人員構(gòu)建、交付和運(yùn)行應(yīng)用程序的方式。Docker憑借其功能強(qiáng)大的開源平臺,正在徹底改變應(yīng)用程序容器技術(shù)。Docker是一種應(yīng)用程序容器技術(shù)平臺,可用于構(gòu)建、交付和運(yùn)行你的分布式應(yīng)用程序。Docker生態(tài)系統(tǒng)包括Docker引擎(Docker Engine)和Docker中心(Docker Hub);Docker引擎是一種可移植的、輕量級的運(yùn)行時和封裝工具,可用于構(gòu)建容器化的應(yīng)用程序;而Docker中心是一種云服務(wù),可用于共享應(yīng)用程序、實(shí)現(xiàn)工作流自動化。Docker讓開發(fā)人員可以將應(yīng)用程序容器化,而且可以在任何地方運(yùn)行這些應(yīng)用程序。Docker讓你可以連接不同的容器,從而組合容器化的應(yīng)用程序。Docker其實(shí)是一個強(qiáng)大的生態(tài)系統(tǒng),你可以充分利用Docker中心上可供使用的成千上萬的應(yīng)用程序。Docker基于 Linux容器而建。
Docker還在改變我們?yōu)樵贫藰?gòu)建應(yīng)用程序的方式。Docker革命將運(yùn)行中的服務(wù)器應(yīng)用程序由虛擬機(jī)變成了容器。我認(rèn)為,這是分布式應(yīng)用程序開發(fā)的演變歷程,當(dāng)前的生態(tài)系統(tǒng)依賴虛擬機(jī),主要利用IaaS服務(wù)的虛擬機(jī)。Docker給云平臺帶來重大影響后,Kubernetes大大有助于管理云端容器。Kubernetes是一項實(shí)施了容器集群管理的開源技術(shù),由谷歌開發(fā)。它最初是為谷歌計算引擎(GCE)開發(fā)的,用來管理應(yīng)用程序容器。在谷歌,一切都在Linux容器中封裝及運(yùn)行;而Kubernetes負(fù)責(zé)容器集群管理。即便你在用谷歌應(yīng)用引擎運(yùn)行應(yīng)用程序,它在內(nèi)部還是使用谷歌計算引擎,一切都在基于Kubernetes的Linux容器上運(yùn)行。現(xiàn)在,谷歌開放了Kubernetes的源代碼,那樣其他云平臺就能利用Kubernetes的強(qiáng)大功能,管理Linux容器(包括Docker容器)。
Docker和Kubernetes都在容器技術(shù)生態(tài)系統(tǒng)產(chǎn)生了重大影響。值得關(guān)注的是,這兩項技術(shù)都是用Go編程語言編寫而成的。我在《2015年及以后的Web開發(fā)趨勢》這篇文章中,預(yù)測Go會成為2015年的新興編程語言。
#p#
面向Docker的AWS彈性Beanstalk
作為AWS的PaaS平臺,彈性Beanstalk開始通過PaaS解決方案支持Docker。這是AWS推出的一個優(yōu)秀項目,因?yàn)槟憧梢酝ㄟ^PaaS抽象,處理容器生態(tài)系統(tǒng),你沒必要為支持云平臺提供的語言運(yùn)行時環(huán)境而操心。我們可以在Docker容器里面封裝運(yùn)行時環(huán)境。這將為云平臺提供大好機(jī)會,也會在云平臺上從事開發(fā)的開發(fā)人員提供大好機(jī)會。比如說,AWS彈性Beanstalk沒有面向Go語言的語言運(yùn)行時環(huán)境。但是由于Docker支持彈性 Beanstalk,我們可以在AWS彈性Beanstalk中運(yùn)行Go應(yīng)用程序,我可以將Go映像添加到Docker本身提供的Docker容器里面。
谷歌容器引擎:云PaaS領(lǐng)域的下一大革命
在去年發(fā)布Docker 1.0之后,應(yīng)用程序容器這個技術(shù)術(shù)語備受關(guān)注。但自2007年以來,谷歌就致力于容器方面的研究;谷歌計算引擎基于容器技術(shù)生態(tài)系統(tǒng)。谷歌表示,他們每個星期都在全球數(shù)據(jù)中心發(fā)布超過20億個的容器實(shí)例。從Gmail到搜索,谷歌里面的一切東西都在Linux容器里面封裝并運(yùn)行。透露一個秘密,谷歌在用容器技術(shù)擴(kuò)展其基礎(chǔ)設(shè)施,谷歌早已是容器生態(tài)系統(tǒng)的領(lǐng)跑者。
谷歌容器引擎(Google Container Engine)是谷歌云平臺提供的一項新服務(wù)。谷歌容器引擎是面向Docker容器的全面管理的集群管理器,基于Kubernetes。有了谷歌容器引擎,你就能輕松封裝Docker容器,并迅速在谷歌基礎(chǔ)設(shè)施上運(yùn)行應(yīng)用程序。為容器技術(shù)提供的這項新服務(wù)讓你可以從管理在單個虛擬機(jī)上運(yùn)行的云應(yīng)用程序,轉(zhuǎn)為啟動可移植的Docker容器,這些容器為你調(diào)度到受屋管理的計算集群里面。谷歌容器引擎是云PaaS的下一大發(fā)展階段。這由單個虛擬機(jī)上的運(yùn)行中應(yīng)用程序變?yōu)榭梢浦驳娜萜?,容器的集群管理在其中將由Kubernetes等技術(shù)來執(zhí)行。更令人稱道的是,谷歌容器引擎在現(xiàn)有的PaaS引擎:谷歌應(yīng)用引擎上提供了PaaS抽象,那樣開發(fā)人員就能輕松處理容器技術(shù),擁有更高的運(yùn)營靈活性。
Docker與微軟攜手將Docker引入到Windows和Azure上
應(yīng)用程序容器技術(shù)建立在Linux容器的基礎(chǔ)之上,那樣這一點(diǎn)確實(shí)很明顯:用Windows服務(wù)器構(gòu)建Docker容器不可能。許多人認(rèn)為,Docker是采用Linux而不是Windows的又一個理由。但是形勢在未來可能會發(fā)生變化。Docker與微軟達(dá)成了合作,將Docker引入到Windows服務(wù)器和微軟Azure上。如果Docker和微軟能為Windows提供一種更好的平臺,這將是一場巨大的革命。我們可以用任何平臺來構(gòu)建容器,可以在任何操作系統(tǒng)平臺上運(yùn)行。目前,Docker客戶機(jī)可以在多種系統(tǒng)上運(yùn)行,但如果我們可以用多種平臺來封裝Docker容器,那確實(shí)會非常棒。
云平臺之戰(zhàn)并未結(jié)束,而是剛從容器生態(tài)系統(tǒng)開始
許多人認(rèn)為,各大云平臺提供商之間的云平臺之戰(zhàn)已經(jīng)結(jié)束,AWS是這個領(lǐng)域的贏家。這是完全錯誤的想法。我認(rèn)為,平臺之戰(zhàn)剛剛從容器生態(tài)系統(tǒng)開始打響。在容器生態(tài)系統(tǒng)方面,谷歌無疑是領(lǐng)頭羊,因?yàn)槠洮F(xiàn)有的IaaS服務(wù)已經(jīng)在Linux容器上運(yùn)行,而且谷歌已經(jīng)開發(fā)并管理Kubernetes之類的卓越技術(shù)。在IaaS領(lǐng)域,谷歌已經(jīng)比AWS更勝一籌。如果你將AWS EC2和谷歌計算引擎作一番公正客觀的比較,就會認(rèn)識到,谷歌計算引擎要比AWS出色得多。由于云PaaS向容器技術(shù)演變――谷歌在這個領(lǐng)域的實(shí)力***大,谷歌云在PaaS方面同樣獲得了領(lǐng)先優(yōu)勢。我們分析云平臺的卓越技術(shù)后,發(fā)覺谷歌在各大云平臺當(dāng)中有重大優(yōu)勢。將來對AWS平臺真正構(gòu)成重大威脅的將是谷歌云平臺,而不是微軟Azure。就微軟Azure而言,它們能吸引典型的企業(yè)客戶,這些客戶在Windows平臺上使用.NET技術(shù)架構(gòu)來構(gòu)建應(yīng)用程序。確實(shí)很顯然,容器技術(shù)正在改變云計算平臺,而且在改變?nèi)藗儾渴鸷凸芾響?yīng)用程序的方式。
英文原文:The evolution of cloud paas to container ecosystem