我已經研究了微服務的概念了好一會兒了,並且瞭解他們是,爲什麼他們是必要的。微服務在實踐中
快速複習
簡而言之,整體應用程序分解爲獨立的部署單元,每個通常暴露出它自己的網絡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設置負載平衡器,因爲它有自己的路由網格?那麼哪個節點最終用戶應該瞄準?
這個問題很可能將被關閉的範圍過寬,這是。你可能想谷歌「容器編排」和研究像Kubernetes和馬拉松。 – mustaccio