'Docker,微服務的場景化應用'

"

接下來的內容,會和大家一起分享微服務的特點以及所擁有的一些神奇的魔法。

什麼是微服務?

微服務,至少我目前也沒有找到一個很精確的標準化解釋。所以我們首先從字面上來理解。既然是服務,那一定是一個能夠實現某個功能的實體。

光有功能,是不能成為一下服務的,因為還需要有途徑和外部交互。讓外部的實體能夠獲取服務。譬如web服務,通過http協議和瀏覽器或者app進行交互。所以微服務,一般來說,是有一套和外部通訊的標準接口的,譬如REST API。

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

"

接下來的內容,會和大家一起分享微服務的特點以及所擁有的一些神奇的魔法。

什麼是微服務?

微服務,至少我目前也沒有找到一個很精確的標準化解釋。所以我們首先從字面上來理解。既然是服務,那一定是一個能夠實現某個功能的實體。

光有功能,是不能成為一下服務的,因為還需要有途徑和外部交互。讓外部的實體能夠獲取服務。譬如web服務,通過http協議和瀏覽器或者app進行交互。所以微服務,一般來說,是有一套和外部通訊的標準接口的,譬如REST API。

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

Docker,微服務的場景化應用

在軟件領域,一般把它理解成一種新的架構設計模式。可以和我們通常所熟知的軟件架構做類比,譬如集中式架構,分佈式架構。

微服務的特點

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

原子化:作為一個微服務,一定是一個原子化的服務。也就是說服務不能再劃分成更小的服務了。世界上的一些事物都是有原子 構成的。它為什麼能構成所有的物體,正是由於它足夠的基礎。如果一個服務還能劃分成幾個小的服務,那我們就不能稱之為一個微服務,它其實可以通過幾個微服務組合成的一個系統。

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

微服務之於實踐

前面談了這麼多,可能大部分人還是沒有明白微服務是個什麼東西。我們試著可以通過一些的東西來描述。

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

"

接下來的內容,會和大家一起分享微服務的特點以及所擁有的一些神奇的魔法。

什麼是微服務?

微服務,至少我目前也沒有找到一個很精確的標準化解釋。所以我們首先從字面上來理解。既然是服務,那一定是一個能夠實現某個功能的實體。

光有功能,是不能成為一下服務的,因為還需要有途徑和外部交互。讓外部的實體能夠獲取服務。譬如web服務,通過http協議和瀏覽器或者app進行交互。所以微服務,一般來說,是有一套和外部通訊的標準接口的,譬如REST API。

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

Docker,微服務的場景化應用

在軟件領域,一般把它理解成一種新的架構設計模式。可以和我們通常所熟知的軟件架構做類比,譬如集中式架構,分佈式架構。

微服務的特點

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

原子化:作為一個微服務,一定是一個原子化的服務。也就是說服務不能再劃分成更小的服務了。世界上的一些事物都是有原子 構成的。它為什麼能構成所有的物體,正是由於它足夠的基礎。如果一個服務還能劃分成幾個小的服務,那我們就不能稱之為一個微服務,它其實可以通過幾個微服務組合成的一個系統。

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

微服務之於實踐

前面談了這麼多,可能大部分人還是沒有明白微服務是個什麼東西。我們試著可以通過一些的東西來描述。

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

Docker,微服務的場景化應用

換一個視角,我們可以從服務的角度來思考。未來簡單起見,我們先考慮單租戶的場景:

Markdown Service

Web Service

UGC Service

MySQL Service

"

接下來的內容,會和大家一起分享微服務的特點以及所擁有的一些神奇的魔法。

什麼是微服務?

微服務,至少我目前也沒有找到一個很精確的標準化解釋。所以我們首先從字面上來理解。既然是服務,那一定是一個能夠實現某個功能的實體。

光有功能,是不能成為一下服務的,因為還需要有途徑和外部交互。讓外部的實體能夠獲取服務。譬如web服務,通過http協議和瀏覽器或者app進行交互。所以微服務,一般來說,是有一套和外部通訊的標準接口的,譬如REST API。

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

