再談Docker,微服務(wù)的場(chǎng)景化應(yīng)用

責(zé)任編輯:editor005

作者:劉永峰

2015-07-16 14:15:59

摘自:大數(shù)網(wǎng)

看過《超能陸戰(zhàn)隊(duì)》的朋友可能仍然對(duì)于電影中的男主角介紹和演示自己發(fā)明的微型機(jī)器人的場(chǎng)景記憶猶新。完善的管理工具:數(shù)量眾多的容器編排管理工具,能夠快速的實(shí)現(xiàn) 服務(wù)的組合和調(diào)度。

看過《超能陸戰(zhàn)隊(duì)》的朋友可能仍然對(duì)于電影中的男主角介紹和演示自己發(fā)明的微型機(jī)器人的場(chǎng)景記憶猶新。

“它”看起來只是一跟帶有磁性的小小的金屬部件。但是它是一個(gè)獨(dú)立的個(gè)體,自己能夠獨(dú)立的大腦,同時(shí),和同伴之間有相互的接口你行鏈接。能夠通訊。能夠隨意的組合成任意功能的物體。

通過類比,我們很容易由硬件領(lǐng)域想到軟件領(lǐng)域。譬如軟件系統(tǒng)的架構(gòu),一直都是伴隨著幾種主流的模式,集中式,分布式以及最近才開始流行起來的“微服務(wù)”。

濱田宏發(fā)明的微型機(jī)器人,其實(shí)和微服務(wù)的思想很類似。一個(gè)微小的服務(wù)實(shí)體,有對(duì)外的接口與外部通訊。彼此之間能夠快速組合成新的服務(wù)。其架構(gòu)松散耦合。

什么是微服務(wù)?

微服務(wù),至少我目前也沒有找到一個(gè)很精確的標(biāo)準(zhǔn)化解釋。所以我們首先從字面上來理解。既然是服務(wù),那一定是一個(gè)能夠?qū)崿F(xiàn)某個(gè)功能的實(shí)體。

光有功能,是不能成為一下服務(wù)的,因?yàn)檫€需要有途徑和外部交互。讓外部的實(shí)體能夠獲取服務(wù)。譬如web服務(wù),通過http協(xié)議和瀏覽器或者app進(jìn)行交互。所以微服務(wù),一般來說,是有一套和外部通訊的標(biāo)準(zhǔn)接口的,譬如REST API。

名字帶了一個(gè)“微”字,說明提供的功能很小,或者很弱。但是一個(gè)非常小,或者非常弱的功能,是無法構(gòu)成一個(gè)系統(tǒng)的,因此,他們之間,必須是能夠相互組合的。

在軟件領(lǐng)域,一般把它理解成一種新的架構(gòu)設(shè)計(jì)模式??梢院臀覀兺ǔK熘能浖軜?gòu)做類比,譬如集中式架構(gòu),分布式架構(gòu)。

微服務(wù)的特點(diǎn)

彼此獨(dú)立:既然是一個(gè)獨(dú)立的服務(wù),那必然是一個(gè)完整的自治系統(tǒng),不依賴外部的東西就能夠提供服務(wù)。有自己一整套的完整的運(yùn)行機(jī)制,有和外部通訊的標(biāo)準(zhǔn)化接口。就像《超能特工隊(duì)》里面濱田宏發(fā)明的微型機(jī)器人,它就是一個(gè)獨(dú)立的小機(jī)器人。可以和其他的機(jī)器人通過磁性相互吸引,可以探測(cè)到彼此的存在。離開了其他個(gè)體,一樣能夠運(yùn)轉(zhuǎn),只是功能比較單一。

原子化:作為一個(gè)微服務(wù),一定是一個(gè)原子化的服務(wù)。也就是說服務(wù)不能再劃分成更小的服務(wù)了。世界上的一些事物都是有原子 構(gòu)成的。它為什么能構(gòu)成所有的物體,正是由于它足夠的基礎(chǔ)。如果一個(gè)服務(wù)還能劃分成幾個(gè)小的服務(wù),那我們就不能稱之為一個(gè)微服務(wù),它其實(shí)可以通過幾個(gè)微服務(wù)組合成的一個(gè)系統(tǒng)。

組合和重構(gòu):如果是最原子的服務(wù),那一定是沒有任何用處的。微服務(wù)之所以神奇,在于它能快速的組合和重構(gòu)。彼此組合成一個(gè)系統(tǒng)。系統(tǒng)里面所有的實(shí)體在概念上是對(duì)等的。因此它的結(jié)構(gòu)相對(duì)簡(jiǎn)單化。是一種松散耦合的結(jié)構(gòu),這樣的系統(tǒng),往往具有更強(qiáng)的可擴(kuò)展性和魯棒性。

