隨著云計算的普及,越來越多的企業(yè)開始在云端部署自己的應用,如何對這些應用進行管理、調度、優(yōu)化、自主運維等,以實現(xiàn)應用的快速部署、快速迭代和實時監(jiān)控,已然成為云計算服務的一大難題。

圖片7.png

網(wǎng)易蜂巢從2012年正式上線私有云平臺,到2014年,95%的互聯(lián)網(wǎng)應用全部放到云平臺上,到2015年網(wǎng)易蜂巢容器云平臺正式對外開放,再到2016年上線DevOps和微服務。

作為網(wǎng)易云的基礎設施云服務,網(wǎng)易蜂巢一直走在行業(yè)前列,并形成了新一代云計算的雛形,實現(xiàn)了從虛擬機到容器,從傳統(tǒng)應用到微服務化,從傳統(tǒng)研發(fā)流程到DevOps,從私有云走向公有云的四個方面的轉變。

網(wǎng)易蜂巢已經從最初千級別節(jié)點數(shù)成長為萬級別節(jié)點數(shù)集群,并支撐了擁有億級用戶的網(wǎng)易考拉海購和網(wǎng)易云音樂。在雙十一等訪問峰值來臨的時候,網(wǎng)易蜂巢系統(tǒng)的彈性伸縮能力以及應用層的微服務化能力表現(xiàn)卓越。

據(jù)劉超介紹,網(wǎng)易蜂巢的技術優(yōu)化可以追溯到IaaS層、PaaS層和CaaS層。

網(wǎng)易蜂巢基于OpenStack自主研發(fā)了IaaS服務,在計算虛擬化方面,通過裁剪KVM鏡像,優(yōu)化虛擬機啟動流程等改進,實現(xiàn)了虛擬機的秒級別啟動。在網(wǎng)絡虛擬化方面,通過SDN和Openvswitch技術,實現(xiàn)了虛擬機之間的高性能互訪。在存儲虛擬化方面,通過優(yōu)化Ceph存儲,實現(xiàn)高性能云盤。

在PaaS層,網(wǎng)易可以說更加的功力深厚,在數(shù)據(jù)庫,緩存,對象存儲方面都有非常多的優(yōu)化。比如說數(shù)據(jù)庫RDS服務,網(wǎng)易是兼容開源的mysql數(shù)據(jù)庫的所有接口的,然而開源的mysql會出現(xiàn)性能不高,主備切換數(shù)據(jù)丟失等現(xiàn)象,這對于很多關鍵應用來講,是不能忍受的。網(wǎng)易是業(yè)內為數(shù)不多的具備mysql內核開發(fā)能力的公司之一,通過優(yōu)化主備同步技術,可以實現(xiàn)主備切換數(shù)據(jù)零丟失,為了優(yōu)化mysql性能,網(wǎng)易還優(yōu)化了mysql并行復制技術和group commit技術,實現(xiàn)了可靠性和性能的兼顧平衡。當然數(shù)據(jù)庫的性能除了數(shù)據(jù)庫本身,SQL語句的撰寫也是十分重要的,直接影響著SQL查詢的性能和并發(fā)量,這雖然是應用層的事情,但是蜂巢根據(jù)自己多年的數(shù)據(jù)庫運維經驗,開發(fā)了SQL優(yōu)化工具,用戶只要將SQL語句輸入這個優(yōu)化工具,就可以發(fā)現(xiàn)SQL查詢的瓶頸以及修改建議,例如索引的設置問題,主鍵的設置問題等等。

不過劉超表示,傳統(tǒng)的私有云只能實現(xiàn)資源層面的彈性,應用層面的彈性往往通過腳本實現(xiàn),而且很多互聯(lián)網(wǎng)應用由于要求上線時間快,多采取單體架構進行部署,從而喪失了三個方面的靈活性。

圖片8.png

l 時間靈活性:應用快速迭代,縮短客戶需求到產品上線的時間

l 空間靈活性:應用彈性伸縮,應對業(yè)務量突然增長后較短時間恢復