Docker,微服務的場景化應用

在軟件領域,一般把它理解成一種新的架構設計模式。可以和我們通常所熟知的軟件架構做類比,譬如集中式架構,分佈式架構。

微服務的特點

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

原子化:作為一個微服務,一定是一個原子化的服務。也就是說服務不能再劃分成更小的服務了。世界上的一些事物都是有原子 構成的。它為什麼能構成所有的物體,正是由於它足夠的基礎。如果一個服務還能劃分成幾個小的服務,那我們就不能稱之為一個微服務,它其實可以通過幾個微服務組合成的一個系統。

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

微服務之於實踐

前面談了這麼多,可能大部分人還是沒有明白微服務是個什麼東西。我們試著可以通過一些的東西來描述。

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

Docker,微服務的場景化應用

換一個視角,我們可以從服務的角度來思考。未來簡單起見,我們先考慮單租戶的場景:

Markdown Service

Web Service

UGC Service

MySQL Service

Docker,微服務的場景化應用

我們再想想,如果要提供多租戶的服務呢?

我們把數據庫變大,存儲多個用戶的信息?這的確是一種思路,但是其思想有點和我們的微服務的思想背道而馳了。

我們為什麼不為每個用戶配備這樣一套服務呢,只要每個服務足夠的微小,其實是沒有太多的浪費的。上面圖裡構成的一套系統我們可以作為單獨服務一個用戶的自治系統。當用戶增多時,就呈現出了一套去中心化的雲服務的雛形。

"

接下來的內容,會和大家一起分享微服務的特點以及所擁有的一些神奇的魔法。

什麼是微服務?

微服務,至少我目前也沒有找到一個很精確的標準化解釋。所以我們首先從字面上來理解。既然是服務,那一定是一個能夠實現某個功能的實體。

光有功能,是不能成為一下服務的,因為還需要有途徑和外部交互。讓外部的實體能夠獲取服務。譬如web服務,通過http協議和瀏覽器或者app進行交互。所以微服務,一般來說,是有一套和外部通訊的標準接口的,譬如REST API。

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

Docker,微服務的場景化應用

在軟件領域,一般把它理解成一種新的架構設計模式。可以和我們通常所熟知的軟件架構做類比,譬如集中式架構,分佈式架構。

微服務的特點

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

原子化:作為一個微服務,一定是一個原子化的服務。也就是說服務不能再劃分成更小的服務了。世界上的一些事物都是有原子 構成的。它為什麼能構成所有的物體,正是由於它足夠的基礎。如果一個服務還能劃分成幾個小的服務,那我們就不能稱之為一個微服務,它其實可以通過幾個微服務組合成的一個系統。

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

微服務之於實踐

前面談了這麼多,可能大部分人還是沒有明白微服務是個什麼東西。我們試著可以通過一些的東西來描述。

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

Docker,微服務的場景化應用

換一個視角,我們可以從服務的角度來思考。未來簡單起見,我們先考慮單租戶的場景:

Markdown Service

Web Service

UGC Service

MySQL Service

Docker,微服務的場景化應用

我們再想想,如果要提供多租戶的服務呢?

我們把數據庫變大,存儲多個用戶的信息?這的確是一種思路,但是其思想有點和我們的微服務的思想背道而馳了。

我們為什麼不為每個用戶配備這樣一套服務呢,只要每個服務足夠的微小,其實是沒有太多的浪費的。上面圖裡構成的一套系統我們可以作為單獨服務一個用戶的自治系統。當用戶增多時,就呈現出了一套去中心化的雲服務的雛形。

Docker,微服務的場景化應用

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

在Docker出現之前,雖然我們談論微服務架構,但是其實是很難實現的。

微服務要運行,首先需要一套執行的環境。這套環境不能對外部有依賴性。同時,執行環境的粒度又必須足夠的小,這樣才能稱之為”微“,否則必然是對資源的巨大浪費。一個微服務可以跑在一臺虛擬機上面,但是虛擬機粒度太大,即使最小的虛擬機,也至少也有1個核。

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

Docker出現以後,我們看到了微服務的一個非常完美的運行環境。

