初識微服務

http://www.jianshu.com/p/9805545db4ad#
再談Docker-微服務的場景化應用
144 做者 yongfeng 關注
2015.03.18 00:34* 字數 3367 閱讀 7294評論 7喜歡 19
個人名字是濱田宏,我發明了一些自認爲很神奇的東西,但願大家能喜歡.這是一個微型機器人,它看起來微不足道,但當它和其餘小夥伴們團結起來時,就變得有趣多了。它們由這個神經發射器控制,我想讓它們作什麼,它們就照作。這項創造的應用是無止境的。建築物,曾經須要大隊人馬,人工建造數月或數年,如今只要一我的就能夠完成。這僅僅是九牛一毛,可不能夠用在交通運輸上,微型機器人能夠輕鬆移動任何物體至任何地方,只有想不到,沒有作不到。你的思惟侷限是它惟一的限制。
看過《超能陸戰隊》的朋友可能仍然對於電影中的男主角介紹和演示本身發明的微型機器人的場景記憶猶新。「它」看起來只是一跟帶有磁性的小小的金屬部件。可是它是一個獨立的個體,本身可以獨立的大腦,同時,和同伴之間有相互的接口你行連接。可以通信。可以隨意的組合成任意功能的物體。經過類比,咱們很容易由硬件領域想到軟件領域。譬如軟件系統的架構,一直都是伴隨着幾種主流的模式,集中式,分佈式以及最近纔開始流行起來的」微服務「。濱田宏發明的微型機器人,其實和微服務的思想很相似。一個微小的服務實體,有對外的接口與外部通信。彼此之間可以快速組合成新的服務。其架構鬆散耦合。接下來的內容,會和你們一塊兒分享微服務的特色以及所擁有的一些神奇的魔法。web

什麼是微服務?數據庫

微服務,至少我目前也沒有找到一個很精確的標準化解釋。因此咱們首先從字面上來理解。既然是服務,那必定是一個可以實現某個功能的實體。光有功能,是不能成爲一下服務的,由於還須要有途徑和外部交互。讓外部的實體可以獲取服務。譬如web服務,經過http協議和瀏覽器或者app進行交互。因此微服務,通常來講,是有一套和外部通信的標準接口的,譬如REST API。 名字帶了一個」微「字,說明提供的功能很小,或者很弱。可是一個很是小,或者很是弱的功能,是沒法構成一個系統的,所以,他們之間,必須是可以相互組合的。在軟件領域,通常把它理解成一種新的架構設計模式。能夠和咱們一般所熟知的軟件架構作類比,譬如集中式架構,分佈式架構。既然是一個很抽象的概念,那我這裏也用一幅很抽象的圖來表示。設計模式

微服務的特色瀏覽器

彼此獨立:既然是一個獨立的服務,那必然是一個完整的自治系統,不依賴外部的東西就可以提供服務。有本身一整套的完整的運行機制,有和外部通信的標準化接口。就像《超能特工隊》裏面濱田宏發明的微型機器人,它就是一個獨立的小機器人。能夠和其餘的機器人經過磁性相互吸引,能夠探測到彼此的存在。離開了其餘個體,同樣可以運轉,只是功能比較單一。markdown

原子化:做爲一個微服務,必定是一個原子化的服務。也就是說服務不能再劃分紅更小的服務了。世界上的一些事物都是有原子構成的。它爲何能構成全部的物體,正是因爲它足夠的基礎。若是一個服務還能劃分紅幾個小的服務,那咱們就不能稱之爲一個微服務,它其實能夠經過幾個微服務組合成的一個系統。架構

組合和重構:若是是最原子的服務,那必定是沒有任何用處的。微服務之因此神奇,在於它能快速的組合和重構。彼此組合成一個系統。系統裏面全部的實體在概念上是對等的。所以它的結構相對簡單化。是一種鬆散耦合的結構,這樣的系統,每每具備更強的可擴展性和魯棒性。app

微服務之於實踐負載均衡

前面談了這麼多,可能大部分人仍是沒有明白微服務是個什麼東西。咱們試着能夠經過一些的東西來描述。例如,咱們使用ghost搭建了一套我的博客的系統。若是使用傳統的架構,咱們可能以模塊的視角來劃分,譬如能夠分爲」用戶管理」,」文章編輯「,」頁面顯示「,」圖片存儲「,」文章分享「 等幾個模塊,抽象成的架構圖以下所示:分佈式

換一個視角,咱們能夠從服務的角度來思考。將來簡單起見,咱們先考慮單租戶的場景。:微服務

Markdown Service
Web Service
UGC Service
MySQL Service
基於微服務的架構,多是下面這樣一個圖:

咱們再想一想,若是要提供多租戶的服務呢?咱們把數據庫變大,存儲多個用戶的信息?這的確是一種思路,可是其思想有點和咱們的微服務的思想背道而馳了。咱們爲何不爲每一個用戶配備這樣一套服務呢,只要每一個服務足夠的微小,實際上是沒有太多的浪費的。上面圖裏構成的一套系統咱們能夠做爲單獨服務一個用戶的自治系統。當用戶增多時,就呈現出了一套去中心化的雲服務的雛形。

Docker在微服務系統中所扮演的角色

在Docker出現以前,雖然咱們談論微服務架構,可是實際上是很難實現的。微服務要運行,首先須要一套執行的環境。這套環境不能對外部有依賴性。同時,執行環境的粒度又必須足夠的小,這樣才能稱之爲」微「,不然必然是對資源的巨大浪費。一個微服務能夠跑在一臺虛擬機上面,可是虛擬機粒度太大,即便最小的虛擬機,也至少也有1個核。正如咱們上面的ghost博客的例子,服務一個用戶的服務,顯然用不了一個核。同時,虛擬機有沒有一套方便的管理機制,可以快速的讓這些服務之間可以組合和重構。Docker出現之後,咱們看到了微服務的一個很是完美的運行環境。

