《Java微服務:實用指南》的 翻譯與改編。指向指南第一部分的連結。 任何伺服器端 Java 程式以及任何微服務都只是一個副檔名為 .jar 或 .war 的檔案。Java 生態系統(或更確切地說JVM)有一個很棒的事情:您只需要編寫一次Java 程式碼,它就可以在幾乎任何作業系統上運行,只要您沒有使用比您的版本更新的Java 版本來編譯程式碼。目標 JVM 版本。理解這一點很重要,尤其是當涉及 Docker、Kubernetes 或(擊鼓!)雲端等主題時。為什麼?讓我們看看不同的部署場景。
簡約 Java 微服務部署範例
讓我們繼續以銀行為例。因此,我們有一個 monobank.jar 檔案(monolith)和新提取的riskengine.jar(第一個風險檢查微服務)。我們還假設這兩個應用程序,就像世界上所有其他應用程式一樣,都需要一個 .properties 檔案。在我們的例子中,它僅包含資料庫 URL 和憑證。最小部署可能包含兩個如下所示的目錄:首先:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar
ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
第二:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar
ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
這就留下了一個懸而未決的問題:.properties 和 .jar 檔案將如何到達伺服器?不幸的是,答案可能有很多。
如何使用建置工具、SSH 和 Ansible 部署 Java 微服務
關於如何部署 Java 微服務的建議很無聊,但同樣出色……實際上,這正是過去 20 年來系統管理員在公司中部署任何 Java 伺服器程式的方式。這是混合:- 你最喜歡的建置工具(Maven、Gradle)
- 很好的舊 SSH/SCP,用於將 .jar 複製到伺服器
- 用於管理部署腳本和伺服器的 Bash 腳本
- 甚至更好:一些 Ansible 腳本。
如何使用Docker部署Java微服務
讓我們回到選擇的甜蜜痛苦。幾年前,Docker 出現了,隨之而來的是容器化。如果您從未使用過它,這裡有一個針對最終用戶和開發人員的簡短描述:- 容器(簡化版)類似於老式的虛擬機,但「更輕」。如果您不清楚「更簡單」在這種情況下的含義,請查看Stackoverflow 上的這個答案。
- 容器保證了自身的可移植性。也就是說,它在任何地方都有效。聽起來很熟悉,不是嗎?
- 將您的 jar 檔案捆綁到 Docker 映像中
- 將此映像推送到私有 Docker 註冊表
- 在您的目標平台上拉取並運行此映像
- 或直接將 Docker 映像複製到生產系統並運行。
如何使用 Docker Swarm 或 Kubernetes 部署 Java 微服務
假設您決定嘗試 Docker。每次部署 Java 微服務時,您都會建立一個捆綁 .jar 檔案的 Docker 映像。假設您有幾個這樣的 Java 微服務,並且您希望將這些服務部署在多台電腦上(在叢集中)。那麼問題來了:如何管理這個叢集?運行 Docker 容器、檢查效能、部署更新、擴充系統 (brrr)?這個問題的兩個可能的答案是 Docker Swarm 和 Kubernetes。詳細介紹這兩個選項會使這個已經很長的教程變得太長,但我們認為重要的是要提到這兩個選項最終都依賴於您編寫 YAML 檔案(請參閱Yaml縮排故事)來管理集群。如果你想知道這在實踐中會引起什麼感受,只需在 Twitter 搜尋中輸入類似的查詢即可。因此,Java 微服務的部署過程現在看起來像這樣:- 配置和管理 Docker Swarm/Kubernetes
- Docker 的所有步驟(見上文)
- 寫作並執行 YAML,
直到你的眼睛流血,直到一切正常。
如何測試 Java 微服務
假設您決定在生產中實施微服務。現在開發過程中如何測試n微服務整合?如何查看整個工作流程(而不僅僅是部分工作流程)是否正常運作?在實踐中,您可以使用以下三種方法之一:- 只需做一點工作(如果您使用的是Spring Boot 等框架),您就可以將所有微服務組合到一個啟動器類中,並使用單個Wrapper.java 類加載所有微服務- 取決於您的計算機上是否有足夠的記憶體來運行你所有的微服務。
- 您可以在本機複製 Docker Swarm 或 Kubernetes 設定。
- 只是不再在本地運行整合測試。相反,部署專用的開發/測試環境。這是很多團隊在屈服於本地微服務設定的痛苦時實際上所做的事情。
GO TO FULL VERSION