l 管理靈活性:易部署,易遷移,服務發(fā)現(xiàn),依賴管理,自動修復,負載均衡

網(wǎng)易蜂巢作為容器云平臺,相比于虛擬機實現(xiàn)了以資源為核心到以應用為核心的轉變,用戶可以通過對于應用的改造,實現(xiàn)微服務化和DevOps.

第一板斧:去狀態(tài)、可擴展。

圖片9.png

原來的很多應用程序都是有狀態(tài)的,所謂有狀態(tài),就是將很多數(shù)據(jù)保存在內存中和本地文件系統(tǒng),這樣的話,一旦容器宕機后被分發(fā)到其他機器上的時候,所有的狀態(tài)就都不見了。通過將內存中的數(shù)據(jù)放在外部的緩存系統(tǒng),將用戶數(shù)據(jù)放在數(shù)據(jù)庫中,將本地文件放在分布式存儲系統(tǒng)中,通過狀態(tài)的外置化,將應用程序編程僅僅包含業(yè)務邏輯的實體,就可以進行橫向的彈性擴展,支撐大規(guī)模訪問了。對于外部的數(shù)據(jù),緩存系統(tǒng),數(shù)據(jù)庫系統(tǒng),和存儲系統(tǒng),都有自身的高可用的機制,不需要應用層過多關心這方面的事情。

第二板斧:容器化、可編排。

有的人將容器化和微服務化劃等號,其實不是的,不僅僅微服務可以容器化,一旦去狀態(tài)了,就可以容器化。一旦容器化,就可以使用容器編排系統(tǒng)kubernetes進行容器的管理了。

圖片10.png

例如一個應用包含四個服務A,B,C,D,她們相互引用,相互依賴。如果使用了kubernetes,則服務之間的服務發(fā)現(xiàn)就可以通過服務名進行了,例如A服務調用B服務,不需要知道B服務的IP地址,只需要在配置文件里面寫入B服務服務名就可以了。如果中間的節(jié)點宕機了,kubernetes會自動將上面的服務在另外的機器上啟動起來,容器啟動之后,容器的IP地址就變了,但是不用擔心,kubernetes會自動將服務名B和新的IP地址映射好,A服務并無感知。這個過程叫做自修復和自發(fā)現(xiàn)。如果服務B遭遇了性能瓶頸,三個B服務才能支撐一個A服務,也不需要特殊配置,只需要將服務B的數(shù)量設置為3,A還是只需要訪問服務B,kubernetes會自動選擇其中一個進行訪問,這個過程稱為彈性擴展和負載均衡。

第三板斧:DevOps、可迭代。

圖片11.png

在開發(fā)和運維的過程中,往往涉及開發(fā)環(huán)境,測試環(huán)境,聯(lián)調環(huán)境,生產環(huán)境。如果不同的環(huán)境都需要腳本進行維護,成本太大,不能滿足敏捷開發(fā)的要求。容器鏡像的不可改變性可以很好的解決這一點。

在容器的鏡像中,業(yè)務代碼,程序庫,系統(tǒng)依賴,文件目錄結構等,都已經打包在里面了,無論從哪里啟動起來,都是統(tǒng)一的環(huán)境,只需要通過環(huán)境變量和配置文件的形式將不同環(huán)境的差異注入即可。而且更加優(yōu)雅的是,結合上面說的編排系統(tǒng),服務之間的依賴可以通過服務名寫入配置文件,這樣不同的環(huán)境不需要修改配置文件就能夠找到對應系統(tǒng)的服務。結合代碼管理系統(tǒng),通過web hook的方式,用戶提交代碼,馬上觸發(fā)web hook,調用到網(wǎng)易蜂巢的API,則網(wǎng)易蜂巢會在一分鐘內構建新的鏡像并更新應用,接下來可以進行自動化測試,如果測試通過,則運維人員就可以一鍵更新線上生產環(huán)境了。

