您可能想要建置單一整合式部署的 Web 應用程式或服務,並將其部署為容器。 應用程式本身可能不是內部整合型,而是結構化為數個連結庫、元件,甚至層(應用層、領域層、數據存取層等等)。 不過,在外部,它是單一容器:單一進程、單一 Web 應用程式或單一服務。
若要管理此模型,您要部署單一容器來代表應用程式。 若要增加容量,您可以使用擴展方式,也就是在負載平衡器之前添加更多的複本。 透過在單一容器或 VM 中管理單一部署來達到簡化的目的。
圖 4-1。 容器化整合型應用程式的架構範例
您可以在每個容器中包含多個元件、連結庫或內部層,如圖 4-1 所示。 單體容器化應用程式將大部分功能集中在單一容器中,包含內部的層級或函式庫,並透過在多部伺服器或虛擬機器上複製容器來進行擴展。 不過,這種整合型模式可能會與容器主體「容器執行一件事,並在一個進程中執行」衝突,但在某些情況下可能沒問題。
如果應用程式成長,此方法的缺點就變得很明顯,因此需要調整它。 如果整個應用程式可以調整規模,就不是問題。 不過,在大部分情況下,應用程式只有少數部分是需要調整的窒息點,而其他元件則較少使用。
例如,在典型的電子商務應用程式中,您可能需要調整產品資訊子系統,因為比購買產品更多的客戶瀏覽產品。 客戶使用購物籃比使用付款管線還多。 較少的客戶新增批注或檢視其購買歷程記錄。 您可能只有少數員工需要管理內容和營銷活動。 如果您調整整合型設計,則會多次部署這些不同工作的所有程序代碼,並以相同的等級進行調整。
有多種方式可以擴展應用程式,如水平擴充、拆分應用程式的不同區域,以及分區類似的業務概念或數據。 但是,除了調整所有元件的問題之外,單一元件的變更還需要完整重新測試整個應用程式,以及完整重新部署所有實例。
不過,整合型方法很常見,因為應用程式開發一開始比微服務方法更容易。 因此,許多組織都會使用此架構方法進行開發。 雖然有些組織有足夠好的結果,但其他組織卻遇到瓶頸。 許多組織都使用此模型設計其應用程式,因為幾年前工具和基礎結構使得建置服務導向架構(SOA)變得太困難了,而且在應用程式成長之前,他們看不到需要。
從基礎結構的觀點來看,每部伺服器都可以在相同主機內執行許多應用程式,並在資源使用量方面具有可接受的效率比例,如圖 4-2 所示。
圖 4-2。 單一體方法:主機上運行多個應用程式,每個應用程式以容器的形式運行。
Microsoft Azure 中的整合型應用程式可以使用每個實例的專用 VM 來部署。 此外,使用 Azure 虛擬機擴展集,您可以輕鬆地調整 VM。 Azure App Service 也可以執行整合型應用程式,並輕鬆地調整實例,而不需要您管理 VM。 自 2016 年以來,Azure App Services 也可以執行 Docker 容器的單一實例,簡化部署。
身為 QA 環境或有限的生產環境,您可以部署多個 Docker 主機 VM,並使用 Azure 平衡器進行平衡,如圖 4-3 所示。 這可讓您使用粗略的方法來管理調整,因為整個應用程式都位於單一容器內。
圖 4-3。 多個主機擴展單一容器化應用程式的範例
您可以使用傳統部署技術來管理部署至各種主機。 Docker 主機可以使用像是 docker run
或 docker-compose
手動執行的命令來管理,或透過自動化來管理,例如持續傳遞 (CD) 管線。
將整合型應用程式部署為容器
使用容器來管理整合型應用程式部署有好處。 調整容器實例的速度比部署其他 VM 更快且更容易。 即使您使用虛擬機擴展集,VM 仍需要時間來啟動。 當部署為傳統應用程式實例而非容器時,應用程式的組態會作為 VM 的一部分進行管理,這並不理想。
將更新部署為 Docker 映射的速度要快得多,而且網路效率很高。 Docker 映像通常能在幾秒內啟動,這可以加速部署。 卸除 Docker 映像實例就像發出 docker stop
命令一樣簡單,而且通常會在不到一秒內完成。
因為容器的設計是不可變的,所以您永遠不需要擔心損毀的 VM。 相反地,VM 的更新腳本可能會忘記考慮磁碟上保留的某些特定組態或檔案。
雖然整合型應用程式可以從 Docker 獲益,但我們只會觸及優點。 管理容器的其他優點來自使用容器協調器進行部署,以管理每個容器實例的各種實例和生命週期。 將整合型應用程式分成可以個別調整、開發及部署的子系統,就是您進入微服務領域的進入點。
將單一容器型應用程式發佈至 Azure App Service
不論您想要取得部署至 Azure 的容器驗證,或當應用程式只是單一容器應用程式時,Azure App Service 都提供絕佳的方法來提供可調整的單一容器型服務。 使用 Azure App Service 很簡單。 它提供與 Git 的絕佳整合,讓您輕鬆取得程式代碼、在 Visual Studio 中建置程式代碼,並將其直接部署至 Azure。
圖 4-4。 從 Visual Studio 2022 將單一容器應用程式發佈至 Azure App Service
如果沒有 Docker,如果您需要 Azure App Service 中不支援的其他功能、架構或相依性,您必須等到 Azure 小組更新 App Service 中的這些相依性。 或者,您必須切換至其他服務,例如 Azure 雲端服務或 VM,您可以在其中進一步控制,並安裝應用程式所需的元件或架構。
Visual Studio 2017 和更新版本中的容器支援可讓您在應用程式環境中包含您想要的任何專案,如圖 4-4 所示。 由於您在容器中執行它,如果您將相依性新增至應用程式,您可以在 Dockerfile 或 Docker 映射中包含相依性。
如圖 4-4 所示,發布流程會透過容器儲存庫推送映像。 這可以是 Azure 容器註冊(位於 Azure 中接近您部署位置的註冊,並由 Azure Active Directory 群組和帳戶保護),或任何其他 Docker 註冊,例如 Docker Hub 或內部部署註冊。