微服務(wù)之于實(shí)踐

前面談了這么多,可能大部分人還是沒有明白微服務(wù)是個(gè)什么東西。我們?cè)囍ㄟ^一些東西來描述。

例如,我們使用ghost搭建了一套個(gè)人博客的系統(tǒng)。如果使用傳統(tǒng)的架構(gòu),我們可能以模塊的視角來劃分,譬如可以分為”用戶管理”,”文章編輯“,”頁面顯示“,”圖片存儲(chǔ)“,”文章分享“ 等幾個(gè)模塊。

換一個(gè)視角,我們可以從服務(wù)的角度來思考。未來簡(jiǎn)單起見,我們先考慮單租戶的場(chǎng)景:

Markdown Service

Web Service

UGC Service

MySQL Service

  我們?cè)傧胂?,如果要提供多租戶的服?wù)呢?

我們把數(shù)據(jù)庫變大,存儲(chǔ)多個(gè)用戶的信息?這的確是一種思路,但是其思想有點(diǎn)和我們的微服務(wù)的思想背道而馳了。

我們?yōu)槭裁床粸槊總€(gè)用戶配備這樣一套服務(wù)呢,只要每個(gè)服務(wù)足夠的微小,其實(shí)是沒有太多的浪費(fèi)的。上面圖里構(gòu)成的一套系統(tǒng)我們可以作為單獨(dú)服務(wù)一個(gè)用戶的自治系統(tǒng)。當(dāng)用戶增多時(shí),就呈現(xiàn)出了一套去中心化的云服務(wù)的雛形。

Docker在微服務(wù)系統(tǒng)中所扮演的角色

微服務(wù)要運(yùn)行,首先需要一套執(zhí)行的環(huán)境。這套環(huán)境不能對(duì)外部有依賴性。同時(shí),執(zhí)行環(huán)境的粒度又必須足夠的小,這樣才能稱之為”微“,否則必然是對(duì)資源的巨大浪費(fèi)。一個(gè)微服務(wù)可以跑在一臺(tái)虛擬機(jī)上面,但是虛擬機(jī)粒度太大,即使最小的虛擬機(jī),也至少也有1個(gè)核。

正如我們上面的ghost博客的例子,服務(wù)一個(gè)用戶的服務(wù),顯然用不了一個(gè)核。同時(shí),虛擬機(jī)有沒有一套方便的管理機(jī)制,能夠快速的讓這些服務(wù)之間能夠組合和重構(gòu)。

Docker出現(xiàn)以后,我們看到了微服務(wù)的一個(gè)非常完美的運(yùn)行環(huán)境。

獨(dú)立性:一個(gè)容器就是一個(gè)完整的執(zhí)行環(huán)境,不依賴外部任何的東西。

細(xì)粒度:一臺(tái)物理機(jī)器可以同時(shí)運(yùn)行成百上千個(gè)容器。其計(jì)算粒度足夠的小。

快速創(chuàng)建和銷毀:容器可以在秒級(jí)進(jìn)行創(chuàng)建和銷毀,非常適合服務(wù)的快速構(gòu)建和重組。

完善的管理工具:數(shù)量眾多的容器編排管理工具,能夠快速的實(shí)現(xiàn) 服務(wù)的組合和調(diào)度。

去中心化的云服務(wù)

最近一段時(shí)間,“場(chǎng)景化”是一個(gè)頻繁出現(xiàn)的詞匯。在這里,我也套用一下這個(gè)詞,“什么是微服務(wù)的場(chǎng)景化應(yīng)用?”去中心化的云服務(wù),是一個(gè)非常典型的應(yīng)用場(chǎng)景。

什么是去中心化的云服務(wù)呢?這里做一個(gè)類比,譬如家里的供暖,可以采用集中化的供暖方式。由電廠或者鋼鐵廠統(tǒng)一提供供暖服務(wù)。當(dāng)然,也有的家庭自己會(huì)建設(shè)一套中央空調(diào)系統(tǒng)進(jìn)行供暖。

云服務(wù),也會(huì)有類似的趨勢(shì)。目前云計(jì)算的發(fā)展比較低級(jí)。主要是以托管為主,因此大部分還是中心化的云服務(wù)。隨著云計(jì)算的應(yīng)用越來越垂直化,必然也會(huì)出現(xiàn)越來越多的去中心化的應(yīng)用場(chǎng)景。

去年iCloud爆出了被黑客攻擊。黑客攻破一家服務(wù)商,就直接竊取了所有用戶的資料。這就是一種中心化的云服務(wù)帶來的一些不利的因素。既然我們可以由統(tǒng)一的服務(wù)商來提供云服務(wù)。我們能否實(shí)現(xiàn)一套去中心化的服務(wù)呢?

