官术网_书友最值得收藏!

1.3 容器即服務

1.3.1 從基礎設施到平臺

在容器集群的生態圈中,各個部分相互依賴和關聯,形成了如圖1-6所示的復雜的技術棧。中間部分是作為核心的容器引擎,它需要基于特定的存儲引擎和操作系統的支持。為了能夠大規模地運行應用服務,在容器引擎之上還有其他各種需求,比如容器網絡、服務發現、負載均衡、任務調度等,這些需求本身是容器引擎無法滿足的,因此需要將各種基礎設施進行組合。構建這樣的一個體系后,實際上容器集群已演化成一個平臺化的服務。

圖1-6 容器集群平臺

云計算通常被劃分為三層,分別是SaaS(軟件即服務)、PaaS(平臺即服務)和IaaS(基礎設施即服務),它們對應了云計算的三種應用方式。SaaS層的應用主要以與業務直接相關的服務為中心,即各行各業的互聯網相關業務,如電子商務、金融保險、電信通訊等,這些不同的服務都可以通過企業應用的SaaS方式進行交付,從而獲得動態擴縮和彈性調度的能力,而這些能力恰恰是由下層的PaaS提供的。云計算的發展使得大規模服務部署的需求越發旺盛,而PaaS和IaaS分別提供了這些部署的能力和載體。IaaS以資源為中心,提供資源彈性,讓整個資源以按需獲取的方式提供出來。PaaS以上層應用為中心,提供部署的彈性。

云計算的三層發展并不是十分平衡的,在最初的一段時間里,相對IaaS和SaaS而言,PaaS的發展一直比較滯后。其根本原因在于,早期PaaS始終沒有解決好本身的復雜度以及與應用層的耦合度問題。這個問題促使了以容器平臺技術為核心的新一代PaaS體系的形成,為了與早期的PaaS區別開來,這一代平臺體系通常被稱為CaaS。

用戶的業務需求是動態變化的,用戶需要以快速、高效的方式實現其容器應用的橫向擴展。在CaaS中的許多特性和傳統PaaS都有相似的地方,例如屏蔽底層資源差異、屏蔽分布式部署細節、資源動態擴縮、內置監控、日志、網絡解決方案等。但從另一方面來說,CaaS的生態是基于容器和微服務理念打造的,相較于傳統PaaS,它更加輕量,同時也具有更好的普適性,更易于維護。

可用性通常是分布式應用的重要指標。單點失效是分布式系統的基本假設,當單個容器失效時需要有機制將容器重建甚至遷移到其他計算資源上,從而保持整體服務不受影響。CaaS也要對計算資源故障進行容錯。值得一說的是,在對服務器和服務器集群進行管理的時候,有兩種截然不同的管理方式,它們通常被比喻成“飼養寵物”和“放牧牲畜”,如圖1-7所示。

圖1-7 “飼養寵物”和“放牧牲畜”

在現實場景中,“飼養寵物”型的服務器管理方式其實十分常見。比如對于數據庫服務器而言,一般企業里其絕對不允許宕機,因為數據庫一旦宕機,所有服務就全部不可用了,所以要人為維護,這也就是DBA要做的事情。人圍著機器轉,這是典型的飼養寵物型的服務器管理思路,一旦數據庫宕機馬上需要有人去修。那么“放牧牲畜”是一種怎樣的管理方式呢?對于規模巨大的集群,比如由數千、上萬乃至更多服務器組成的集群,如果要確保每一個節點永遠處于工作狀態,所需的運維將極其復雜,人力成本將是一個天文數字。因此,集群管理的關注點不應該放在每個單獨的節點上,而是一定要能夠允許一些服務器處于故障狀態,也就是說集群的容錯能力才是最需要被關注的設計要素。實際上,對運行在一個帶健康檢查的負載均衡背后的數個Web服務來說,即使出現了一些異常,集群依然能夠對外提供服務。就像是牛群中忽然少了幾頭牛,整個牛群依然井然有序,并不會因此進入混亂狀態。

