2016-12-02 57 views
6

我已經研究了微服務的概念了好一會兒了,並且瞭解他們是,爲什麼他們是必要的。微服務在實踐中

快速複習

簡而言之,整體應用程序分解爲獨立的部署單元,每個通常暴露出它自己的網絡API,並有它自己的數據庫。每項服務都履行一項責任,並做得很好。這些服務通過REST或SOAP等同步Web服務進行通信,或使用異步消息傳遞(如JMS)協同處理某些請求。我們的龐大應用程序已經成爲分佈式系統。通常,所有這些細粒度的API都可通過API網關或代理服務器提供,該代理服務器用作單點入口外觀,執行安全和監視相關任務。

適應微服務主要原因是高可用性,零停機時間更新,並經由特定服務的水平縮放來實現高性能,並在系統中更鬆散的耦合,這意味着易於維護。此外,IDE功能,構建和部署過程將顯着加快,並且更容易更改框架甚至語言。

微服務齊頭並進聚類和集裝箱技術,如多克。每個微服務都可以作爲碼頭容器打包,以便在任何平臺上運行它。集羣的主要概念是服務發現,複製,負載均衡容錯。 Docker Swarm是一個集羣化工具,它協調這些集裝箱化服務,將它們粘合在一起,並以聲明方式處理所有這些任務,從而保持集羣的理想狀態。

聽起來很簡單,並在理論上很簡單,但我還是不明白如何在實踐中實現這一點,即使我知道泊塢羣相當不錯。我們來看一個具體的例子。

這裏的問題

我建立與春天引導一個簡單的Java應用程序,通過的MySQL數據庫支持。我想建立一個系統,用戶從服務A獲得一個網頁並提交一個表單。 服務A會做一些操縱數據並把它發送到服務B,這將進一步操縱數據,寫入到數據庫中,返回的東西,並在端部一些響應被髮送回用戶。

現在的問題是,服務A不知道去哪裏找服務B,也不服務B知道在哪裏可以找到數據庫(因爲他們可以在集羣中的任何節點進行部署) ,所以我不知道如何配置Spring啓動應用程序。首先想到的是使用DNS,但是我找不到教程如何在Docker羣中設置這樣的系統。在Spring中爲分佈式雲部署配置連接參數的正確方法是什麼?我研究了Spring Cloud項目,但不明白它是否是這個困境的關鍵。

我也糊塗了數據庫應如何部署。他們應該生活在集羣中,與服務(可能與碼頭工人撰寫的援助)一起部署,還是更與固定IP的更傳統的方式來管理他們呢?

最後一個問題是關於負載均衡。如果每個服務應該有多個負載均衡器,或者只有一個主負載均衡器,我很困惑。負載均衡器是否應將靜態IP映射到域名,並且所有用戶請求都以該負載均衡器爲目標?如果負載平衡器失敗了,難道不是所有的努力來擴大服務的意義?是否有必要使用Docker Swarm設置負載平衡器,因爲它有自己的路由網格?那麼哪個節點最終用戶應該瞄準?

+0

這個問題很可能將被關閉的範圍過寬,這是。你可能想谷歌「容器編排」和研究像Kubernetes和馬拉松。 – mustaccio

回答

2

如果你正在尋找使用泊塢羣,你不必擔心DNS配置,因爲它已經被覆蓋網絡進行處理。比方說,你有三個服務:

一個 乙 Ç

A是你的數據庫,B可能是第一個服務來收集數據,和C收到該數據並更新數據庫(A)

docker network create \ 
    --driver overlay \ 
    --subnet 10.9.9.0/24 \ 
    youroverlaynetwork 

docker service create --network youroverlaynetwork --name A 
docker service create --network youroverlaynetwork --name B 
docker service create --network youroverlaynetwork --name C 

一旦所有的服務都建立可以參考彼此直接通過名稱

這些請求負載反對的所有副本平衡該覆蓋網絡上的容器。所以總是可以通過引用「http://b」或只是通過調用主機B.

當你處理負載平衡泊塢獲得B中的IP,一個羣服務已經負載內部平衡。一旦你定義了一個監聽端口8018的服務,所有的主機將監聽端口8018,並以循環方式將其路由到一個容器。

它是靜止的,但是,有一個應用負載平衡器最佳實踐坐在主機前在主機發生故障的情況下。

+0

酷,我不知道你可以只HTTP到容器名稱,IMO搬運工團隊應該使這更清晰的文檔,因爲它是這樣一個基本的概念,我變得瘋狂試圖重新創造那個。無論如何,如果我想爲外部客戶端公開某些服務,總是需要代理嗎?域名是否應該指向這個代理?我需要API網關之類的東西嗎? –

+0

您並不總是需要負載平衡器或代理,這是最佳實踐。由於所有Swarm主機都會監聽發佈的地址,因此您可以非常輕鬆地進行DNS負載平衡。只需要四個相同名稱的A記錄。這樣做的缺點是,如果其中一臺主機出現故障,客戶可能會遇到延遲,因爲解決方案成功,但主機不響應。 – Dockstar

+0

另外,我同意文檔。當我部署一些微服務時,我偶然發現它。我無法找到一個做傳統碼頭鏈接的方法,然後通過危險嘗試服務名稱。繁榮,它的作品。還有一個浮動IP地址分配給覆蓋網絡上的服務,您可以通過檢查泊塢窗服務找到該服務 – Dockstar