獨立性:一個容器就是一個完整的執行環境,不依賴外部任何的東西。
細粒度: 一臺物理機器能夠同時運行成百上千個容器。其計算粒度足夠的小。
快速建立和銷燬: 容器能夠在秒級進行建立和銷燬,很是適合服務的快速構建和重組。
完善的管理工具: 數量衆多的容器編排管理工具,可以快速的實現 服務的組合和調度。
除了Docker生態系統以內的一些工具,包括Serf之類的服務自發現技術的發展,可讓微服務可以自動化的感知其關聯的其餘服務,實現系統的自我構建。我記得2014年早些時候,centurylinklabs裏面有一篇文章,講述瞭如何經過FIG,Serf,HAProxy構建一個自動負載均衡的Docker應用。其實,這篇文章所蘊含的思想,就是一種微服務架構的概念。

AUTO-LOADBALANCING DOCKER WITH FIG, HAPROXY AND SERF WITH DOCKER

去中心化的雲服務

最近一段時間,」場景化「是一個頻繁出現的詞彙。在這裏,我也套用一下這個詞,」什麼是微服務的場景化應用?」。去中心化的雲服務,是一個很是典型的應用場景。什麼是去中心化的雲服務呢?這裏作一個類比,譬如家裏的供暖,能夠採用集中化的供暖方式。由電廠或者鋼鐵廠統一提供供暖服務。固然,也有的家庭本身會建設一套中央空調系統進行供暖。雲服務,也會有相似的趨勢。目前雲計算的發展比較低級。主要是以託管爲主,所以大部分仍是中心化的雲服務。隨着雲計算的應用愈來愈垂直化,必然也會出現愈來愈多的去中心化的應用場景。去年iCloud爆出了被黑客攻擊。黑客攻破一家服務商,就直接竊取了全部用戶的資料。這就是一種中心化的雲服務帶來的一些不利的因素。既然咱們能夠由統一的服務商來提供雲服務。咱們可否實現一套去中心化的服務呢?就拿我的雲存儲來舉例。每一個人都有一套我的的雲的存儲系統。這套系統運行在任意的提供「水和電」的基礎雲服務商的系統之上。而且能夠任意在不一樣的服務商之間遷移和部署。不一樣的用戶,可能位於不一樣的服務商之上。徹底由本身控制的一套系統。每一套系統,都是一系列微小的服務組合而成。雖然底層也依賴基礎雲服務商,可是他們的做用更像水和電同樣。

國內內以微服務爲基礎的去中心化的雲服務也已經有一些實踐的例子,譬如terminal.com, dianCloud.com等,逐漸呈現出一部分這樣的思想。藉助於這樣的服務,用戶可以快速的構建一套屬於本身的ghost博客系統,或者採用開源軟件ownCloud搭建的我的雲存儲系統。選購他們,就像在商店裏面選購商品同樣,拿回家,插上電就能夠用了。這種模式,也給開源軟件找到了一個很是好的商業化的機制。我相信這種機制將來會愈來愈流行。

一個遊戲架構的應用場景

遊戲是一個比較特殊的行業。在國內,應該是比較早擁抱雲計算的一個行業,可是也是架構相對保守的行業。大部分的遊戲架構很是簡單。分佈式的架構使用並非太廣泛,大部分是單區單服,一臺強大的機器,運行若干個遊戲服(遊戲世界)。這並非遊戲架構落後,而是遊戲自己的特色決定的。遊戲通常以遊戲服來劃分,每一個遊戲服是一個獨立的遊戲世界。裏面有必定數量的玩家。不能太多,也不能太少(總用戶量必定的狀況下,單服人數和總服的數量決定了遊戲收入的最大化),兩個遊戲世界之間,數據不須要互通。所以一般都是一個進程搞定一個遊戲服。其實這種模式下,微服務也是一個很是好的應用場景。咱們知道,遊戲其實有很是複雜的邏輯,譬若有控制人物移動的邏輯,控制道具,控制戰鬥,同時,遊戲中還有成百上千的電腦控制的角色,每一個角色都須要有本身智能。爲何咱們不將這些細小的功能經過微服務來實現呢?譬如遊戲中的一個單獨的怪獸,能夠由本身微服務構成的小的自治系統來控制。它能夠徹底獨立,接收外部信息,作出反應。將來遊戲公司能夠複用這些單獨的小系統。換上不一樣的皮膚,就能夠用於不一樣的遊戲。同時遊戲其餘的邏輯,均可以經過一些獨立的微服務來構成。這些微服務能夠藉助Docker之類的系統,運行在容器中。可以快速的自動化的構建出一個完整的遊戲世界。

後記

最近,基於Docker的創業公司不停的涌現,你們一晚上之間彷佛都在談論Docker。可是我想說的是,Docker只是一項新的技術,消費者只會爲服務買單,不會爲技術買單。況且,對於圈子以外的大部分的消費者,雲已是其能理解的技術極限了,再來一個Docker,基本是沒法理解的。所以若是想在Docker領域創業。中止談論Docker,思考Docker技術之上的豐富的場景化的應用,纔是關鍵。一樣,微服務也只是一種架構思想。基於這種架構所帶來的神奇的應用場景纔是將來。

相關文章
相關標籤/搜索