鐘成:華為CCE容器引擎實踐
2016年5月28日,華為開發(fā)者匯南京站在安德門黑馬路演中心圓滿落幕。本次沙龍議題增加到六個,時間安排上也從之前的半天擴展到全天。講師有來自華為、蘇寧、途牛的多位好手,議題涵蓋”通訊即服務(wù)“、”內(nèi)源開發(fā)“、”探索性測試“、”容器技術(shù)”、“電商平臺遷移”、“訂單架構(gòu)優(yōu)化”。
來自華為CCE容器云資深工程師鐘成給大家?guī)淼氖恰度A為CCE容器引擎實踐》。隨著業(yè)界正在從IaaS向PaaS不斷發(fā)展。Docker這類容器成為當(dāng)下炙手可熱的云技術(shù)。鐘成的演講基本穿越了整個容器技術(shù)的生命周期,臺下很多同樣在使用容器技術(shù)的參會者抓緊機會和他進行了溝通,比如Docker的安全、Docker網(wǎng)絡(luò)的控制和性能優(yōu)化等等。
現(xiàn)場實錄:
今天也是非常感謝林宇強,感謝南京的各位開發(fā)者。我前期也來過一次南京,也比較早了,那時候來了一天,稍微逛了逛就回去了,沒有特別深入的跟南京這邊的程序員、開發(fā)成員有接觸。這次也是借著這個機會,很高興來到這邊,覺得這里還是非常有活力的。我平時是在杭州那邊,我本人也是杭州人,我們部門大部分的開發(fā)人員也都是在杭州這邊,我也算是比較剛好,順便。
今天我的議題主要想講一下關(guān)于容器,企業(yè)云CCE容器實踐。這個膠片我做了有一段時間了,今天這個氛圍也很好,剛好人也不是特別多,也不是幾千人,我們可以多交流一下。過程中有什么問題可以隨時打斷我,隨時問我。這也是比較新的領(lǐng)域,目前比較熱門的領(lǐng)域。
首先我想問一下大家,大家在自己的生產(chǎn)實踐過程當(dāng)中,有用過容器或者用過docker的嗎?有五六個人,我大概知道了,所以這個還是屬于比較早期的東西。我們就開始吧。
這是我今天的目錄,容器部署,容器服務(wù),和CCE做的一些事情。
我們部門是屬于華為的中央軟件院的數(shù)據(jù)開發(fā)的,是屬于PaaS開發(fā)的。我先介紹一下背景,整一個云服務(wù)的背景。在現(xiàn)在這個時代Iaas服務(wù),云計算云服務(wù),一提到這三個字大家想到的第一個,國外的就是亞馬遜,就是AWS,國內(nèi)就是阿里云,阿里云現(xiàn)在在國內(nèi)也做的非常好,也有很多的用戶,一百多萬的用戶,也有很多的盈利。云計算這個東西現(xiàn)在在國外已經(jīng)非常流行了,很多大的公司自己不會從中搭建一個數(shù)據(jù)中心,大家選擇使用已經(jīng)成熟的云平臺。比如像(03:02),拍攝《紙牌屋》的這家公司,它原本是做一個錄像帶租賃方,現(xiàn)在開始做網(wǎng)上的視頻服務(wù)。他自己是沒有云數(shù)據(jù)中心的,他把他自己所有的業(yè)務(wù)都運行在亞馬遜的AWS上面。這么做有什么好處呢,他可以省去自己建造這些基礎(chǔ)設(shè)施的時間和精力,因為隨著現(xiàn)代計算機領(lǐng)域的發(fā)展,分工非常的細,你從中搞一個數(shù)據(jù)中心是非常耗時間,非常耗人力,而且也非常得不償失的,你可能要花很多時間做這個事。如果你已經(jīng)有一個成熟的云平臺,一些做具體業(yè)務(wù)的公司,完全可以把我的產(chǎn)品,把我的業(yè)務(wù)直接寫一些應(yīng)用程序,部署到這些云上。這是目前國外的情況。
右邊這個是一幅國外的咨詢公司,叫(04:02),對現(xiàn)代云計算成熟度的一個評估。這里有兩個維度,橫坐標是所謂的產(chǎn)品層,(04:21),這套東西從概念商來說,從思想體系來說是否足夠支撐??v坐標是指我產(chǎn)品的成熟度,比如我做出來的東西是否達到了我預(yù)期的想法。大家可以看到遙遙領(lǐng)先的是AWS和微軟的azure這兩個云。目前云計算一種通用的模式是,所謂的IaaS,這里有一幅圖,大家可以看到,傳統(tǒng)的IT就是全段式的,我這個軟件開發(fā)者要操心很多事情,從底層的存儲、服務(wù)器、虛擬化、操作系統(tǒng)、中間件,一直到這個系統(tǒng)的運行。IaaS對于我的開發(fā)者來說,我只要操心上面的操作系統(tǒng)以上的東西,操作系統(tǒng)以下的東西我全部都交給云服務(wù)商。他給你提供一個虛擬機,你在上面可以裝自己想要的操作系統(tǒng),可以運行你自己的程序。至于里面的硬件怎么樣,它是什么機器,用了什么網(wǎng)絡(luò),用了什么存儲,你不用操心,你只要在網(wǎng)上點擊一下,就可以用了。
下面的兩幅圖是PaaS和SaaS,這是當(dāng)時的一個圖。這個圖是IaaS提出之后大家對這個的劃分,后來發(fā)現(xiàn)這個劃分并不是完全的準確。
隨著技術(shù)的發(fā)展,新出了一些技術(shù),就是docker技術(shù),不知道大家對這個了不了解,簡單的給大家介紹一下。總體來講它是操作系統(tǒng)內(nèi)賦的一些能力,它跟傳統(tǒng)虛擬機的技術(shù)是有區(qū)別的。傳統(tǒng)的虛擬機是在物理機上先布一個操作系統(tǒng),這個操作系統(tǒng)上面我布一個(06:22),上面再布一個(06:24%。也就是說我底層可以是一個非常小的內(nèi)核,可能就是幾十兆的操作系統(tǒng),上層可以布上一個(06:31),這個就是傳統(tǒng)的虛擬機技術(shù)。就是我在操作系統(tǒng)上再做一個操作系統(tǒng)。容器技術(shù)就是打破了原先的方式,它是在底層的機器上,我去啟動一個容器的引擎,上面運行一個進程。這個容器本質(zhì)上來說是我底層操作系統(tǒng)的一個進程,它并不是一個完整的操作系統(tǒng)。但是對于我里面的應(yīng)用來說,我看到的是一個完整的操作系統(tǒng)。這是什么概念呢,我底層可以是一個(07:06),上層應(yīng)用程序,我這個AHDP是一個JAVA的操作程序,我看到的是一個(07:16)的系統(tǒng)。APPA可能是一個得邊的操作系統(tǒng)。我從應(yīng)用程序來看,看到下面這個操作系統(tǒng)跟底層操作系統(tǒng)不一樣。但是從操作系統(tǒng)往上看,又是一個進程。
容器是怎么做到這一點的呢,是融合了幾項以前就已經(jīng)有的技術(shù),它把linux本身內(nèi)核帶有的技術(shù),還有(07:46)的技術(shù),包括最早的(07:49),都是這個原形。我這個進程跑起來的時候,我掛在的文件系統(tǒng)并不是這個宿主機的這個文件系統(tǒng)。我掛一個特殊的文件系統(tǒng),這個文件系統(tǒng)里面看到的文件都是我自己這個操作系統(tǒng)的。這個東西有什么好處呢,從這個圖象能夠看得出來,首先減少了虛擬化的層次。傳統(tǒng)的虛擬化在操作系統(tǒng)上再跑一個操作系統(tǒng),中間可能會要損失掉30%到40%的性能。不管是我的CPU性能也好,還是RO性能也好,都是有損失的。使用了容器以后,可以說我的性能幾乎是沒有損失的。就跟我運行一個普通的程序是一樣的,這是它的第一個優(yōu)勢。這還是運行時期。第二個優(yōu)勢就是啟動速度,我啟動一個虛擬機,大家在云平臺上啟動過的就知道,你創(chuàng)造一個虛擬機,到虛擬機真正出來,可能要耗十幾分鐘。容器是可以達到兩級啟動,可以跟啟動一個進程一樣快。自從docker公司或者容器技術(shù)在這兩年慢慢的推廣開來之后,越來越多的公司開始投資這個技術(shù),加入這個技術(shù),希望把這個技術(shù)提升到自己整個的應(yīng)用系統(tǒng)里面去。這是對容器技術(shù)的描述,大家有興趣的話可以看一下,容器技術(shù)也不僅僅是docker一種,因為它利用的底層能力是一樣的。
回頭我可以再講一講,這個容器技術(shù)有這么多優(yōu)點,它有什么缺點呢,其實容器技術(shù)是有很大缺點或者問題的。其實也很簡單,我上面運行的應(yīng)用程序本身是一個進程,也就是說我上面的APP用的是底層的內(nèi)核。我只可能在linux的操作系統(tǒng)上運行一個linux的容器,我不可能在linux上運行windows的容器,這就是一個非常大的問題。當(dāng)然對于很多場景是沒有問題的,但是這也是一個潛在的問題,你不可能在一個windows的機器上運行l(wèi)inux的容器,你也不可能在linux的系統(tǒng)上運行windows的容器。這是目前的限制之一。還有一個一致,我系統(tǒng)的隔離性有一定的安全隱患,傳統(tǒng)的虛擬機,我上面的應(yīng)用程序跟下面的(10:40)的核心是通行的,你可以認為是一個沙箱,就算我的黑客再厲害,能夠突破的也只有上面操作系統(tǒng)的權(quán)限,不可能突破下面操作系統(tǒng)的權(quán)限。假定A應(yīng)用是A用戶的,B應(yīng)用是B用戶的,我黑客再厲害,只能打破A應(yīng)用的底層,沒有辦法穿透到B應(yīng)用的里面來。在這里就有問題,如果有非常厲害的黑客,能夠黑進我底層的內(nèi)核,就可以攻擊B的應(yīng)用程序。所以這是容器技術(shù)的一個軟肋。不過我們后面有各種方式和方法規(guī)避這個問題,可以對它一系列的改進。
這是容器技術(shù)的一個簡史,一開始容器技術(shù)是一個所謂的資源隔離,傾向于虛擬機。一開始大家看到規(guī)格跟(11:44)開始做的,他們在內(nèi)核上實現(xiàn)一些機制,可以把進程資源隔離開來。我可以限定某一個進程只用10%的CPU,10%的內(nèi)存,另外一個進程使用其他的一些東西。到了階段二,2013年之后,docker公司出現(xiàn),他們提供了一套比較完整的容器的打包發(fā)布,到啟動的過程。大家有興趣的話可以自己去試一下,它的好處是可以解決你的很多運維問題,你的應(yīng)用程序的問題?,F(xiàn)在很多公司或者組織已經(jīng)在docker推了這些鏡像,你以前跑一個(12:31),要先去下一個JAVA,再下一個(12:36),把這個東西配起來,可能要花個半天時間。你現(xiàn)在裝了docker之后,可以在幾分鐘之后,或者直接一條(12:46)命令就可以把別人整個打包好的程序運營起來。這就是容器技術(shù)帶來的生產(chǎn)力上的提升,你可以減少很多軟件的安裝,你的配置,你的運維方面的工作??梢酝ㄟ^一條命令,就把它執(zhí)行起來。
隨著技術(shù)的發(fā)展,越來越多的公司在往這方面投資,他們成立了一個技術(shù)組織,技術(shù)協(xié)議。他們希望這個技術(shù)成為一種業(yè)界通用的標準,而不是成為某家公司所壟斷的技術(shù)。像Windows一樣,雖然它做的很好,你無法在業(yè)界各個公司使用它,這是非??上У?。華為也是這個組織的成員之一。
剛才我講了很多容器的好處,可以輕松的管理應(yīng)用程序,可以輕松的啟動這個東西。是否有了容器之后,就可以解決我們很多運維的問題,開發(fā)的問題,測試的問題。對于現(xiàn)在的情況而言還是相差很多的,我們現(xiàn)在容器的技術(shù)專注于單機的容器的啟動和停止壽命周期管理,你可以運行一些簡單的應(yīng)用,但是對于一個大規(guī)模的集群,比如說我一個公司在計算里面有20臺機器,或者說有20個虛擬機,或者你在IaaS的云上有20個虛擬機,你去管理這些東西要耗費很多的精力。你要一臺一臺的對它進行部署,進行安裝,進行升級。每次有新的應(yīng)用程序發(fā)布的時候,我要挑幾臺進行更新,其實也是非常麻煩的一件事情。對于一個大規(guī)模的機器集群來說,全生命周期的操作,可以說整個業(yè)界還沒有一個非常好的解決方案,只能說有很多正在做的解決方案。這就是我們部門正在做的一個事情,希望能夠解決這個問題。
這是對我們部門工作的介紹,這些講的具體的事情,我們部門想做的一件事情是什么呢,降低大家大規(guī)模使用容器集群的成本。你可以在三四行的命令之上,就可以發(fā)布一個復(fù)雜的系統(tǒng),我可以把一個大規(guī)模的網(wǎng)站系統(tǒng),或者說一個業(yè)務(wù)系統(tǒng),中間有三四個服務(wù)器,我可以通過簡單的一些操作,對它進行一個管理,降低我在這方面運維的成本,包括監(jiān)控,包括運維,包括開發(fā)。最好我代碼開發(fā)完了之后,希望直接進行測試,這個也是容器的一個優(yōu)勢。在傳統(tǒng)的計算機行業(yè)里面有一個非常大的痛點,有一個場景。開發(fā)人員開發(fā)出來一個程序,好好的,應(yīng)用起來沒有問題。但是用戶一用發(fā)現(xiàn)出現(xiàn)問題了,開發(fā)人員、應(yīng)用成員和用戶人員吵起來了。開發(fā)人員說在我的環(huán)境里面一點問題都沒有,前面啟動起來就可以了。但是用戶不這么想,用戶說在我的環(huán)境就是不行。這就是因為他們兩者使用的底層操作系統(tǒng),包括里面的一些中間件,包括里面的一些數(shù)據(jù)庫,配置上有一些微妙的差別。你通過容器之后,在發(fā)布的時候并不僅僅是發(fā)布一個程序,是把所有的二進制程序,包括依賴的這些包。像(16:56),把這些東西統(tǒng)一的打成一個鏡像,統(tǒng)一的發(fā)布運行。這樣可以達到一個什么效果呢?我開發(fā)人員啟動的這么一個東西,跟我最后在線上、生產(chǎn)上直接運行的東西是完全一樣的,從運行的角度來講是沒有任何區(qū)別的。這樣就可以解決困擾我們很久的開發(fā)跟測試,跟生產(chǎn)軟件不一致的情況。這也是我們要做的工作之一。
如果像docker公司,或者是容器技術(shù),他們已經(jīng)完成了一個集裝箱的工作,他們已經(jīng)把容器的標準給定下來了。我們現(xiàn)在已經(jīng)有一個容器了,后面我們要做的就是通過這個集裝箱建設(shè)一套完整的碼頭。這里包括了很多基礎(chǔ)設(shè)施,包括碼頭上的貨艙,包括碼頭上的起重機,可以用來調(diào)這個集裝箱,包括各種各樣后面的卡車運輸設(shè)備,這些其實是一個完整的生態(tài)系統(tǒng),我們是希望建立這套物流體系。建完這套體系之后,作為用戶來講,他想運貨物很簡單,只要跟這個物流公司說一下,我要發(fā)一個集裝箱的貨物到美國去,我就不需要自己去租船了,不需要自己搬貨卸貨,所有的過程都是標準的,這是我們部門想做的事情,這是一個比喻。
為了完成我前面講的類似于像碼頭或者是像團隊的工作,我們要做什么樣的工作呢。如果想做到這一點,我們在大規(guī)模程序上要做什么呢。你想知道未來,首先得回顧歷史。我一直認為軟件開發(fā)是一個管理復(fù)雜性的工作,作為開發(fā)人員也好,作為測試也好,其實你的本質(zhì)是要管理復(fù)雜性。什么是管理復(fù)雜度的最好的方式呢,就是進行合理的抽象。操作系統(tǒng)其實就是一個非常標準、非常好的例子。這兩幅圖是我從國外的一本書《深入理解計算機系統(tǒng)》里面截下來的,操作系統(tǒng)給我們的開發(fā)者提供一個比較好的抽象,因為我們的硬件,我們的計算機底層是有處理器,有內(nèi)存,有IO設(shè)備,包括硬盤組成的。但是作為我們應(yīng)用程序開發(fā)者不需要關(guān)心這個東西,我只要通過操作系統(tǒng)就可以抹平這個差距。操作系統(tǒng)提供什么抽象呢,它提供一個文件的抽象,通過文件我們操作硬盤上的這些存儲,通過這個(20:14)可以操作我的內(nèi)存,通過進程可以操作這三個所有的資源。你一旦通過操作系統(tǒng)提供這些API之后,比如說你在windows上面開發(fā)了一個程序,或者java的程序,或者C程序,你完全可以到linux上面去。或者你原先在IBM上面開發(fā)的一個軟件,完全可以在惠普的機器上使用。因為操作系統(tǒng)已經(jīng)幫你抹平了底層的差距,你不用關(guān)心這些硬件驅(qū)動,也不用關(guān)心里面具體用了哪個牌子的CPU,用了哪個牌子的內(nèi)存,用了那個牌子的硬盤,這些你都不用關(guān)心。
如果我們想把這個步驟往外推的話,想推到集群上面去,我們的愿景是想把整一個數(shù)據(jù)中心的集群也抽象成一個任何一個開發(fā)者都能夠輕易使用的設(shè)施,這是我們部門想做的一個事情,就是隔離的進行抽象。我們部門目前使用的這個項目叫做Kubernetes,它是希臘語里面的舵,大海航行靠舵手。這個項目是一個谷歌的項目,是完全開源的,大家可以在gethop上找到它,入門看起來稍微有點復(fù)雜,但是后面你會發(fā)現(xiàn)它提供的這些抽象,對于管理大規(guī)模的集群是非常有效的。左邊這幅圖是它的技術(shù)架構(gòu),我首先有一個中心節(jié)點,用來管理下面的所有機器。在這些機器上面我會運行一個一個的容器,這些容器都是我可以通過Replication Controdler這個復(fù)制控制器分發(fā)下去,我創(chuàng)建的時候可以指定在我下面的數(shù)據(jù)中心上面,這里有四臺機器,我可以指定,比如說這兩個紅的是一組,我要啟動這兩個容器實例。啟動這個實例之后,在這個數(shù)據(jù)中心一直跑著這樣的實例。假定我這臺機器掛掉了,因為我的配置已經(jīng)配好了,就會在另外一個機器上再啟動一個容器實例。這樣就保證了我在的數(shù)據(jù)中心當(dāng)中隨時都有兩個應(yīng)用程序,兩個容器的實例在工作。你就不用費心管理上面一些硬件的問題,如果這個硬件壞了,我可以后面慢慢的通過別的方式把它修復(fù)起來,但是在這個過程當(dāng)中我的業(yè)務(wù)是沒有停頓的,比如它帶有一種自我修復(fù)的能力。
如果在這個數(shù)據(jù)中心中可以運行的這些容器實例之后,后面要解決的問題是什么呢,當(dāng)你把這個程序下發(fā)到這個數(shù)據(jù)中心的時候,就帶來一個問題,我怎么知道我的應(yīng)用程序跑在哪臺機器上的呢。等到我做了這個系統(tǒng)之后,我突然發(fā)現(xiàn)對這個東西失去控制力了,根本不知道跑在什么地方。我下面怎么運維它呢,怎么向外面提供服務(wù)呢。為了彌補這個問題,Kubernetes采用了另外一種抽象,就是server這種抽象,它是一種服務(wù)發(fā)現(xiàn)的機制。它自動的會在內(nèi)部維護這些容器實例的位置,當(dāng)你外部有一個業(yè)務(wù)流量進來的時候,這個紅色的業(yè)務(wù)流量,假定這是一個網(wǎng)站,當(dāng)我有用戶請求的時候,進來我會均勻的把這兩個流量負載均衡到這兩個容器當(dāng)中去。如果這個容器死了,在后面這臺機器啟動之后,這里會自動的把流量轉(zhuǎn)到這里去,這就是所謂的server的概念。只要我這個數(shù)據(jù)中心里面這兩個實例一直存在,我這個servers路由體系可以自動的把這個業(yè)務(wù)流量轉(zhuǎn)到這個里面去,可以持續(xù)不斷的對外提供服務(wù),這就是Kubernetes帶來的主要的抽象。它的思路就是我底層的硬件是不可靠的,我是通過軟件的可靠性,來解決這個硬件的可靠性。我沒有說把底層的機器做成一個非常強大的機器,就像IBM的(25:02),死了一個我還有備份,不是這樣的。我隨時都有這個機器,隨時可以死,沒有關(guān)系,但是我的軟件可以跟上來。
提問:問一個問題,那兩個pood之間是兩個對等的,怎么保證數(shù)據(jù)同步呢?
嘉賓:這里另外少畫了一幅,我外面會有一個云存儲,這個我沒畫。你外在掛載了這個存儲實例之后,這兩個東西操作的數(shù)據(jù)其實就是同一個數(shù)據(jù),你這兩個pood本身是無狀態(tài)的,有狀態(tài)的是放在分布式存儲上面了。我不知道這樣講是不是比較清楚。
這是Kubernetes做的一些事情,好處前面我也講了,可以做一些細節(jié)。這是細節(jié)的一個協(xié)會,這么好的東西我們也可能一家公司專有,華為也參加進去了。
這是我們?nèi)A為內(nèi)部正在做的一個公有云的東西,叫CCE,就是提供容器集群服務(wù)的,目前還比較粗糙,我們大概6月底會發(fā)布一個正式版,進行公測,到時候大家可以看一下,這也算做一個廣告。這是我們做的寫工作,工具調(diào)優(yōu),圖形化編排,我們都跳過。這是我們對開源社區(qū)的貢獻,華為目前在開源社區(qū),在國內(nèi)是排名第一的,對這個社區(qū)也提交了一些關(guān)鍵性的貢獻,包括容器的調(diào)度,華為也是比較積極的參與開源。
這些業(yè)務(wù)上的東西先跳過吧。這是谷歌的一個架構(gòu),我覺得后面我們服務(wù)端的這些軟件慢慢的就會往這個方向遷移,底層的基礎(chǔ)設(shè)施就會慢慢的往這端走。底層我跑的是容器集群,剛才你看到的,包括像這些分布式存儲,本身也是一個集群,內(nèi)部保證它的數(shù)據(jù)的一致性。最上面的才是業(yè)務(wù),和現(xiàn)在這種單臺機器割裂的方式有本身的區(qū)別。這些我們就先跳過吧。
這是二維碼,大家有興趣可以掃一下,時間不多,進入到交流環(huán)節(jié)。
提問:我想問一下docker這塊,包括后面集群這塊,有一些網(wǎng)絡(luò)上的問題,因為docker對于網(wǎng)絡(luò)這塊隔離群是有一定欠缺的。
嘉賓:對。
提問:我們用了什么樣的處理方式?
嘉賓:(28:37)可以說是docker本身的一個實現(xiàn)。網(wǎng)絡(luò)這塊也是很多人會問的,兄弟肯定是個專家,至少對這個方面有了解。目前我們在公有云常用的是(28:52),我在原先的S網(wǎng)絡(luò)上再搭一層網(wǎng)絡(luò)。它的好處就是它有一層網(wǎng)絡(luò),你可以控制它,壞處就是它的性能會有一些損耗。我們后面的考慮有幾種方案,一種方案是我們直接使用底層S提供的網(wǎng)絡(luò),就是我們用(29:13),采用(29:15)進行子網(wǎng)劃分,用(29:19)因為子網(wǎng)通訊,這是我們后面的一種方式。
提問:現(xiàn)在你們docker這塊是部署在公有云上面的,是嗎?
嘉賓:對。
提問:而你們是用公有云的網(wǎng)絡(luò)去解決這個問題。
嘉賓:目前還不是,但是后面會往這個方向延伸,我們沒有必要自己再搭建一套網(wǎng)絡(luò)的基礎(chǔ)設(shè)施,像PC這種東西,做起來很麻煩。我們可能會考慮跟(29:50)進行結(jié)合,就是附用它里面的主機。如果是私有云的話,后面我們可能會自己啟一個項目,直接把它拿過來用。可能剝掉底層S層,直接運行在物理機上面,但是上面的那層網(wǎng)絡(luò)還是用S層的那套網(wǎng)絡(luò),(30:10)這個東西來做,大致方向是這樣的。
提問:謝謝。
提問:你剛才講了容器,我想問一下這個容器如果推廣應(yīng)用起來,和我們目前有的雙機,兩臺機子同時工作,一臺機子壞了,另一個機子工作。這個容器跟雙機有什么區(qū)別,各有哪些優(yōu)點和缺點。這是第一個問題。第二個我們現(xiàn)在說在異地建(30:52)機房,同樣的一套系統(tǒng)。包括現(xiàn)在講云技術(shù),公有云、私有云,目前這種情況和以往的從兩臺服務(wù)器上,這是一方面,異地(31:09)這種方式,從安全性上,從優(yōu)缺點上能不能幫我們介紹一下。
嘉賓:傳統(tǒng)的雙機是比較依賴于底層硬件的方式,你有兩臺機器,但是如果你兩臺機器恰好在這個機架上面,這個機架全部都掉電的話,你的系統(tǒng)還是會掛掉。而且你前面可能會用F5,或者用負載均衡設(shè)備。容器是一個集群的概念,我在這個系統(tǒng)上面并不是一臺機器上布了一個應(yīng)用,我可能一臺機器上布了五六個應(yīng)用,我又在另外一臺機器上布了五六個應(yīng)用。我這個應(yīng)用可以有很多個副本,可以超過兩個,可以有七八個副本,分布在數(shù)據(jù)中心的七八臺機器上面,而且我可以通過調(diào)度的方式把它調(diào)度到不同的可用域上面。假定這個機架掛掉了,兩個容器掛了,但是另外那個機架上的三個容器還可以繼續(xù)工作,這是它提供的一個優(yōu)勢。
你要說劣勢,這是你在軟件上面,在你的軟件配置,軟件前期的規(guī)劃要花一些時間,你前期要定義好這個策略。不像雙十一,我任何應(yīng)用都可以一模一樣的搞兩份,這個還是有些區(qū)別的。就是開發(fā)人員肯定要感知這個數(shù)據(jù)中心本身的結(jié)構(gòu),這個我認為這是一個區(qū)別。
提問:剛才那個同事已經(jīng)說了,docker我們也用過,主要問題就是網(wǎng)絡(luò)問題。因為講的都是高可用的方面,真正一個互聯(lián)網(wǎng)公司主要是提供一個持續(xù)的、穩(wěn)定的服務(wù)。網(wǎng)絡(luò)上docker在這方面劃分的時候有一些丟包,有網(wǎng)絡(luò)上的問題,我們在虛擬機上也有問題。我想了解一下你們在真正情況,私有云、公有云平臺上,我真正的測試,一個虛擬機上具體要掛多少docker,或者能夠承載多大能力劃分的,怎么控制這個處理的問題。剛才你可能講了一些思維方案,但是我知道你應(yīng)該有一些數(shù)據(jù)的支撐,你是怎么做的,我想了解一下。
嘉賓:目前是這樣的,其實容器有多種網(wǎng)絡(luò)模式,我們在不同場景下用的模式不一樣。容器有多個維度,一個是打包可以運行這個維度,還有是可以隔離網(wǎng)絡(luò)的維度。比如在我們公司內(nèi)部的(34:05)IT這個系統(tǒng)里面,一開始前面這個階段我們直接采用主機的網(wǎng)絡(luò),我們算是規(guī)避了這個問題。
提問:進行一個大規(guī)模的使用。
嘉賓:這是一個場景,他們原先的網(wǎng)絡(luò)和他們的服務(wù)發(fā)現(xiàn)是依賴于物理機的,我們也沒有改它。但是在公有云這邊采用那種(34:35)的方式。根據(jù)我們現(xiàn)在的測試來說,基本它的性能比真實物理機的性能有一定損失的,可能損失在20%到30%左右,是這么一個情況。
提問:物理機真正達到多少個docker。
嘉賓:物理機上的話。
提問:跟它的配置有關(guān)。
嘉賓:對,我們內(nèi)部做過測試,我自己主要做容器集群的性能。如果我們先不考慮應(yīng)用程序本身的資源消耗,我只談這個系統(tǒng)本身能力的話,一個節(jié)點上我可以啟動40個容器是沒有問題的,從管理面這個角度來講,我整個管理的操作都是沒有問題的。數(shù)據(jù)面上,以前他們采用的是一個用戶態(tài)的流量,(35:35),現(xiàn)在我們已經(jīng)改成(35:36)了,在linux用(35:38)機器做網(wǎng)絡(luò)的轉(zhuǎn)發(fā)。這樣就把數(shù)據(jù)面的性能又提升了一些。但是這個問題你要說完全達到物理機非常非常高效的程度,我覺得是有一定困難的,這也是一個折中,我畢竟有部署上的靈活性。你可以通過布多個點,來抵消這個問題,這是我的一個理解。
提問:我之前沒有用過docker,但是我有兩個問題想請教一下。第一個docker我比較關(guān)注雙機熱備的情況,比如我在你這個docker上運行多個實例的話,這兩個實例必須是無狀態(tài)實例,對吧?
嘉賓:目前的方式,在集群里面你希望它無狀態(tài)遷移的話,A機器遷到B機器是有一定的要求,目前的狀態(tài)還沒有完全支持純有狀態(tài)的這種。但我們現(xiàn)在在開發(fā)一個特性,這有一個彌補,一個是我把所有的狀態(tài)數(shù)據(jù)都遷到遠程的硬盤上面去,就是云硬盤,這是一種方式。還有一種方式我去掛載一個硬盤,如果這個系統(tǒng)有問題的話,我會試圖在本地進行重啟。當(dāng)我這個硬盤或者這個東西壞了之后,我可以在本地進行(37:33),在本機上重新啟動,這是另外一種規(guī)避的方式。
提問:如果我們現(xiàn)在在docker發(fā)布自己應(yīng)用的話,最好把所有的這個實例的運行狀態(tài),在內(nèi)存當(dāng)中不要保存更多的信息,全部寫入存儲系統(tǒng),對吧,才能做到版本的切換。
嘉賓:對,如果你對那個切換要求很高的話。不是說你本地不能緩存數(shù)據(jù),這個緩存不是那種,你只是一個本地化。
提問:我就關(guān)注這個,這個Catch的話,一旦你限級的話,Catch里面的數(shù)據(jù)都丟了。
嘉賓:對。
提問:也就是說我們必須對存儲的運行狀態(tài)全部同步的實時的寫入到文件系統(tǒng)當(dāng)中。
嘉賓:或者是遠程的存儲,我有一個Redis的集群,我可以把數(shù)據(jù)寫到Redis集群里面去。這其實是比較適合于大規(guī)模的互聯(lián)網(wǎng)的應(yīng)用,因為它是從谷歌出來的,谷歌從設(shè)計他們分布式系統(tǒng)的時候,本身這個程序就沒有狀態(tài),這是他們的一個設(shè)計。但我們還是希望做這個有狀態(tài)的應(yīng)用,這個待會下去可以討論,我們現(xiàn)在有好幾個方案可以解決這個問題,這也是我們今年做的大的方向。
主持人:謝謝,再次謝謝講師。
(結(jié)束)