Azure 容器應用程式上的 Java 概觀
Azure 容器應用程式可以在雲端中執行任何容器化 Java 應用程式,同時提供部署應用程式的彈性選項。
針對容器化 Java 應用程式使用容器應用程式時,您會獲得:
符合成本效益的調整:使用使用量方案時,您的 Java 應用程式可以調整為零。 當應用程式的需求少時縮減,會自動降低專案的成本。
部署選項:Azure 容器應用程式與 Buildpacks (英文) 整合,可讓您透過成品檔案或使用您自己的 Dockerfile 直接從 Maven 組建進行部署。
自動調整記憶體 (預覽):容器應用程式可將 Java 虛擬機器 (JVM) 管理記憶體 的方式最佳化,讓您的 Java 應用程式有最多記憶體可使用。
組建環境變數 (預覽):您可以設定自訂機碼值組,以從原始程式碼控制 Java 映像組建。
本文詳述您在 Azure 容器應用程式上建置 Java 應用程式時需要知道的資訊。
部署類型
執行容器化應用程式通常表示您必須為應用程式建立 Dockerfile,但在容器應用程式上執行 Java 應用程式會提供一些選項。
類型 | 描述 | 使用 Buildpacks | 使用 Dockerfile |
---|---|---|---|
原始程式碼組建 (部分機器翻譯) | 您可以從原始程式碼直接部署至容器應用程式。 | 是 | No |
成品組建 (部分機器翻譯) | 您可以建立 Maven 組建以部署至容器應用程式 | 是 | No |
Dockerfile | 您可以手動建立 Dockerfile,並完全掌控部署。 | No | .是 |
注意
Buildpacks 部署支援 JDK 版本 8、11、17 和 21。
應用程式類型
不同的應用程式類型會實作為個別容器應用程式或容器應用程式工作 (部分機器翻譯)。 使用下表可協助您決定最適合您案例的應用程式類型。
下表所列的範例不是要鉅細靡遺,而是為了協助您更好地了解不同應用程式類型的意圖。
類型 | 範例 | 實作為... |
---|---|---|
Web 應用程式和 API 端點 | Spring Boot、Quarkus、Apache Tomcat 和 Jetty | 個別容器應用程式 |
主控台應用程式、排程工作、工作執行器、批次工作 | SparkJobs、ETL 工作、Spring Batch 工作、Jenkins 管線工作 | 容器應用程式工作 |
偵錯
當您在容器應用程式上偵錯 Java 應用程式時,請務必檢查 Java 同處理序代理程式 (部分機器翻譯) 是否有記錄資料流和主控台偵錯訊息。
疑難排解
當您開發 Java 應用程式時,請記住下列項目:
預設資源:依預設,應用程式有一半的 CPU 和 1 GB 可用。
無狀態處理序:隨著容器應用程式縮減和擴增,新處理序即會建立並關閉。 務必事先規劃,以便將資料寫入共用儲存體,例如資料庫和檔案系統共用。 請勿預期任何直接寫入容器檔案系統的檔案都可供任何其他容器使用。
調整為零是預設值:如果您需要確保應用程式的一或多個執行個體持續執行,請確定您定義調整規則以最符合您的需求。
非預期的行為:如果您的容器應用程式無法建置、啟動或執行,請驗證您的容器中已正確設定成品路徑。
Buildpack 支援問題:如果您的 Buildpack 不支援相依性或所需的 Java 版本,請建立自己的 Dockerfile 來部署您的應用程式。 您可以檢視範例 Dockerfile (英文) 來參考。
SIGTERM 和 SIGINT 訊號:根據預設,JVM 會處理
SIGTERM
和SIGINT
訊號,而且不會將它們傳遞至應用程式,除非您攔截這些訊號並據以處理應用程式中的訊號。 容器應用程式會同時使用SIGTERM
和SIGINT
來進行流程控制。 如果您未擷取這些訊號,且應用程式意外終止,除非您將這些訊號保存到儲存體,否則可能會遺失訊號。存取容器映像:如果您使用成品或原始程式碼部署結合預設登錄,您就沒有容器映像的直接存取權。
監視
所有標準可檢視性工具 (部分機器翻譯) 都可搭配您的 Java 應用程式使用。 建置 Java 應用程式以在容器應用程式上執行時,請記住下列項目:
計量:Java 虛擬機器 (JVM) 計量對於監視 Java 應用程式的健康情況和效能而言非常重要。 收集的資料包括記憶體使用量、廢棄項目收集、JVM 執行緒計數的深入解析。 您可以檢查計量 (部分機器翻譯),以協助確保應用程式的健康情況和穩定性。
記錄:將應用程式和錯誤訊息傳送至
stdout
或stderror
,使得它們可以出現在記錄資料流中。 使用熱門記錄服務時,避免直接記錄至容器的檔案系統時很常見。效能監控設定:將效能監控服務部署為容器應用程式環境中的個別容器,使得它可以直接存取您的應用程式。
診斷
Azure 容器應用程式專為 Java 開發人員提供內建的診斷工具。 此支援可簡化在 Azure 容器應用程式上執行的 Java 應用程式的偵錯和疑難排解,以提升效率並簡化。
- 動態記錄器層級:讓您存取和檢查不同層級的記錄詳細資料,而不需修改程式碼,或強制重新啟動應用程式。 您可以檢視設定動態記錄器層級 (部分機器翻譯) 來參考。
調整大小
如果您需要確定來自前端應用程式的要求會到達相同伺服器,或前端應用程式分割在多個容器之間,請務必啟用黏性工作階段。
安全性
Container Apps 運行時間會為您在 Container Apps 環境內終止 TLS/SSL。
記憶體管理
若要協助最佳化 Java 應用程式中的記憶體管理,您可以確保應用程式中已啟用 JVM 記憶體調整 (英文)。
記憶體是以 Gi 和 CPU 核心數目的組合來測量。 下表顯示容器應用程式可用的資源範圍。
臨界值 | CPU 核心 | 記憶體 (以 Gi 為單位) |
---|---|---|
最小值 | 0.25 | 0.5 |
最大值 | 4 | 8 |
核心以 0.25 個核心為增量提供,記憶體以 2:1 比率提供。 例如,如果您需要 1.25 個核心,容器應用程式可以使用 2.5 Gi 的記憶體。
注意
對於使用 JDK 版本 9 和更低版本的應用程式,請務必定義自訂 JVM 記憶體設定,以符合 Azure 容器應用程式中的記憶體配置。
Java 元件支援
Azure Container Apps 支援下列 Java 元件作為受控服務:
Eureka Server for Spring:服務註冊和探索是維護即時應用程式執行個體清單的重要需求。 您的應用程式會使用此清單來路由和負載平衡輸入要求。 手動設定每個用戶端需要時間,因此可能引進人為錯誤。 Eureka Server 藉由作為服務登錄 (部分機器翻譯) 來簡化服務探索的管理,其中的微服務可以自行註冊,並探索系統內的其他服務。
Config Server for Spring:Config Server 為分散式系統提供集中式外部組態管理。 此元件旨在解決在雲端原生環境中跨多個微服務管理組態設定 (部分機器翻譯) 的挑戰。
Spring 的閘道:Spring 的閘道提供有效率且功能強大的方式,可在微服務架構中路由、管理及處理 API 要求。 其可作為 API 閘道 ,將外部要求路由傳送至不同的服務,並新增各種功能,例如篩選、負載平衡等等。
Admin for Spring:Admin for Spring 受控元件提供系統管理介面,專為具有執行器 (Actuator) 端點的 Spring Boot Web 應用程式所設計。 受控元件可讓您將容器應用程式繫結至 Admin for Spring 元件,以提供容器應用程式的整合和管理。