私有云平臺建設(shè)
這是私有云平臺資源彈性架構(gòu)圖。網(wǎng)易數(shù)據(jù)中心開始建立起來時就是朝著五星級數(shù)據(jù)中心建立的,所以硬件層非常好,實現(xiàn)了全萬兆互聯(lián)、全SSD存儲。如果在蜂巢平臺上訂購一個容器,存儲都是SSD的,性能非常棒。計算虛擬化、網(wǎng)絡(luò)虛擬化、存儲虛擬化,基本的OpenStack都會做這三層。把KVM作為計算存儲化、OpenVswitch作為網(wǎng)絡(luò)存儲化、存儲虛擬化方面做了很多改進?;贠penStack之上是PaaS平臺,PaaS平臺有數(shù)據(jù)庫、對象存儲、負載均衡、緩存服務(wù)、CDN、安全服務(wù)。這些服務(wù)發(fā)展的整個歷程比云平臺還要早,因為像數(shù)據(jù)庫、對象存儲、緩存服務(wù)是在網(wǎng)易研究院一開始成立時,這方面的技術(shù)就已經(jīng)開始積累了。
再往上是應(yīng)用層。這是應(yīng)用層的架構(gòu)雛形,是一個電商網(wǎng)站。一般一開始應(yīng)用層構(gòu)建時都是單機模式的,這不能說架構(gòu)師一開始設(shè)計時沒有設(shè)計好。其實現(xiàn)在互聯(lián)網(wǎng)的應(yīng)用,我們遇到好多的客戶最想要的點就是上線速度快?,F(xiàn)在有很多應(yīng)用就是半年過一茬,如果趕不上這個風口,可能就飛不起來,就會被競爭對手落下,這樣架構(gòu)再好也沒有用,所以一般不會一開始就把應(yīng)用層拆得七零八落的。
虛擬機層面部署方式一般會采取通過腳本或者自動化配置的工具來進行應(yīng)用的部署,這里經(jīng)常用的是Puppet Chef Ansible。虛擬機能實現(xiàn)的資源層面比較彈性,比如說“雙十一”原來有5個節(jié)點,卡一下變成10個節(jié)點,很快可以部署出來,但是另外5個節(jié)點里面是空的,怎么辦呢?并不能很好實現(xiàn)應(yīng)用彈性,所以就需要自動化的工具,除了調(diào)IaaS平臺把虛擬機創(chuàng)建出來以外,還要進行部署。應(yīng)用部署上去之后,如果變化比較慢是沒有任何問題的,腳本是固定的只需要寫一次就可以了,但是現(xiàn)在應(yīng)用變化非???,需要不斷調(diào)整腳本,運維成本還是相對比較大的。
隨著業(yè)務(wù)發(fā)展,應(yīng)用層的架構(gòu)就會越來越復雜。比如說用戶的管理,要不要給用戶做一些活動,用戶瀏覽時要不要提供搜索推薦,要不要做積分,商戶要不要管理自己的供應(yīng)商,和客戶有矛盾的話要不要有仲裁,支付需不需要對賬,商品配送要不要物流管理,包括對接銀聯(lián)、支付寶支付等等,所有的功能都加進來了。如果還是加到同樣一個應(yīng)用里的話,整個架構(gòu)就太復雜了。這個時候架構(gòu)就會面臨著三個方面的問題:
- 時間的靈活性。一個新的活動要上線的時候,能否盡快實現(xiàn)它的快速迭代。
- 空間的靈活性。能否實現(xiàn)非??斓膹椥陨炜s。
- 管理的靈活性。比如說有一個服務(wù)掛了,怎么樣把它盡快接起來,和原來應(yīng)用進行一定程度的關(guān)聯(lián)。
從虛擬機到容器
接下來是一個從虛擬機過渡到容器的時代。這個時代主要有以下幾個方面的不同:
- 原來以資源為核心,現(xiàn)在以應(yīng)用為核心。運維人員不能再認為不關(guān)心應(yīng)用,只要虛擬機不掛就沒有問題。這個時候開發(fā)人員和運維人員已經(jīng)不再是兩個獨立的實體,現(xiàn)在流行的概念就是DevOps。
- 有狀態(tài)容器。為什么要支持有狀態(tài)容器?從虛擬機到容器的演化過程,容器其實比較適用于部署一些無狀態(tài)的東西,最好是掛了以后再起,只有商務(wù)邏輯并沒有數(shù)據(jù)。雖然在哪個機器上重啟都是可以的,但是我們發(fā)現(xiàn)中間還是有很大溝壑的,用習慣虛擬機的用戶不適應(yīng)一旦切換到容器,應(yīng)用就馬上進行無狀態(tài),所以我們采取了一定的技術(shù),下面也會分享如何實現(xiàn)有狀態(tài)的容器。
- 容器跨主機互聯(lián)和容器使用云盤存儲。它對于計算的隔離比較好,但是對于網(wǎng)絡(luò)互聯(lián)、共享云盤,雖然業(yè)界有開源的方案,但是這種方案還是有問題的,一個是性能問題,一個是二次虛擬化的問題,一般采取公有云創(chuàng)建虛擬機的時候,虛擬機之間的互聯(lián)已經(jīng)有了一個層次的虛擬化,這個時候容器之間的跨主機互聯(lián)還要再做一次虛擬化,這樣一層一層套性能就大幅度降低。云盤存儲也是,如果要在IaaS層之外再做一層集群,還是會有二次虛擬化,本來下面就是一個虛擬的存儲,創(chuàng)建出云盤,云盤再打出集群,這種二次虛擬化存儲基本不可以使用了。