在集群中管理服務,實際上總是隱含著對服務高可用性的需求,而這兩種服務的管理方式并非存在著孰優孰劣。像是數據庫這類需要持久化存儲服務的高可用實施方式,通常是采用多個副本和分片來實現的,雖然能夠容忍一定程度的故障,但在故障發生時,人為地進行分析和恢復的確是必要和安全的做法。而像大多數Web應用那樣不帶數據狀態的服務,當個別節點不可用時,只要能夠快速地識別出來,然后部署新的節點來替代它們就足夠了,這樣的過程是完全可以被自動化的。

容器本身的環境隔離和快速部署特性,對于“放牧牲畜”這樣的任務來說,實在是再合適不過了。通過CaaS管理服務能夠在系統出現軟硬件故障時具有較好的容錯性,放養型的運作管理方式也能夠有效降低集群和CaaS平臺本身的維護成本、運維成本。

作為云計算中一種平臺式的概念,CaaS同樣存在“公有CaaS”和“私有CaaS”的分別。前者提供的是存放在開放的互聯網上,任何用戶都能夠以快速的、按需付費的方式進行容器部署和管理的服務平臺。后者主要是存在于企業內部,針對特定應用場景優化或是與企業自身業務流程相吻合的容器化軟件交付平臺。想要完全外包硬件來支持快速應用程序開發的企業,可以利用公共CaaS服務;想要將應用程序開發工作保持在企業內部的企業,可以利用私有云解決方案。

從技術的實現來看,CaaS服務是需要依托于IaaS的基礎設施實現的。服務的擴縮本質上依然是主機資源的伸縮,只是通過容器的包裝屏蔽了復雜性。因此許多目前比較成功的CaaS平臺也都是依托于特定IaaS實現的,下面給出了一些示例。

·Amazon ECS:全稱是Amazon EC2 Container Service,這是亞馬遜基于它的云平臺設計的用于直接運行容器的云端服務。

·CoreOS Tectonic:這是CoreOS公司與Google公司合作的公有云和私有云的CaaS解決方案,主要賣點在于備受推崇的Google-style infrastructure服務和CoreOS系統本身的安全特性。

·Docker Datacenter:這是Docker公司推出的私有云CaaS解決方案,包含Universal Control Plane和Trusted Registry等服務,作為Docker官方的首選推薦,具有不錯的競爭力。

·Google Container Engine:這是由Google公司提供,架設在Google Compute Engine之上的公有云容器運行平臺,與亞馬遜的ECS是直接的競爭對手。

·Project Magnum:這是基于OpenStack架構的CaaS解決方案,它通過OpenStack的API服務將基于Swarm、Kubernetes、Mesos的容器發布過程集成到私有IaaS云中。

國內近年來也涌現出許多耳熟能詳的CaaS平臺,靈雀云、道客云、時速云、有容云、精靈云、希云等本土企業都相繼發布了自己的容器管理系統,筆者相信這個領域依然具有十分廣闊的發展空間。

1.3.2 數據中心操作系統

虛擬化技術自誕生以后就不斷地改變著人們使用硬件資源的方式。近年來,從搜索引擎到社交網絡再到微服務和SaaS,虛擬化一直作為支持軟件規模化運用背后的關鍵驅動力。如果沒有虛擬化所帶來的服務器利用率的提升和相關成本的節約,那么現在所使用的大多數線上公共服務以及企業級的云計算都是不可能實現的。隨著數據中心轉型,虛擬化背后最初的設想,即把一臺大型、昂貴的服務器劃分為多臺虛擬機的理念,已然有了不同的含義。相反,虛擬化不再是分配個別服務器的資源,而是將大量的服務器合并為一個倉庫規模的虛擬計算機,以運行分布式的應用程序。

維基百科對數據中心的定義是:包括計算機系統和其他與之配套的設備,還包含冗余的數據通信連接、環境控制設備、監控設備以及各種安全裝置的一整套復雜的設施。在傳統的數據中心里,主機與任務的分配是靜態的,為了確保所有服務能獲得充分的峰值資源,通常會為每種任務分配足量的資源,這使得主機的利用率十分低。同時,還需要由許多IT專業人員組成的團隊來保障所有的服務器能運行,并且確保其中的各個應用程序都能按需獲得與之匹配的網絡、存儲、CPU等資源。這個工作量十分繁重,以至于必須有一種特殊的管理系統來自動化地處理所有設備上的重復事務,然而這些管理系統往往是專用于特定數據中心甚至是特定服務類型任務的。

