摘要:谷歌在萬(wàn)臺(tái)機(jī)器的區(qū)間內(nèi),他們中位數(shù)集群尺寸大約在萬(wàn)臺(tái)機(jī)器,也有一些更大的。谷歌稱,一個(gè)多帶帶的其專有的分配集群的首腦在一個(gè)谷歌對(duì)于集群的術(shù)語(yǔ)內(nèi)能管理成千上萬(wàn)臺(tái)機(jī)器。
【文章簡(jiǎn)介】本文討論了單個(gè)容器所無(wú)法解決的問(wèn)題和局限性,并介紹了容器編排的必要性和復(fù)雜性及常用工具的比較,提到了諸如Kubernetes、Mesos等容器管理工具。
就像之前已被證實(shí)的那樣,要在一個(gè)機(jī)器上創(chuàng)建成千上萬(wàn)個(gè)容器還是相對(duì)容易的。但如何去部署這么多的容器呢?如何管理且追蹤它們?如何管理、如何來(lái)處理故障恢復(fù)?這些事情看似容易,但解決起來(lái)困難重重。讓我們來(lái)解析一下究竟難在何處。
用一個(gè)簡(jiǎn)單的命令,就可以設(shè)立Docker環(huán)境,來(lái)跑一個(gè)Docker直到你將停其掉為止。但如果你需要在兩臺(tái)機(jī)器上跑Docker容器呢?如果50臺(tái)呢?或者如果1萬(wàn)臺(tái)呢?現(xiàn)在,你可能會(huì)問(wèn)為何要這么做。這里有一些好的理由:
為了服務(wù)更多的用戶,你可能會(huì)遇到你Nginx網(wǎng)絡(luò)服務(wù)器縱向擴(kuò)容的瓶頸,也就是說(shuō),在一個(gè)云供應(yīng)商那兒使用一個(gè)更大的實(shí)例類型或者在你的披薩盒子里塞下更多的內(nèi)存。如果你已經(jīng)碰到那堵墻,你就會(huì)需要這么一個(gè)選項(xiàng),可以橫向的擴(kuò)容,典型性的就是采用代理服務(wù)器/冗余控制來(lái)作為服務(wù)穩(wěn)定的切入口。
另一個(gè)方面是容錯(cuò)。如果你可愛(ài)的Redis容器停止存在了,該怎么辦?有可能是底下的機(jī)器死了?你會(huì)想要做故障轉(zhuǎn)移。在容器工作的情景下,這意味著你的編排器得在另一個(gè)健康的機(jī)器中重新啟動(dòng)你需要運(yùn)行的容器。
所以,這都取決于你的目標(biāo)動(dòng)機(jī)——容量、容錯(cuò)或者兩者皆有——如果你有10個(gè)或者1千個(gè)機(jī)器,那挑戰(zhàn)就存在著:如何在這些不同的機(jī)器間有效率且有效果地進(jìn)行容器擴(kuò)容。
然而,在我們跨入這些挑戰(zhàn)之前,讓我們來(lái)理清一些術(shù)語(yǔ)。來(lái)自微軟和谷歌關(guān)于集群的研究表明了如下的工作量的區(qū)分:
有一些長(zhǎng)期在跑的服務(wù),那應(yīng)該一直在跑。那些通常是做交互、對(duì)延遲敏感的例如面向終端用戶的網(wǎng)絡(luò)應(yīng)用這樣的任務(wù);或者是底層的服務(wù),類似于Cassandra、ArangoDB、HDFS或者 Quobyte。
然后,就有一些批量任務(wù),延續(xù)時(shí)間從幾秒到很多小時(shí)。他們通常對(duì)表現(xiàn)波動(dòng)沒(méi)有那么敏感,然而可能存在例如像獨(dú)立管理等完成時(shí)間上的總體服務(wù)水平協(xié)議(SLA)。
除了以上這些工作任務(wù)的類別區(qū)分,還想要支持工作優(yōu)先度劃分:比如對(duì)業(yè)務(wù)尤為關(guān)鍵的、對(duì)頂層收入產(chǎn)生直接影響的生產(chǎn)性工作,以及非生產(chǎn)性工作比如質(zhì)量測(cè)試、測(cè)試和研發(fā)這類。
從一個(gè)到兩個(gè)把術(shù)語(yǔ)理清之后,讓我們直接來(lái)面對(duì)在超過(guò)一臺(tái)服務(wù)器上跑容器需要克服的挑戰(zhàn)。
最為基本的問(wèn)題是:在一臺(tái)服務(wù)器上能裝下多少容器?我們發(fā)現(xiàn),在裸機(jī)上不同負(fù)載的測(cè)試表明每個(gè)機(jī)器容納250個(gè)容器是可能的,這是Docker Daemon的潛在極限。對(duì)一個(gè)平均跑20個(gè)Docker鏡像的簡(jiǎn)單的微服務(wù)構(gòu)架的應(yīng)用而言,產(chǎn)生大約10倍的容量(scale factor)。顯而易見(jiàn),當(dāng)你在一個(gè)機(jī)器上跑超過(guò)一個(gè)應(yīng)用,這將會(huì)非常容易的降低到2倍。另外,資源消耗會(huì)產(chǎn)生一個(gè)自然的極限:比如,假設(shè)一個(gè)多帶帶的容器可能消耗內(nèi)存的為100MB,對(duì)于一個(gè)32GB的內(nèi)存(除去操作系統(tǒng)需要的2GB),那就留給我們3萬(wàn)MB或者相當(dāng)于300個(gè)容器。這比我們之前討論的極限要高的多。因此,即便在中等的負(fù)荷下,擴(kuò)容顯得不可避免。
一旦當(dāng)你跑了兩臺(tái)機(jī)器來(lái)服務(wù)你的容器,你需要關(guān)注以下事項(xiàng):
任何一個(gè)容器的健康情況是怎樣的?它是否還在運(yùn)行、在服務(wù),而且如果是這樣的話,它的核心健康數(shù)據(jù)(監(jiān)控)是怎樣的?
我到哪里能找到特定的那個(gè)容器?也就是說(shuō),在容器的邏輯ID和具體的(路由)IP之間能有一個(gè)匹配:端口匹配必須建立和保持,這也被稱為服務(wù)發(fā)現(xiàn)。
應(yīng)用版本和更新。不管何時(shí)當(dāng)應(yīng)用的一個(gè)新版本被部署時(shí),Docker鏡像需要被傳遞到服務(wù)器上(即鏡像的實(shí)時(shí)性和信任)。
上述羅列的這些功能要求是在編排系統(tǒng)核心任務(wù)之外的,也就是如何來(lái)編排容器(或者,換句話說(shuō),來(lái)決定在哪臺(tái)機(jī)器上來(lái)跑容器)。盡管這個(gè)描述,是一個(gè)真實(shí)情況的簡(jiǎn)略版,但它能幫助我們理解在多臺(tái)機(jī)器上跑容器的基本挑戰(zhàn)。對(duì)于兩臺(tái)機(jī)器來(lái)說(shuō),任何包括Docker Swarm、Kubernetes和Mesos的解決方案都適合;有了后兩個(gè),盡管是可取的,但似乎也大材小用。直到你的應(yīng)用被使用的非常厲害,而且當(dāng)你添加到第三臺(tái)、第二十臺(tái)或者第487臺(tái)機(jī)器為止。那么,然后呢?
從兩個(gè)到多個(gè)今年早些時(shí)候,谷歌發(fā)布了他們主要的生產(chǎn)集群管理的細(xì)節(jié),Borg。
谷歌在10萬(wàn)臺(tái)機(jī)器的區(qū)間內(nèi),他們中位數(shù)集群尺寸大約在1萬(wàn)臺(tái)機(jī)器,也有一些更大的。谷歌稱,一個(gè)多帶帶的BorgMaster(其專有的分配集群的首腦)在一個(gè)cell(谷歌對(duì)于集群的術(shù)語(yǔ))內(nèi)能管理成千上萬(wàn)臺(tái)機(jī)器。一個(gè)忙碌的BorgMaster使用10至14個(gè)CPU內(nèi)核以及高至50GB的內(nèi)存。另外,幾個(gè)cell有任務(wù)到達(dá)率在每分鐘1萬(wàn)個(gè)任務(wù)以上。盡管不是每個(gè)人都是谷歌或者Twitter,在這個(gè)事情上,對(duì)于企業(yè)級(jí)別的需要應(yīng)對(duì)成千上萬(wàn)用戶或者一個(gè)流行的移動(dòng)端應(yīng)用即需要面對(duì)百萬(wàn)數(shù)量級(jí)潛在的多進(jìn)程用戶而言的復(fù)雜應(yīng)用,還是非常容易會(huì)到達(dá)成百上千個(gè)機(jī)器的范疇。
在一個(gè)分布式系統(tǒng)內(nèi),去追蹤成千上萬(wàn)件事情(進(jìn)程、連接等)以及它們的狀態(tài)是一件很難的事情。真相的來(lái)源是什么呢?你是從中心的位置每隔一段時(shí)間去檢查一下嗎?你去跑代理來(lái)推送狀態(tài)到上游嗎?這些都是一些已經(jīng)被討論了一陣的相關(guān)問(wèn)題,比如從1990年代晚期以C10K問(wèn)題的形式。
另外,跑成千上萬(wàn)個(gè)容器(我們已經(jīng)從上面描述知道了這需要成百上千的服務(wù)器)會(huì)給你一個(gè)分布式的系統(tǒng),存在許多復(fù)雜的失敗模式:從超時(shí)引起的問(wèn)題,到網(wǎng)絡(luò)劃分的問(wèn)題,到CPU垃圾清理的問(wèn)題或者是內(nèi)存耗盡問(wèn)題。最后的但不僅僅限于此的問(wèn)題是,為了有效利用服務(wù)器,容器需要被以最有效的方式bin-packed;有一件特別難的事,尤其當(dāng)要考慮到做兩種類型的任務(wù)(長(zhǎng)時(shí)期跑的和批量的)和任務(wù)優(yōu)先級(jí)劃分。你當(dāng)然不想因?yàn)橐粋€(gè)以周為單位的Spark批量任務(wù)以為它需要你集群中的一大塊兒,然后把你企業(yè)的應(yīng)用給耗盡從而喪失每小時(shí)10萬(wàn)美金的利潤(rùn)。
總結(jié)一下,在集群層面上以最優(yōu)方式來(lái)安排容器意味著要這么做:
如果發(fā)生故障,你的服務(wù)要能繼續(xù)跑。
你的最大化利用要很嚴(yán)格、很動(dòng)態(tài)。
另外,故障處理,意味著確保發(fā)生故障后能重新安排,要潛在地把其他工作事先清空也是很難且動(dòng)態(tài)的。我說(shuō)“很難”和“動(dòng)態(tài)”的意思是,這些需要很多計(jì)劃安排,而且我們?cè)谟懻摰氖且粋€(gè)迅速且一直在變化的環(huán)境,這本身是計(jì)算機(jī)相對(duì)于人類而言擅長(zhǎng)之初的完美例子。
現(xiàn)在,既然我們已經(jīng)探索過(guò)了存在問(wèn)題的空間,讓我們?cè)賮?lái)看一下解決辦法的空間。
Mesos滿足了以上列表的要求,很成熟,而且得益于它的兩層安排體系,也使得它極度靈活。和“一種尺寸適應(yīng)所有情況”的單一安排體系不同的是,Mesos把實(shí)際工作分配決定委派給所謂專門的框架安排體系,而它自己則通過(guò)應(yīng)用“專用資源公平算法”(Domain Resource Fairness algorithm,簡(jiǎn)稱DRF算法)來(lái)關(guān)注資源抽象和管理。DRF算法本質(zhì)上讓不同的工作得以公平地分享不同類型的資源(CPU、RAM等等)。
或許,對(duì)這個(gè)討論更為重要的是,Mesos可以線性擴(kuò)容。早在2010年,在Mesos原始的技術(shù)報(bào)告中(精確的說(shuō),在6.5部分),在AWS上的一個(gè)有99個(gè)EC2實(shí)例的集群進(jìn)行了一個(gè)實(shí)驗(yàn),每個(gè)集群都有八個(gè)CPU內(nèi)核和6GB的內(nèi)存。在集群上跑有5萬(wàn)個(gè)slave daemons,結(jié)果是一個(gè)線性的向上的增加(總在1秒以內(nèi)),說(shuō)明在主從daemon之間存在線性擴(kuò)容的關(guān)系。
線性擴(kuò)容是Mesos一個(gè)非常關(guān)鍵的特征,用來(lái)跑容器化的工作負(fù)載,不管是在某一個(gè)云環(huán)境中還是在一個(gè)混合的云設(shè)置中(比如:混合了在終端的云或者不同云提供商之間的云)。迄今為止,Mesos在這方面是唯一一個(gè)被證明有追蹤記錄的開(kāi)源的社區(qū)項(xiàng)目(Twitter、Airbnb、Apple和50多個(gè)公司),我們未來(lái)也看看它會(huì)朝何處發(fā)展。
從谷歌10多年前在跑容器擴(kuò)容方面學(xué)到的經(jīng)驗(yàn)(不管是Kubernetes中的pod概念還是基于谷歌Omega的優(yōu)化方案),都已經(jīng)引入了Mesos核心。從另外一方面來(lái)說(shuō),人們可以得益于使用Data Center Operating System,是Apache Mesos的商業(yè)版本,和Kubernetes和Swarm包一起使用。
原文鏈接:What Makes Containers At Scale So Difficult
翻譯:韓佳瑤 ( Caicloud 首席運(yùn)營(yíng)官,美國(guó)匹茲堡大學(xué)信息科學(xué)系碩士,Docker愛(ài)好者)
(如果需要轉(zhuǎn)載,請(qǐng)聯(lián)系我們哦,尊重知識(shí)產(chǎn)權(quán)人人有責(zé))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/32450.html
摘要:它目前由一個(gè)兩人的團(tuán)隊(duì)領(lǐng)導(dǎo)來(lái)自的和。因?yàn)槟壳暗募軜?gòu),應(yīng)用程序和服務(wù)是為正常的多程序操作系統(tǒng)環(huán)境設(shè)計(jì)的,所以需要去尋找一種以的方式來(lái)工作或使用工具來(lái)支持。是一個(gè)告訴如何從鏡像用特定的應(yīng)用程序來(lái)創(chuàng)建容器的腳本。公司受到風(fēng)投支持,積極投入市場(chǎng)。 這篇文章從兩個(gè)部分來(lái)探討LXC,LXC和Docker的容器托管,以及輕便的容器技術(shù)將取代虛擬技術(shù)的可能性。 LXC有可能會(huì)改變我們?nèi)绾芜\(yùn)行和縮放應(yīng)用...
摘要:嚴(yán)格禁止鏡像或配置,除了服務(wù)本身所需功能之外,不允許訪問(wèn)單個(gè)容器。團(tuán)隊(duì)?wèi)?yīng)該能夠查看整個(gè)應(yīng)用程序及其中的所有服務(wù),并能檢查單個(gè)容器。專注于服務(wù)的目標(biāo)是避免分心,只專注于服務(wù)功能。月日,北京海航萬(wàn)豪酒店,容器技術(shù)大會(huì)即將舉行。 現(xiàn)階段而言,容器聽(tīng)起來(lái)可能很酷,但這種現(xiàn)狀或許不會(huì)持續(xù)太久。可以預(yù)見(jiàn)的是,容器將來(lái)也僅僅是一種基礎(chǔ)設(shè)施。經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員對(duì)部署應(yīng)用程序的方法和其它幾種類型的基礎(chǔ)設(shè)...
摘要:多行省略就是大段文字后面的花式點(diǎn)點(diǎn)點(diǎn)。但它固定使用省略號(hào),無(wú)法直接擴(kuò)展。年月日,騰訊控股有限公司在香港聯(lián)交所主板公開(kāi)上市股票代號(hào)。 轉(zhuǎn)載請(qǐng)注明出處:http://hai.li/2017/03/08/css-... 什么是多行省略? showImg(https://segmentfault.com/img/bVKr2N?w=660&h=325); 當(dāng)字?jǐn)?shù)多到一定程度就顯示省略號(hào)點(diǎn)點(diǎn)點(diǎn)。最...
摘要:多行省略就是大段文字后面的花式點(diǎn)點(diǎn)點(diǎn)。但它固定使用省略號(hào),無(wú)法直接擴(kuò)展。年月日,騰訊控股有限公司在香港聯(lián)交所主板公開(kāi)上市股票代號(hào)。 轉(zhuǎn)載請(qǐng)注明出處:http://hai.li/2017/03/08/css-... 什么是多行省略? showImg(https://segmentfault.com/img/bVKr2N?w=660&h=325); 當(dāng)字?jǐn)?shù)多到一定程度就顯示省略號(hào)點(diǎn)點(diǎn)點(diǎn)。最...
摘要:在初步完成了在線流程圖編輯工具之后又接到了在線搭建頁(yè)面工具的需求剛開(kāi)始其實(shí)并不想接項(xiàng)目因?yàn)閺臍v史以及現(xiàn)實(shí)原因來(lái)看個(gè)性化及動(dòng)態(tài)渲染都是很難解決的痛點(diǎn)各種頁(yè)面搭建工具的不溫不火早已說(shuō)明了這條路并沒(méi)有這么好走但從另一個(gè)方面來(lái)說(shuō)既然有了這樣的需求那 在初步完成了在線流程圖編輯工具之后,又接到了在線搭建頁(yè)面工具的需求,剛開(kāi)始其實(shí)并不想接項(xiàng)目,因?yàn)閺臍v史以及現(xiàn)實(shí)原因來(lái)看,個(gè)性化及動(dòng)態(tài)渲染都是很難解決的痛...
閱讀 3114·2023-04-26 01:58
閱讀 958·2021-11-24 09:38
閱讀 3291·2021-09-03 10:29
閱讀 721·2021-08-21 14:10
閱讀 1494·2019-08-30 15:44
閱讀 3094·2019-08-30 14:10
閱讀 3218·2019-08-29 16:32
閱讀 1484·2019-08-29 12:48