我的名字是濱田宏,我發(fā)明了一些自認為很神奇的東西,希望你們能喜歡.這是一個微型機器人,它看起來微不足道,但當(dāng)它和其他小伙伴們團結(jié)起來時荆烈,就變得有趣多了。它們由這個神經(jīng)發(fā)射器控制竟趾,我想讓它們做什么憔购,它們就照做宫峦。這項創(chuàng)造的應(yīng)用是無止境的。建筑物倦始,曾經(jīng)需要大隊人馬,人工建造數(shù)月或數(shù)年山卦,現(xiàn)在只要一個人就可以完成鞋邑。這僅僅是九牛一毛,可不可以用在交通運輸上账蓉,微型機器人可以輕松移動任何物體至任何地方枚碗,只有想不到,沒有做不到铸本。你的思維局限是它唯一的限制肮雨。
看過《超能陸戰(zhàn)隊》的朋友可能仍然對于電影中的男主角介紹和演示自己發(fā)明的微型機器人的場景記憶猶新∠溏瑁“它”看起來只是一跟帶有磁性的小小的金屬部件怨规。但是它是一個獨立的個體,自己能夠獨立的大腦锡足,同時波丰,和同伴之間有相互的接口你行鏈接。能夠通訊舶得。能夠隨意的組合成任意功能的物體掰烟。通過類比,我們很容易由硬件領(lǐng)域想到軟件領(lǐng)域沐批。譬如軟件系統(tǒng)的架構(gòu)纫骑,一直都是伴隨著幾種主流的模式蒙袍,集中式堡距,分布式以及最近才開始流行起來的”微服務(wù)“辈挂。濱田宏發(fā)明的微型機器人恭取,其實和微服務(wù)的思想很類似佣赖。一個微小的服務(wù)實體夷家,有對外的接口與外部通訊脖隶。彼此之間能夠快速組合成新的服務(wù)嗅定。其架構(gòu)松散耦合顾患。接下來的內(nèi)容番捂,會和大家一起分享微服務(wù)的特點以及所擁有的一些神奇的魔法。
什么是微服務(wù)江解?##
微服務(wù)设预,至少我目前也沒有找到一個很精確的標準化解釋。所以我們首先從字面上來理解犁河。既然是服務(wù)鳖枕,那一定是一個能夠?qū)崿F(xiàn)某個功能的實體魄梯。光有功能,是不能成為一下服務(wù)的宾符,因為還需要有途徑和外部交互酿秸。讓外部的實體能夠獲取服務(wù)。譬如web服務(wù)魏烫,通過http協(xié)議和瀏覽器或者app進行交互辣苏。所以微服務(wù),一般來說哄褒,是有一套和外部通訊的標準接口的稀蟋,譬如REST API。 名字帶了一個”微“字呐赡,說明提供的功能很小退客,或者很弱。但是一個非常小链嘀,或者非常弱的功能萌狂,是無法構(gòu)成一個系統(tǒng)的,因此怀泊,他們之間粥脚,必須是能夠相互組合的。在軟件領(lǐng)域包个,一般把它理解成一種新的架構(gòu)設(shè)計模式刷允。可以和我們通常所熟知的軟件架構(gòu)做類比碧囊,譬如集中式架構(gòu)树灶,分布式架構(gòu)。既然是一個很抽象的概念糯而,那我這里也用一幅很抽象的圖來表示天通。
微服務(wù)的特點##
彼此獨立:既然是一個獨立的服務(wù),那必然是一個完整的自治系統(tǒng)熄驼,不依賴外部的東西就能夠提供服務(wù)像寒。有自己一整套的完整的運行機制,有和外部通訊的標準化接口瓜贾。就像《超能特工隊》里面濱田宏發(fā)明的微型機器人诺祸,它就是一個獨立的小機器人〖缆可以和其他的機器人通過磁性相互吸引筷笨,可以探測到彼此的存在。離開了其他個體,一樣能夠運轉(zhuǎn)胃夏,只是功能比較單一轴或。
原子化:作為一個微服務(wù),一定是一個原子化的服務(wù)仰禀。也就是說服務(wù)不能再劃分成更小的服務(wù)了照雁。世界上的一些事物都是有原子構(gòu)成的。它為什么能構(gòu)成所有的物體答恶,正是由于它足夠的基礎(chǔ)饺蚊。如果一個服務(wù)還能劃分成幾個小的服務(wù),那我們就不能稱之為一個微服務(wù)亥宿,它其實可以通過幾個微服務(wù)組合成的一個系統(tǒng)卸勺。
組合和重構(gòu):如果是最原子的服務(wù)砂沛,那一定是沒有任何用處的烫扼。微服務(wù)之所以神奇,在于它能快速的組合和重構(gòu)碍庵。彼此組合成一個系統(tǒng)映企。系統(tǒng)里面所有的實體在概念上是對等的。因此它的結(jié)構(gòu)相對簡單化静浴。是一種松散耦合的結(jié)構(gòu)堰氓,這樣的系統(tǒng),往往具有更強的可擴展性和魯棒性苹享。
微服務(wù)之于實踐##
前面談了這么多双絮,可能大部分人還是沒有明白微服務(wù)是個什么東西。我們試著可以通過一些的東西來描述得问。例如囤攀,我們使用ghost搭建了一套個人博客的系統(tǒng)。如果使用傳統(tǒng)的架構(gòu)宫纬,我們可能以模塊的視角來劃分焚挠,譬如可以分為”用戶管理”,”文章編輯“漓骚,”頁面顯示“蝌衔,”圖片存儲“,”文章分享“ 等幾個模塊蝌蹂,抽象成的架構(gòu)圖如下所示:
換一個視角噩斟,我們可以從服務(wù)的角度來思考。未來簡單起見孤个,我們先考慮單租戶的場景亩冬。:
- Markdown Service
- Web Service
- UGC Service
- MySQL Service
基于微服務(wù)的架構(gòu),可能是下面這樣一個圖:
我們再想想,如果要提供多租戶的服務(wù)呢硅急?我們把數(shù)據(jù)庫變大覆享,存儲多個用戶的信息?這的確是一種思路营袜,但是其思想有點和我們的微服務(wù)的思想背道而馳了撒顿。我們?yōu)槭裁床粸槊總€用戶配備這樣一套服務(wù)呢,只要每個服務(wù)足夠的微小荚板,其實是沒有太多的浪費的凤壁。上面圖里構(gòu)成的一套系統(tǒng)我們可以作為單獨服務(wù)一個用戶的自治系統(tǒng)。當(dāng)用戶增多時跪另,就呈現(xiàn)出了一套去中心化的云服務(wù)的雛形拧抖。
Docker在微服務(wù)系統(tǒng)中所扮演的角色##
在Docker出現(xiàn)之前,雖然我們談?wù)撐⒎?wù)架構(gòu)免绿,但是其實是很難實現(xiàn)的唧席。微服務(wù)要運行,首先需要一套執(zhí)行的環(huán)境嘲驾。這套環(huán)境不能對外部有依賴性淌哟。同時,執(zhí)行環(huán)境的粒度又必須足夠的小辽故,這樣才能稱之為”微“徒仓,否則必然是對資源的巨大浪費。一個微服務(wù)可以跑在一臺虛擬機上面誊垢,但是虛擬機粒度太大掉弛,即使最小的虛擬機,也至少也有1個核喂走。正如我們上面的ghost博客的例子殃饿,服務(wù)一個用戶的服務(wù),顯然用不了一個核缴啡。同時壁晒,虛擬機有沒有一套方便的管理機制,能夠快速的讓這些服務(wù)之間能夠組合和重構(gòu)业栅。Docker出現(xiàn)以后秒咐,我們看到了微服務(wù)的一個非常完美的運行環(huán)境。
- 獨立性:一個容器就是一個完整的執(zhí)行環(huán)境碘裕,不依賴外部任何的東西携取。
- 細粒度: 一臺物理機器可以同時運行成百上千個容器。其計算粒度足夠的小帮孔。
- 快速創(chuàng)建和銷毀: 容器可以在秒級進行創(chuàng)建和銷毀雷滋,非常適合服務(wù)的快速構(gòu)建和重組不撑。
- 完善的管理工具: 數(shù)量眾多的容器編排管理工具,能夠快速的實現(xiàn) 服務(wù)的組合和調(diào)度晤斩。
除了Docker生態(tài)系統(tǒng)之內(nèi)的一些工具焕檬,包括Serf之類的服務(wù)自發(fā)現(xiàn)技術(shù)的發(fā)展,可以讓微服務(wù)能夠自動化的感知其關(guān)聯(lián)的其他服務(wù)澳泵,實現(xiàn)系統(tǒng)的自我構(gòu)建实愚。我記得2014年早些時候,centurylinklabs里面有一篇文章兔辅,講述了如何通過FIG腊敲,Serf,HAProxy構(gòu)建一個自動負載均衡的Docker應(yīng)用维苔。其實碰辅,這篇文章所蘊含的思想,就是一種微服務(wù)架構(gòu)的概念介时。
AUTO-LOADBALANCING DOCKER WITH FIG, HAPROXY AND SERF WITH DOCKER
去中心化的云服務(wù)##
最近一段時間没宾,”場景化“是一個頻繁出現(xiàn)的詞匯。在這里潮尝,我也套用一下這個詞榕吼,”什么是微服務(wù)的場景化應(yīng)用饿序?”勉失。去中心化的云服務(wù),是一個非常典型的應(yīng)用場景原探。什么是去中心化的云服務(wù)呢乱凿?這里做一個類比,譬如家里的供暖咽弦,可以采用集中化的供暖方式徒蟆。由電廠或者鋼鐵廠統(tǒng)一提供供暖服務(wù)。當(dāng)然型型,也有的家庭自己會建設(shè)一套中央空調(diào)系統(tǒng)進行供暖段审。云服務(wù),也會有類似的趨勢闹蒜。目前云計算的發(fā)展比較低級寺枉。主要是以托管為主,因此大部分還是中心化的云服務(wù)绷落。隨著云計算的應(yīng)用越來越垂直化姥闪,必然也會出現(xiàn)越來越多的去中心化的應(yīng)用場景。去年iCloud爆出了被黑客攻擊砌烁。黑客攻破一家服務(wù)商筐喳,就直接竊取了所有用戶的資料。這就是一種中心化的云服務(wù)帶來的一些不利的因素。既然我們可以由統(tǒng)一的服務(wù)商來提供云服務(wù)避归。我們能否實現(xiàn)一套去中心化的服務(wù)呢荣月?就拿個人云存儲來舉例。每個人都有一套個人的云的存儲系統(tǒng)梳毙。這套系統(tǒng)運行在任意的提供“水和電”的基礎(chǔ)云服務(wù)商的系統(tǒng)之上喉童。并且可以任意在不同的服務(wù)商之間遷移和部署。不同的用戶顿天,可能位于不同的服務(wù)商之上堂氯。完全由自己控制的一套系統(tǒng)。每一套系統(tǒng)牌废,都是一系列微小的服務(wù)組合而成咽白。雖然底層也依賴基礎(chǔ)云服務(wù)商,但是他們的作用更像水和電一樣鸟缕。
國內(nèi)內(nèi)以微服務(wù)為基礎(chǔ)的去中心化的云服務(wù)也已經(jīng)有一些實踐的例子晶框,譬如terminal.com, dianCloud.com等,逐漸呈現(xiàn)出一部分這樣的思想懂从。借助于這樣的服務(wù)授段,用戶能夠快速的構(gòu)建一套屬于自己的ghost博客系統(tǒng),或者采用開源軟件ownCloud搭建的個人云存儲系統(tǒng)番甩。選購他們侵贵,就像在商店里面選購商品一樣,拿回家缘薛,插上電就可以用了窍育。這種模式,也給開源軟件找到了一個非常好的商業(yè)化的機制宴胧。我相信這種機制未來會越來越流行漱抓。
一個游戲架構(gòu)的應(yīng)用場景##
游戲是一個比較特殊的行業(yè)。在國內(nèi)恕齐,應(yīng)該是比較早擁抱云計算的一個行業(yè)乞娄,但是也是架構(gòu)相對保守的行業(yè)。大部分的游戲架構(gòu)非常簡單显歧。分布式的架構(gòu)使用并不是太普遍仪或,大部分是單區(qū)單服,一臺強大的機器追迟,運行若干個游戲服(游戲世界)溶其。這并不是游戲架構(gòu)落后,而是游戲本身的特點決定的敦间。游戲一般以游戲服來劃分瓶逃,每個游戲服是一個獨立的游戲世界束铭。里面有一定數(shù)量的玩家。不能太多厢绝,也不能太少(總用戶量一定的情況下契沫,單服人數(shù)和總服的數(shù)量決定了游戲收入的最大化),兩個游戲世界之間昔汉,數(shù)據(jù)不需要互通懈万。因此通常都是一個進程搞定一個游戲服。其實這種模式下靶病,微服務(wù)也是一個非常好的應(yīng)用場景会通。我們知道,游戲其實有非常復(fù)雜的邏輯娄周,譬如有控制人物移動的邏輯涕侈,控制道具,控制戰(zhàn)斗煤辨,同時裳涛,游戲中還有成百上千的電腦控制的角色,每個角色都需要有自己智能众辨。為什么我們不將這些細小的功能通過微服務(wù)來實現(xiàn)呢端三?譬如游戲中的一個單獨的怪獸,可以由自己微服務(wù)構(gòu)成的小的自治系統(tǒng)來控制鹃彻。它可以完全獨立郊闯,接收外部信息,做出反應(yīng)浮声。未來游戲公司可以復(fù)用這些單獨的小系統(tǒng)虚婿。換上不同的皮膚旋奢,就可以用于不同的游戲泳挥。同時游戲其他的邏輯,都可以通過一些獨立的微服務(wù)來構(gòu)成至朗。這些微服務(wù)可以借助Docker之類的系統(tǒng)屉符,運行在容器中。能夠快速的自動化的構(gòu)建出一個完整的游戲世界锹引。
后記##
最近矗钟,基于Docker的創(chuàng)業(yè)公司不停的涌現(xiàn),大家一夜之間似乎都在談?wù)揇ocker嫌变。但是我想說的是吨艇,Docker只是一項新的技術(shù),消費者只會為服務(wù)買單腾啥,不會為技術(shù)買單东涡。何況冯吓,對于圈子之外的大部分的消費者,云已經(jīng)是其能理解的技術(shù)極限了疮跑,再來一個Docker组贺,基本是無法理解的。因此如果想在Docker領(lǐng)域創(chuàng)業(yè)祖娘。停止談?wù)揇ocker失尖,思考Docker技術(shù)之上的豐富的場景化的應(yīng)用,才是關(guān)鍵渐苏。同樣掀潮,微服務(wù)也只是一種架構(gòu)思想∏砀唬基于這種架構(gòu)所帶來的神奇的應(yīng)用場景才是未來胧辽。
by: yongfeng