數據中心操作系統是一個很有趣的概念,它的目的是設計一種通用的服務管理系統,使得用戶能夠像使用個人計算機操作系統那樣,直觀且高效地管理部署在整個數據中心的數以萬計的應用服務。這個概念是加州大學伯克利分校博士生Matei Zaharia在2011年美國俄勒岡州波特蘭Usenix年度技術會議論文The Datacenter Needs an Operating Systemhttps://www.usenix.org/events/hotcloud11/tech/final_files/Zaharia.pdf中提出的。事實上,Zaharia也是著名大數據計算框架Spark的主要開發者。

在這篇論文里,Zaharia認為數據中心托管了許多種類的應用程序,包括存儲系統、網絡應用、長期運行的服務和批量分析。并且隨著計算機集群用戶數量的增長,這些應用程序的數量在未來還將持續增加。許多企業都設計了自行管理系統來統一處理數據中心中運行的任務。比如,Google利用Pregel(一種用于圖片應用的框架)、Dremel(一種用于交互式數據挖掘的低延遲系統)和Percolator(一種增量索引系統)來增強其MapReduce計算能力;Facebook用Hadoop數據庫處理數百個用戶的幾乎同時互動的SQL查詢。但是由于許多類似這些任務的管理系統都是由特定框架和體系管理的,它們之間通常無法共享計算和存儲資源。因此,有必要推出一個更強大的、能夠處理整個數據中心事務的通用操作系統,使得數據中心的操作人員能夠在多個應用程序間有效地反復利用資源。

然而設計一個能夠處理數據中心全部資源的操作系統要比制作一個用于個人設備運行應用服務的操作系統困難得多。數據中心操作系統要能夠把所有這些資源集中在一個管理平臺,并且提供資源共享、數據共享、編程抽象和調試,為整個數據中心提供分布式調度與協調功能,統一協調各類資源,實現數據中心級的彈性伸縮能力。其實從現代云計算的觀點來看,數據中心操作系統就相當于一套完善的IaaS+PaaS且支持多租戶的體系,但現實中存在各式各樣的服務和應用,傳統的PaaS平臺對服務設計的侵入性較強,無法直接適配復雜的業務場景,需要對服務進行改造。因此當前比較成功的數據中心操作系統,包括Google的Borg和Zaharia設計出的Mesos,實際上都采用了IaaS+CaaS的方式來實現。Borg和Mesos等早期數據中心操作系統的設計都遠遠早于Docker,它們各自實現了類似的容器化功能。對于所有的數據中心,無論是公共、私人還是混合模式,未來都應該趨向于采用這些統一化部署和管理的超大規模架構。這些通過智能軟件、容器技術和微服務整合在一起的新型數據中心,將給企業計算帶來全新的云經濟和云規模,帶來全新且前所未有的業務模式。

值得一提的是,“DC/OS”(Data Center Operation System)這個詞已經被Mesosphere公司注冊,成為了旗下一款數據中心操作系統產品的名稱。然而從本質的定義來看,本書將介紹的SwarmKit、Kubernetes、Mesos和Rancher等集群方案,都實現了對容器集群的規模、生命周期和資源調度等維度的管理,因此也在不同程度上實現了數據中心操作系統的這個理念。

主站蜘蛛池模板: 子洲县| 德阳市| 汶上县| 普定县| 西乌珠穆沁旗| 元朗区| 杨浦区| 封丘县| 尉犁县| 古浪县| 灵寿县| 克山县| 怀宁县| 诏安县| 汶上县| 应城市| 资兴市| 临颍县| 无锡市| 呼伦贝尔市| 宜宾市| 敦煌市| 德化县| 多伦县| 虹口区| 黔西| 密云县| 谢通门县| 文昌市| 临清市| 永和县| 房产| 卓尼县| 双峰县| 文成县| 江西省| 习水县| 新乡市| 饶平县| 达拉特旗| 新泰市|