就拿個(gè)人云存儲(chǔ)來舉例。每個(gè)人都有一套個(gè)人的云的存儲(chǔ)系統(tǒng)。這套系統(tǒng)運(yùn)行在任意的提供“水和電”的基礎(chǔ)云服務(wù)商的系統(tǒng)之上。并且可以任意在不同的服務(wù)商之間遷移和部署。不同的用戶,可能位于不同的服務(wù)商之上。完全由自己控制的一套系統(tǒng)。每一套系統(tǒng),都是一系列微小的服務(wù)組合而成。雖然底層也依賴基礎(chǔ)云服務(wù)商,但是他們的作用更像水和電一樣。

國內(nèi)內(nèi)以微服務(wù)為基礎(chǔ)的去中心化的云服務(wù)也已經(jīng)有一些實(shí)踐的例子,譬如terminal.com, dianCloud.com等,逐漸呈現(xiàn)出一部分這樣的思想。借助于這樣的服務(wù),用戶能夠快速的構(gòu)建一套屬于自己的ghost博客系統(tǒng),或者采用開源軟件ownCloud搭建的個(gè)人云存儲(chǔ)系統(tǒng)。選購他們,就像在商店里面選購商品一樣,拿回家,插上電就可以用了。這種模式,也給開源軟件找到了一個(gè)非常好的商業(yè)化的機(jī)制。我相信這種機(jī)制未來會(huì)越來越流行。

個(gè)游戲架構(gòu)的應(yīng)用場(chǎng)景

游戲是一個(gè)比較特殊的行業(yè)。在國內(nèi),應(yīng)該是比較早擁抱云計(jì)算的一個(gè)行業(yè),但是也是架構(gòu)相對(duì)保守的行業(yè)。

大部分的游戲架構(gòu)非常簡(jiǎn)單。分布式的架構(gòu)使用并不是太普遍,大部分是單區(qū)單服,一臺(tái)強(qiáng)大的機(jī)器,運(yùn)行若干個(gè)游戲服(游戲世界)。這并不是游戲架構(gòu)落后,而是游戲本身的特點(diǎn)決定的。游戲一般以游戲服來劃分,每個(gè)游戲服是一個(gè)獨(dú)立的游戲世界。里面有一定數(shù)量的玩家。不能太多,也不能太少(總用戶量一定的情況下,單服人數(shù)和總服的數(shù)量決定了游戲收入的最大化),兩個(gè)游戲世界之間,數(shù)據(jù)不需要互通。因此通常都是一個(gè)進(jìn)程搞定一個(gè)游戲服。

其實(shí)這種模式下,微服務(wù)也是一個(gè)非常好的應(yīng)用場(chǎng)景。我們知道,游戲其實(shí)有非常復(fù)雜的邏輯,譬如有控制人物移動(dòng)的邏輯,控制道具,控制戰(zhàn)斗,同時(shí),游戲中還有成百上千的電腦控制的角色,每個(gè)角色都需要有自己智能。為什么我們不將這些細(xì)小的功能通過微服務(wù)來實(shí)現(xiàn)呢?

譬如游戲中的一個(gè)單獨(dú)的怪獸,可以由自己微服務(wù)構(gòu)成的小的自治系統(tǒng)來控制。它可以完全獨(dú)立,接收外部信息,做出反應(yīng)。未來游戲公司可以復(fù)用這些單獨(dú)的小系統(tǒng)。換上不同的皮膚,就可以用于不同的游戲。同時(shí)游戲其他的邏輯,都可以通過一些獨(dú)立的微服務(wù)來構(gòu)成。這些微服務(wù)可以借助Docker之類的系統(tǒng),運(yùn)行在容器中。能夠快速的自動(dòng)化的構(gòu)建出一個(gè)完整的游戲世界。

后記

最近,基于Docker的創(chuàng)業(yè)公司不停的涌現(xiàn),大家一夜之間似乎都在談?wù)揇ocker。但是我想說的是,Docker只是一項(xiàng)新的技術(shù),消費(fèi)者只會(huì)為服務(wù)買單,不會(huì)為技術(shù)買單。何況,對(duì)于圈子之外的大部分的消費(fèi)者,云已經(jīng)是其能理解的技術(shù)極限了,再來一個(gè)Docker,基本是無法理解的。因此如果想在Docker領(lǐng)域創(chuàng)業(yè)。停止談?wù)揇ocker,思考Docker技術(shù)之上的豐富的場(chǎng)景化的應(yīng)用,才是關(guān)鍵。同樣,微服務(wù)也只是一種架構(gòu)思想?;谶@種架構(gòu)所帶來的神奇的應(yīng)用場(chǎng)景才是未來。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)