云PaaS向容器生態系統的演變之路
原文 http://cloud.51cto.com/art/201503/467521.htm
本文作者將分析云PaaS的演變之路(著眼于構建并運行云端Web應用程序這一背景),并分析容器生態系統問世,尤其Docker和
Kubernetes問世之后,在不遠的將來會出現的影響。在眾多不同的云計算服務模式當中,平臺即服務(PaaS)模式是最引人入勝的模式。云計算的實
際好處在于,云平臺提供了運營靈活性,我們沒必要為IT基礎設施而操心,只要專注于構建應用程序。如果你確實想要充分發揮云計算的真正魅力,又想發揮云計
算提供的運營靈活性,就應該充分利用PaaS解決方案,而不是建立IaaS實例:與相應的PaaS解決方案相比,基礎設施即服務(IaaS)實例需要大量
的人工干預。
當前的PaaS生態系統:Azure、AWS和谷歌云三足鼎立
亞馬遜網絡服務(AWS)是第一個公有云平臺,它最初是從IaaS平臺起家的。另一方面,Azure起初就是一個PaaS平臺,微軟簡化了構建 應用程序并部署到云端的方式。后來,AWS開始支持PaaS解決方案,Azure開始支持IaaS解決方案。與此同時,谷歌云(Google Cloud)推出了自己的PasS解決方案,旨在簡化構建應用程序并部署到云端的方式。
在微軟Azure中,主要的PaaS解決方案是“云服務” (Cloud Services),云服務提供了支持Java、Node.js、PHP、Python、.NET和Ruby的功能。云服務模式提供了兩種模式:Web角 色(Web Role)和工作者角色(Worker Role)。Web角色讓你可以運行Web應用程序,而工作者角色讓你可以運行后臺處理服務。Azure還提供了Azure網站,該網站也是在云端構建 Web應用程序的一個很好的選擇。但云服務更適合用來構建多層次云應用程序。Azure的解決方案其主要缺點在于,它基于Windows操作環境,這對非 Windows社區來說沒有吸引力。如果想部署非Windows系統,你就得使用Azure的IaaS服務。但是對在.Net架構和Windows上從事 開發的開發人員來說,Azure是比其他任何云平臺更勝一籌的選擇。對于.Net開發人員而言,相比AWS的類似解決方案,Azure是個很好的選擇。我 強烈推薦.Net開發者社區使用Azure。
AWS的PaaS服務可用于部署和管理Web應用程序,名為“彈性Beanstalk” (Elastic Beanstalk)。彈性Beanstalk提供了支持Java、.NET、PHP、Node.js、Python和Ruby的功能。彈性 Beanstalk的一大優勢在于,它與熟悉的服務器系統如影相隨,比如Apache、Nginx、Passenger和IIS。不像Azure,它隨帶 多種操作系統平臺和服務器,這會吸引多個開發者社區。在這種背景下,相比Azure,彈性Beanstalk是一種更好的平臺。但是坦率地說,從PaaS 的角度來看,Azure云服務和Azure網站比彈性Beanstalk更好。如果你在AWS彈性Beanstalk和Azure云服務上都從事過開發, 就會青睞Azure云服務,至少對.Net開發人員來說是這樣。
我發現,許多AWS客戶使用IaaS服務主要是為了部署Web應用程序,而不是使用AWS彈性Beanstalk。作為一名云解決方案架構師, 本人構建云解決方案的方法是,只要有可能可以充分利用PaaS解決方案,就用它,而不是充分利用IaaS實例。原因在于,我們可以把更多的注意力放在應用 程序開發上,而且我們也沒有必要花時間在IaaS虛擬機上進行許多設置。
谷歌云的 PaaS解決方案是“谷歌應用引擎”(Google App Engine)。谷歌應用引擎(GAE)提供了支持Python、 Java、PHP和Go的功能。它并不支持.Net,這是僅次于Java架構的一大企業技術架構。但我欣賞這個決定,因為Azure是最適合.Net開發 人員的解決方案。谷歌應用引擎的一個優點就是,它支持Go(Golang),這項新興技術可用于構建下一代應用程序。不過眼下,對Go的支持不是非常出 色。
一般而言,當前針對PaaS采取的做法是,為每一種編程語言和開發平臺提供單獨的運行時環境。如果PaaS平臺不提供支持你所用語言環境的功能,就只好使用其IaaS實例,還需要搭建基礎設施。
Docker和Kubernetes:革命性的容器生態系統
應用程序容器正在改變廣大開發人員構建、交付和運行應用程序的方式。Docker憑借其功能強大的開源平臺,正在徹底改變應用程序容器技術。 Docker是一種應用程序容器技術平臺,可用于構建、交付和運行你的分布式應用程序。Docker生態系統包括Docker引擎(Docker Engine)和Docker中心(Docker Hub);Docker引擎是一種可移植的、輕量級的運行時和封裝工具,可用于構建容器化的應用程序;而Docker中心是一種云服務,可用于共享應用程 序、實現工作流自動化。Docker讓開發人員可以將應用程序容器化,而且可以在任何地方運行這些應用程序。Docker讓你可以連接不同的容器,從而組 合容器化的應用程序。Docker其實是一個強大的生態系統,你可以充分利用Docker中心上可供使用的成千上萬的應用程序。Docker基于 Linux容器而建。
Docker還在改變我們為云端構建應用程序的方式。Docker革命將運行中的服務器應用程序由虛擬機變成了容器。我認為,這是分布式應用程 序開發的演變歷程,當前的生態系統依賴虛擬機,主要利用IaaS服務的虛擬機。Docker給云平臺帶來重大影響后,Kubernetes大大有助于管理 云端容器。Kubernetes是一項實施了容器集群管理的開源技術,由谷歌開發。它最初是為谷歌計算引擎(GCE)開發的,用來管理應用程序容器。在谷 歌,一切都在Linux容器中封裝及運行;而Kubernetes負責容器集群管理。即便你在用谷歌應用引擎運行應用程序,它在內部還是使用谷歌計算引 擎,一切都在基于Kubernetes的Linux容器上運行。現在,谷歌開放了Kubernetes的源代碼,那樣其他云平臺就能利用 Kubernetes的強大功能,管理Linux容器(包括Docker容器)。
Docker和Kubernetes都在容器技術生態系統產生了重大影響。值得關注的是,這兩項技術都是用Go編程語言編寫而成的。我在《2015年及以后的Web開發趨勢》這篇文章中,預測Go會成為2015年的新興編程語言。