對于尚不能一步實現(xiàn)微服務化和DevOps的用戶,網(wǎng)易蜂巢還提供了有狀態(tài)容器的方式,通過掛在遠程云盤保存狀態(tài)數(shù)據(jù)的方式,使得用戶方便從虛擬機模式向容器模式進行過度。

在CaaS層面,為了支撐大規(guī)模云應用,除了應用層面的改造,容器的網(wǎng)絡和存儲性能也是非常重要的。在網(wǎng)絡方面,很多容器的使用者使用默認的port mapping的方式進行網(wǎng)絡互聯(lián),這樣對于應用的浸入性太大。也有使用開源的如Docker Network, Flannel, Calico, Weave, OVS等方案,存在二次虛擬化的問題,虛擬機的網(wǎng)絡互聯(lián)是一次虛擬化,為了實現(xiàn)容器跨虛擬機互聯(lián),則需要進行二次虛擬化,大大降低性能。網(wǎng)易蜂巢基于SDN,將IaaS層的網(wǎng)絡互聯(lián)能力直接應用與容器,通過一次虛擬化就能夠實現(xiàn)容器的扁平化二層互聯(lián)。在存儲方面,如果使用容器的統(tǒng)一存儲策略,例如基于云盤搭建Ceph集群,也存在二次虛擬化的問題,云盤本身是一次虛擬化,將云盤作為普通的存儲,在其上搭建Ceph集群,則為二次虛擬化,大大降低性能,網(wǎng)易蜂巢基于Ceph,將云盤直接掛在到容器里面,實現(xiàn)一次虛擬化。

服務微服務化之后,容器數(shù)量會比較多,如果查找問題需要對于每個容器的日志進行查看,會比較難定位問題,網(wǎng)易蜂巢平臺提供統(tǒng)一的日志收集,分析,搜索服務,用戶可以通過關鍵字進行搜索,將某個訂單號在各個應用中的日志全部查詢出來,則問題就一目了然了。

除了問題的定位,性能瓶頸的定位也是一個挑戰(zhàn),網(wǎng)易蜂巢引入服務端 APM 解決細粒度性能分析,通過不同應用之間的調用鏈,迅速發(fā)掘性能瓶頸。

當容器規(guī)模擴大到一定程度,kubernetes的調度就成為了瓶頸,開源的kubernetes是通過串行隊列Pod queue進行任務調度的,當任務規(guī)模比較大,但隊列不能滿足要求,網(wǎng)易蜂巢優(yōu)化為多個優(yōu)先級隊列,極大提高了任務的調度速度和容器的修復速度。另外由于kubernetes的數(shù)據(jù)是保存在etcd里面,當容器規(guī)模擴大的時候,單個etcd集群已經不能滿足讀寫性能,通過根據(jù)Pod/Node/Replication Controller等資源到拆分不同etcd集群,解決了集群擴展性的問題。

圖片12.png

同時劉超表示,在這個“唯快不破”的互聯(lián)網(wǎng)時代,網(wǎng)易蜂巢將助力企業(yè)實現(xiàn)微服務化。

圖片13.png

在如圖中的架構里面,用戶僅僅需要關心自己的應用的開發(fā)流程,實現(xiàn)微服務和DevOps,至于底層的IaaS層的計算,網(wǎng)絡,存儲,中間的PaaS的數(shù)據(jù)庫,緩存,對象存儲,上層的CaaS層的持續(xù)集成、鏡像倉庫、服務發(fā)現(xiàn)、服務編排、日志服務、APM等,以及對外的負載均衡和CDN服務,可以全部交給網(wǎng)易蜂巢平臺來實現(xiàn)。

更重要的是,網(wǎng)易蜂巢遵循開放、標準、穩(wěn)定的原則,所有的層面全部使用開源的軟件和開放的接口,使得服務本身易遷移、無綁定。

圖片14.png

作為一家擁有19年經驗的互聯(lián)網(wǎng)公司,網(wǎng)易在向客戶輸出穩(wěn)定云服務的同時,還將輸出完善的知識體系,幫助企業(yè)更好的運用好云服務,并創(chuàng)造更大的價值。

分享到

songjy

相關推薦