使用端對端安全性、監視和自動化進行調整
在設計應用程式時,我們需要判斷如何適應工作負載中的變更、從非預期的失敗復原、將安全性風險降到最低等等。 雖然一個可能從試驗和錯誤方法開始,這需要時間遠離其他組織目標,並可能對我們的聲譽產生負面影響。 Azure 提供從頭開始取得專案所需的架構指引。 您也擁有建置可調整應用程式所需的一切-從最先進的安全性和自動調整,到支援數據、傳訊、快取、效能監視和自動化的服務。 其中許多支援服務也以熱門的開放原始碼軟體為基礎,例如PostgreSQL、Redis、JMS和 Kafka,因此您不會鎖定至專屬解決方案。
現在讓我們看看一些重要的 Azure 服務和功能,以及如何將它們用於建置可調整的 Java 應用程式。
擴充 Java 應用程式的功能 - 資料庫和傳訊
除了提供數個選項來執行 Java 程式代碼之外,Azure 還提供廣泛的完全受控服務來支援您的資料庫需求,包括 適用於 PostgreSQL 的 Azure 資料庫、適用於 MySQL 的 Azure 資料庫、MongoDB Atlas、Azure Cosmos DB、Azure SQL 資料庫 和Azure SQL 受控執行個體。 傳訊也是如此,其中包含 Azure 服務匯流排、Azure 事件中樞 和 Apache Kafka for Confluent Cloud 的選項。
Azure 服務匯流排 進階層支援 JMS,Java 傳訊服務程序設計模型。 無論您的應用程式是在 VM、Kubernetes 或完全受控 PaaS 服務上執行,您都可以使用開放原始碼用戶端、Azure Java SDK、Spring 入門和應用程式伺服器整合,快速布建和使用這些完全受控的數據和傳訊服務。 它們都提供您預期來自 Microsoft 和 Azure 的合規性、可用性和可靠性保證。 許多 Java 和 Spring 開發人員都想要使用慣用的連結庫來簡化其慣用雲端服務的連線。 Microsoft維護完整的連結庫、驅動程式和模組清單,可讓您輕鬆地跨數據、傳訊、快取、記憶體、事件、目錄和秘密管理與 Azure 服務互動。 如需詳細資訊,請參閱 Spring Cloud Azure 開發人員指南。
此圖列出 Spring Cloud Azure 的功能和相關聯的 Azure 服務。
此圖顯示各種 Java 連結庫、驅動程式和 Spring 模組所支援的功能類別和相關聯的 Azure 平台服務。
零信任 - 安全網路
您可以在 Azure 虛擬網絡 中部署 Java 應用程式,這是 Azure 中專屬專用網的基本建置組塊。 虛擬網路可讓許多類型的 Azure 資源安全地彼此通訊、與因特網,以及與內部部署網路和系統通訊。 您可以使用虛擬網路來隔離您的應用程式和支援後端服務與因特網,並將其放在您的專用網路上。 您可以完全控制應用程式和後端系統的輸入和輸出。
Azure Container Apps 登陸區域加速器的圖表。
零信任 - 安全通訊端對端
實作安全通訊作為解決方案架構的一部分可能具有挑戰性。 許多公司會手動輪替憑證或建置自己的解決方案,以自動化布建和設定。 即便如此,仍有數據外泄風險,例如未經授權的複製或數據傳輸。
透過 Azure,您可以在任何通訊點保護通訊端對端或終止傳輸層級安全性。 您也可以針對保護通訊所需的所有 Azure 資源,將布建和設定自動化。
根據「永不信任、永遠驗證和無認證」的原則,零信任 藉由消除未知和非受控憑證來協助保護所有通訊,並且只信任在授與這些憑證存取權之前驗證身分識別所共享的憑證。 您可以使用任何類型的 TLS/SSL 憑證,包括證書頒發機構單位簽發的憑證、延伸驗證憑證、支援任意數目子域的通配符憑證,或用於開發和測試環境的自我簽署憑證。
Java 或 Spring Boot 應用程式可以從 Azure 金鑰保存庫 安全地載入憑證(接下來討論)。 使用 Azure 金鑰保存庫,您可以控制憑證的儲存和散發,以減少意外外洩。 應用程式和服務可以使用受控識別、角色型訪問控制和最低許可權原則安全地存取憑證。 此安全載入是使用 Azure 金鑰保存庫 JCA (Java Cryptography Architecture) 提供者提供電源。
零信任 - 管理秘密
許多 Java 應用程式會使用 URL 和認證來連線到支援服務, 資訊,如果公開,則可用來取得未經授權的敏感數據存取權。 基於許多原因,將這類資訊內嵌在應用程式本身會產生巨大的安全性風險,包括透過程式代碼存放庫進行探索。 許多開發人員會使用環境變數將這類認證外部化,讓多個應用程式可以載入它們,但這只會將程式代碼本身的風險轉移至執行環境。
標題為「零信任 - 使用 Azure 金鑰保存庫 管理秘密」的圖表,並包含本節所述的功能摘要。
Azure 金鑰保存庫 提供更安全且更安全的方式來保護秘密。 它可讓您使用角色型 存取控制 (RBAC) 和限制存取權的最低許可權原則,完全控制應用程式秘密的儲存和散發。 您可以控制應用程式秘密 - 只要將許可權授與應用程式,即可視需要使用它們。 在應用程式啟動時,在授與秘密存取權之前,應用程式會使用 Azure RBAC 向 Microsoft Entra ID 和 Azure 金鑰保存庫 授權進行驗證。 Azure 金鑰保存庫 包含完整的稽核功能,並具有兩個服務層級:標準,使用軟體密鑰加密,以及進階層,其中包括硬體安全性模組 (HSM) 保護的密鑰。
使用者驗證和授權
大部分的企業 Java 應用程式都需要使用者驗證和授權,您可以使用Microsoft Entra ID 來實作此標識碼,這是具有整合式安全性的完整身分識別和存取管理解決方案。 用戶帳戶可以是來自Facebook、Twitter或 Gmail 的組織身分識別或社交身分識別,Microsoft Entra ID 和 Azure Active Directory B2C。 您可以使用適用於 Java 的 Microsoft 驗證連結庫或適用於 Microsoft Entra 的 Spring Boot Starter,實作 Microsoft Entra 型解決方案。 您也可以使用您選擇的任何身分識別提供者,例如 ForgeRock、Auth0、Ping 或 Okta。
端對端監視
透過 Azure,您可以使用任何工具和平臺,端對端監視 Java 應用程式。 或者,您可以使用 Azure 監視器的功能 Application Insights 來實作完全受控的原生監視,包括應用程式效能監視(APM)。 它提供 Java、Spring 和 Micrometer 和 Spring Boot 等架構的強烈支援,可讓您快速找出並針對問題進行疑難解答。 功能包括即時計量串流、要求速率和回應時間追蹤、事件追蹤,以及外部相依性速率 -- 您需要監視在 Azure 或內部部署上執行的 Java 應用程式可用性、效能、可靠性和使用量。
您可以藉由匯總Log Analytics中的記錄和計量來監視端對端,這是 Azure 入口網站中的工具,可用來編輯及執行 Azure 監視器中記錄和計量數據的查詢。 您可以撰寫可傳回一組記錄的查詢,然後使用Log Analytics來排序、篩選和分析記錄。 或者,您可以撰寫更進階的查詢來執行統計分析,並將圖表中的結果可視化,因為可能需要識別特定趨勢。 無論您是以互動方式處理查詢的結果,或將其與其他 Azure 監視器功能搭配使用,例如記錄查詢警示或活頁簿,Log Analytics 都是用來撰寫和測試查詢的好工具。
也就是說,我們發現將 Java 應用程式帶到 Azure 的客戶可能會想要繼續使用他們用來監視其內部部署應用程式的相同 APM 工具。 為了支援此使用方式,我們與 New Relic、AppDynamics、Dynatrace 和 Elastic 合作,將其監視解決方案與 Azure App 服務 和 Azure Container Apps 整合。 監視代理程式會與您的程式代碼並存執行,我們會為您安裝並保留代理程式更新。 當您部署至 Azure Container Apps、Azure Kubernetes Service 或 虛擬機器 時,您可以與您的應用程式一起執行其中任何一個代理程式(包括 New Relic、AppDynamics、Dynatrace、Elastic 和 Datadog),但您必須自行安裝及管理它們。 同樣地,您可以匯總 Elastic 和 Splunk 中的記錄和計量,以端對端監視。
標題為「使用任何工具和平台監視端對端」的圖表、範例螢幕快照,以及本文所述工具的標誌。
我們也瞭解許多客戶想要繼續使用 Grafana 來查詢、可視化、警示及瞭解其計量。 因此,我們與 Grafana Labs 合作提供 Azure 受控 Grafana,這是一項完全受控的服務,可讓客戶在 Azure 上原生執行 Grafana。 此服務可讓您輕鬆地部署安全且可調整的 Grafana 實例,並將其連線至開放原始碼、雲端和第三方數據源,以進行視覺效果和分析。 此服務已針對 Azure 監視器和 Azure 數據總管等 Azure 原生數據源進行優化,其中包含應用程式效能監視 (APM) 與 Azure 計算服務整合,例如 Azure App 服務、Azure Container Apps、Azure Kubernetes Service、Splunk、Datadog 和 Azure 虛擬機器。
使用快取加速 Java 應用程式
隨著 Java 應用程式的工作負載成長,您可以使用 Azure Cache for Redis 來實作記憶體內部快取層,以取得查詢結果、工作階段狀態和靜態內容,以提升效能。 這是改善應用程式輸送量並減少延遲,而不需要重新架構基礎資料庫的絕佳方式。 與 Redis 合作開發的 Azure Cache for Redis 企業層,並由 Microsoft 完全管理,是可在 Azure 上執行 Redis 的最高可用性且可調整的部署選項,包括主動式異地復寫、外部化會話管理,以及高速搜尋和編製索引等功能。
圖表,標題為「使用 Redis 快取加速及調整 Java 應用程式規模」,並包含本節中所述功能的摘要。
自動縮放
所有執行 Java 應用程式的 Azure「計算」服務都支援自動調整(自動調整),這可協助您將成本效益最大化,並適應變更工作負載,而不需支付比您需要更多的容量費用。 啟用之後,您可以放心自動調整會負責基礎結構和應用程式工作負載。
圖表,標題為「使用自動調整來提升應用程式的使用率」,並包含本節中所述功能的摘要。
您可以根據負載或排程自動相應縮小或相應放大。 在以負載為基礎的 (或以計量為基礎的) 模式中,您的應用程式會水準向外延展至處理負載所需的資源,最多可達您設定的限制。 同樣地,當負載降低時,資源會水平相應縮小,永遠不會低於您設定的最小值。
在以排程為基礎的模式中,您的應用程式會根據定義的排程和限制相應縮小和相應放大。 排程型模式適用於遵循可預測模式的工作負載,而且可用來建立基準,以取得更多以負載為基礎的調整。
從想法到生產環境的自動化
當您將應用程式移至雲端時,您想要自動執行所有專案,以在企業級進行 Java 開發。 您必須考慮自動調整以處理應用程式工作負載,如先前所述。 但您也需要整體調整和自動化雲端環境,最好從想法到生產環境,包括如何快速布建測試、QA、生產、藍綠部署、地理擴充等新環境。
此圖顯示 [布建]、[建置] 和 [部署] 類別的方塊,其中包含本節所述工具的相關標誌。
Azure 可讓您使用各種工具和平臺,從想法自動化到生產環境。 概括而言,這類自動化管線可細分為三個類別:
布建管線 - 您可以視需要使用 Terraform、Azure Resource Manager (ARM) 範本、Bicep 範本或 Azure CLI 布建 Azure 資源,以建立可重複的腳本,以一致向上旋轉和旋轉環境。
建置管線 - 根據 Maven 或 Gradle 等工具,如本檔稍早所述。
部署管線 - 您可以使用 GitHub Actions、Azure Pipelines、Jenkins Pipelines、GitLab Pipelines 或 Azure CLI 將程式代碼部署自動化,包括部署程式代碼更新時將重要系統保留在生產環境的藍/綠部署。
繼續使用現有的做法和系統
當您在 Azure 上移轉或建置並調整 Java 應用程式時,可以使用您在網路、監視、自動化、身分識別提供者、內部部署系統、開發和建置工具和應用程式連結庫方面的現有投資。 下表提供一些範例:
類別 | Java 生態系統產品和服務 |
---|---|
網路 | F5、Palo Alto、Cloudflare、Checkpoint、Infoblox |
監視 | New Relic、Dynatrace、AppDynamics、Elastic、Splunk |
自動化 | GitHub Actions、Azure Pipelines、Jenkins、GitLab |
身分識別提供者 | Microsoft Entra ID、ForgeRock、Auth0、Ping、Okta |
內部部署系統 | 資料庫(例如 Oracle DB 或 IBM DB2)、傳訊(例如 IBM MQ 或 TIBCO EMS)、事件(例如 Kafka)、目錄(例如Microsoft Entra ID、OpenLDAP 或 IBM ID) |
開發工具 | IntelliJ、Visual Studio Code、Eclipse、Spring Tool Suite、Maven、Gradle |
參考架構
Azure 架構中心提供使用已建立模式和做法在 Azure 上建置解決方案的指引,包括如何使用這些功能。 這些參考架構是以我們從客戶參與中學到的內容為基礎,考慮到成本優化、營運卓越、效能效率、可靠性、延展性、安全性、監視、煙霧測試等等。 它們也會因應解決方案設計元件,例如 Azure 登陸區域 -- 環境,這些環境可用來裝載透過基礎結構即程式代碼預先布建的工作負載,以在企業級啟用 Java 應用程式移轉和綠地開發。
例如,以下是 適用於 Azure Container Apps 的登陸區域加速器,示範如何實作中樞和輪輻設計,其中 Azure Container Apps 部署在單一輪輻中,而該輪輻相依於裝載於中樞的共用服務。 此專案是使用元件所建置,以在 Microsoft Azure Well-Architected Framework 中達成原則。 若要探索此架構的實作,請參閱 GitHub 上的 Azure Container Apps 登陸區域加速器 存放庫。 您可以將相同的方法套用至任何部署至任何 Azure「計算」目的地的 Java 應用程式,例如 Azure App 服務 或 Azure Kubernetes Service。 此外,如果您要考慮將現有的 Java 應用程式移轉至 Azure,我們有一組完整的移轉指南和建議策略。
圖表,標題為「使用端對端安全性調整、監視和自動化」,以及本文所述工具的標誌。