獨立性:一個容器就是一個完整的執行環境,不依賴外部任何的東西。

細粒度: 一臺物理機器可以同時運行成百上千個容器。其計算粒度足夠的小。

快速創建和銷燬: 容器可以在秒級進行創建和銷燬,非常適合服務的快速構建和重組。

完善的管理工具: 數量眾多的容器編排管理工具,能夠快速的實現 服務的組合和調度。

除了Docker生態系統之內的一些工具,包括Serf之類的服務自發現技術的發展,可以讓微服務能夠自動化的感知其關聯的其他服務,實現系統的自我構建。我記得2014年早些時候,centurylinklabs裡面有一篇文章,講述瞭如何通過FIG,Serf,HAProxy構建一個自動負載均衡的Docker應用。其實,這篇文章所蘊含的思想,就是一種微服務架構的概念。

去中心化的雲服務

最近一段時間,“場景化”是一個頻繁出現的詞彙。在這裡,我也套用一下這個詞,“什麼是微服務的場景化應用?”。去中心化的雲服務,是一個非常典型的應用場景。

什麼是去中心化的雲服務呢?這裡做一個類比,譬如家裡的供暖,可以採用集中化的供暖方式。由電廠或者鋼鐵廠統一提供供暖服務。當然,也有的家庭自己會建設一套中央空調系統進行供暖。

雲服務,也會有類似的趨勢。目前雲計算的發展比較低級。主要是以託管為主,因此大部分還是中心化的雲服務。隨著雲計算的應用越來越垂直化,必然也會出現越來越多的去中心化的應用場景。

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

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

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

"

接下來的內容,會和大家一起分享微服務的特點以及所擁有的一些神奇的魔法。

什麼是微服務?

微服務,至少我目前也沒有找到一個很精確的標準化解釋。所以我們首先從字面上來理解。既然是服務,那一定是一個能夠實現某個功能的實體。

光有功能,是不能成為一下服務的,因為還需要有途徑和外部交互。讓外部的實體能夠獲取服務。譬如web服務,通過http協議和瀏覽器或者app進行交互。所以微服務,一般來說,是有一套和外部通訊的標準接口的,譬如REST API。

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

Docker,微服務的場景化應用

在軟件領域,一般把它理解成一種新的架構設計模式。可以和我們通常所熟知的軟件架構做類比,譬如集中式架構,分佈式架構。

微服務的特點

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

原子化:作為一個微服務,一定是一個原子化的服務。也就是說服務不能再劃分成更小的服務了。世界上的一些事物都是有原子 構成的。它為什麼能構成所有的物體,正是由於它足夠的基礎。如果一個服務還能劃分成幾個小的服務,那我們就不能稱之為一個微服務,它其實可以通過幾個微服務組合成的一個系統。

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

微服務之於實踐

前面談了這麼多,可能大部分人還是沒有明白微服務是個什麼東西。我們試著可以通過一些的東西來描述。

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

Docker,微服務的場景化應用

換一個視角,我們可以從服務的角度來思考。未來簡單起見,我們先考慮單租戶的場景:

Markdown Service

Web Service

UGC Service

MySQL Service

Docker,微服務的場景化應用

我們再想想,如果要提供多租戶的服務呢?

我們把數據庫變大,存儲多個用戶的信息?這的確是一種思路,但是其思想有點和我們的微服務的思想背道而馳了。

我們為什麼不為每個用戶配備這樣一套服務呢,只要每個服務足夠的微小,其實是沒有太多的浪費的。上面圖裡構成的一套系統我們可以作為單獨服務一個用戶的自治系統。當用戶增多時,就呈現出了一套去中心化的雲服務的雛形。

Docker,微服務的場景化應用

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

在Docker出現之前,雖然我們談論微服務架構,但是其實是很難實現的。

微服務要運行,首先需要一套執行的環境。這套環境不能對外部有依賴性。同時,執行環境的粒度又必須足夠的小,這樣才能稱之為”微“,否則必然是對資源的巨大浪費。一個微服務可以跑在一臺虛擬機上面,但是虛擬機粒度太大,即使最小的虛擬機,也至少也有1個核。

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

