全部產品
Search
文件中心

Enterprise Distributed Application Service:選擇應用部署環境

更新時間:Jun 30, 2024

EDAS支援在ECS叢集和K8s叢集中部署應用,兩種環境都能滿足應用託管的需求,但功能上也存在一定的差異。如果您處於技術選型或架構遷移過程中,對於選擇使用哪種環境來管理應用存在疑惑,本文為您提供一些選擇環境的建議和兩種環境的功能對比,以協助您完成決策。

部署環境簡介

EDAS為應用提供了ECS和K8s兩種叢集部署環境。

  • ECS叢集和K8s叢集都支援Spring Cloud、Dubbo和HSF微服務架構的Java應用的託管、服務治理及可觀測性。

  • 僅K8s叢集支援多語言應用的託管、服務治理及可觀測性。

另外,這兩種部署環境對於應用程式本身和使用者技術棧的要求是不一樣的,且EDAS提供的應用管理能力也有所區別。

部署環境選擇建議

一般情況下,建議使用K8s環境部署應用。EDAS與阿里雲Container ServiceKubernetes版進行了深度整合,提供了豐富的應用管理功能,可以實現更高的資源使用率。

您根據實際使用情境,來選擇合適的環境。

情境

環境

  • 應用的形態為容器鏡像,或者是非Java應用。

  • 對應用有單機多執行個體部署、高密度部署的要求。

  • 希望同時使用K8s來進行管理(如使用kubectl工具),或使用K8s提供的其他功能。

K8s環境

  • 存在大量非容器化應用。

    ECS環境的優勢主要在於對非容器化部署的應用更加友好,更容易複用存量應用營運體系。

  • 對單體效能和穩定性有極高要求的應用。

ECS環境

說明

如果您已經使用了ECS環境來管理應用,現在需要使用K8s提供的進階功能,可以將應用遷移至K8s環境。

應用託管功能對比

下表列出了ECS環境和K8s兩個環境的功能對比,Y代表支援,N代表不支援。

功能

ECS環境

K8s環境

備忘

部署應用

Y

Y

K8s環境支援更豐富的執行個體調度策略,支援單機多部署。

啟動應用

Y

Y

停止應用

Y

Y

刪除應用

Y

Y

應用擴縮容

Y

Y

重設應用

Y

N

K8s環境無需此功能,刪除Pod即為重設。

容器升降級

Y

Y

應用復原

Y

Y

自動水平擴容

Y

Y

支援方式和規則有所區別。

定時彈性

N

Y

分批部署

Y

Y

應用分組

Y

N

應用分組配置

Y

N

即時日誌

Y

Y

日誌目錄

Y

Y

SLS日誌

Y

Y

負載平衡

Y

Y

健全狀態檢查

Y

Y

K8s環境支援Readiness和Liveness探針,與ECS環境不同。

JVM參數配置

Y

Y

Tomcat配置

Y

Y

生命週期掛鈎

Y

Y

K8s環境支援PostStart和PreStop掛鈎,與ECS不同。

環境變數

Y

Y

金絲雀發布(灰階發布)

Y

Y

流量監控

Y

Y

限流降級

Y

Y

K8s環境可實現無侵入接入。

服務列表查詢

Y

Y

配置推送

Y

Y

事件中心

Y

Y

通知警示

Y

Y

應用診斷

Y

Y

K8s(Kubernetes)具備更為強大的一體化監管控與診斷能力。

資源代購

Y

N

服務網格

N

Y

鏡像部署支援

N

Y

多語言支援

N

Y

NAS支援

N

Y

常見問題

ECS環境能否支援單節點部署多應用執行個體?

不支援,如有此需求,請使用K8s環境。

ECS環境能否支援部署多語言應用?

不支援,如有此需求,請使用K8s環境。

ECS環境和K8s環境對應的OpenAPI介面是否相同?

ECS環境和K8s環境是否都支援使用開發人員工具?

都支援,但配置有所區別,需要注意區分。

ECS和K8s環境是否都支援雲效?

K8s環境如何?節點資源的代購擴容?

K8s環境對應的Auto Scaling功能是指Pod的Auto Scaling,正常情況下不會購買新的ECS執行個體(節點),也不會釋放已有的執行個體(節點)。

可以配合Container Service提供的功能來實現節點的Auto Scaling。

如果使用ECS環境的掛載指令碼功能,如何遷移至K8s環境?

ECS應用的掛載指令碼用於在發布單執行到特定階段時執行指定的命令,目前有4個生命週期階段可供掛載,分別是準備執行個體、啟動應用、停止應用和銷毀執行個體。

由於K8s環境提供的生命週期掛鈎僅限於PostStart和PreStop,與ECS應用無法完全對應,因此在遷移使用了掛載指令碼功能的應用到K8s環境時,需要做一定的修改。

  • 準備執行個體階段前的掛載指令碼,可以將其編排到Dockerfile,並固定到鏡像中。

  • 啟動應用階段前的掛載指令碼,也可以將其編排到Dockerfile,並固定到鏡像中。

    Pod的準備執行個體與啟動應用是一個過程。

  • 啟動階段後的掛載指令碼,可以配置到PostStart掛鈎中。

  • 停止執行個體階段前的掛載指令碼,可以配置到PreStop掛鈎中。

  • 停止執行個體階段後的掛載指令碼,建議在應用進程的優雅停止過程中做清理工作(比如在Java的ShutdownHook或者其他對於sigterm訊號的監聽流程中做清理),也可以視情況將其移動到PreStop掛鈎中處理。

  • 銷毀執行個體階段前的掛載指令碼,建議在應用進程的優雅停止過程中做清理工作(比如在Java的ShutdownHook或者其他對於sigterm訊號的監聽流程中做清理),也可以視情況將其移動到PreStop掛鈎中處理。

    Pod的銷毀執行個體與停止執行個體是一個過程。