Docker出現以後,我們看到了微服務的一個非常完美的運行環境。

獨立性:一個容器就是一個完整的執行環境,不依賴外部任何的東西。

細粒度: 一臺物理機器可以同時運行成百上千個容器。其計算粒度足夠的小。

快速創建和銷燬: 容器可以在秒級進行創建和銷燬,非常適合服務的快速構建和重組。

完善的管理工具: 數量眾多的容器編排管理工具,能夠快速的實現 服務的組合和調度。

除了Docker生態系統之內的一些工具,包括Serf之類的服務自發現技術的發展,可以讓微服務能夠自動化的感知其關聯的其他服務,實現系統的自我構建。我記得2014年早些時候,centurylinklabs裡面有一篇文章,講述瞭如何通過FIG,Serf,HAProxy構建一個自動負載均衡的Docker應用。其實,這篇文章所蘊含的思想,就是一種微服務架構的概念。

去中心化的雲服務

最近一段時間,“場景化”是一個頻繁出現的詞彙。在這裡,我也套用一下這個詞,“什麼是微服務的場景化應用?”。去中心化的雲服務,是一個非常典型的應用場景。

什麼是去中心化的雲服務呢?這裡做一個類比,譬如家裡的供暖,可以採用集中化的供暖方式。由電廠或者鋼鐵廠統一提供供暖服務。當然,也有的家庭自己會建設一套中央空調系統進行供暖。

雲服務,也會有類似的趨勢。目前雲計算的發展比較低級。主要是以託管為主,因此大部分還是中心化的雲服務。隨著雲計算的應用越來越垂直化,必然也會出現越來越多的去中心化的應用場景。

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

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

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

Docker,微服務的場景化應用

一個遊戲架構的應用場景

遊戲是一個比較特殊的行業。在國內,應該是比較早擁抱雲計算的一個行業,但是也是架構相對保守的行業。

大部分的遊戲架構非常簡單。分佈式的架構使用並不是太普遍,大部分是單區單服,一臺強大的機器,運行若干個遊戲服(遊戲世界)。這並不是遊戲架構落後,而是遊戲本身的特點決定的。遊戲一般以遊戲服來劃分,每個遊戲服是一個獨立的遊戲世界。裡面有一定數量的玩家。不能太多,也不能太少(總用戶量一定的情況下,單服人數和總服的數量決定了遊戲收入的最大化),兩個遊戲世界之間,數據不需要互通。因此通常都是一個進程搞定一個遊戲服。

其實這種模式下,微服務也是一個非常好的應用場景。我們知道,遊戲其實有非常複雜的邏輯,譬如有控制人物移動的邏輯,控制道具,控制戰鬥,同時,遊戲中還有成百上千的電腦控制的角色,每個角色都需要有自己智能。為什麼我們不將這些細小的功能通過微服務來實現呢?

譬如遊戲中的一個單獨的怪獸,可以由自己微服務構成的小的自治系統來控制。它可以完全獨立,接收外部信息,做出反應。未來遊戲公司可以複用這些單獨的小系統。換上不同的皮膚,就可以用於不同的遊戲。同時遊戲其他的邏輯,都可以通過一些獨立的微服務來構成。這些微服務可以藉助Docker之類的系統,運行在容器中。能夠快速的自動化的構建出一個完整的遊戲世界。

後記

最近,基於Docker的創業公司不停的湧現,大家一夜之間似乎都在談論Docker。但是我想說的是,Docker只是一項新的技術,消費者只會為服務買單,不會為技術買單。何況,對於圈子之外的大部分的消費者,雲已經是其能理解的技術極限了,再來一個Docker,基本是無法理解的。因此如果想在Docker領域創業。停止談論Docker,思考Docker技術之上的豐富的場景化的應用,才是關鍵。同樣,微服務也只是一種架構思想。基於這種架構所帶來的神奇的應用場景才是未來。

end:如果你覺得本文對你有幫助的話,記得關注點贊轉發,你的支持就是我更新動力。

"

相關推薦

推薦中...