本文是關於以 PHP 撰寫的電子商務平臺 Magento 的開放原始碼版本。 本文與 Adobe Commerce 不相關。 此範例案例顯示已部署至 Azure Kubernetes Service (AKS) 的 Magento,並說明在 Azure 上裝載 Magento 的常見最佳做法。
架構
下載此架構的 Visio 檔案。
工作流程
- Azure Kubernetes Service (AKS) 在不同的 Pod 中部署 Varnish、Magento、Redis 和 Elasticsearch 的 Kubernetes 叢集。
- AKS 會 建立虛擬網路 來部署代理程序節點。 事先建立虛擬網路,以設定子網組態、私人鏈接和輸出限制。
- Varnish 會在 HTTP 伺服器前面安裝,以作為完整頁面快取。
- 適用於 MySQL 的 Azure 資料庫 儲存交易數據,例如訂單和目錄。 建議使用8.0版。
- Azure 檔案儲存體 Premium、Azure NetApp Files 或對等的網路連接記憶體 (NAS) 系統會儲存媒體檔案,例如產品映像。 Magento 需要 Kubernetes 相容的文件系統,其可以在 ReadWriteMany 模式中掛接磁碟區,例如 Azure 檔案儲存體 Premium 或 Azure NetApp Files。 Azure Kubernetes Service (AKS) 中應用程式的記憶體選項。 強烈建議您測試每秒的輸入/輸出作業 (IOPS) 輸送量,並選擇適合您的選項。
- 內容傳遞網路 (CDN) 提供靜態內容,例如 CSS、JavaScript 和影像。 透過CDN提供內容可將使用者與資料中心之間的網路等待時間降至最低。 CDN 可以藉由快取和提供靜態內容,從 NAS 移除大量負載。
- Redis 會儲存會話數據。 基於效能考慮,建議在容器上裝載 Redis。
- AKS 會使用 Microsoft Entra ID 身分識別來建立和管理其他 Azure 資源,例如 Azure 負載平衡器、用戶驗證、角色型訪問控制和受控識別。
- Azure Container Registry 會儲存部署至 AKS 叢集的私人 Docker 映射。 您可以使用其他容器登錄,例如 Docker Hub。 預設Magento安裝會將一些秘密寫入映像。
- Azure 監視器 會收集並儲存計量和記錄,包括 Azure 服務平臺計量和應用程式遙測。 Azure 監視器會與 AKS 整合,以收集控制器、節點和容器計量,以及容器和主要節點記錄。
元件
- Azure Kubernetes Service (AKS):調整受控 Kubernetes 服務上的容器。
- Azure 虛擬網絡:雲端中的虛擬網路。
- 適用於 MySQL 的 Azure 資料庫:雲端中的 MySQL 具有成本效益且易於設定、操作及調整。
- Azure 檔案儲存體:雲端中的檔案共用。 此解決方案會使用進階層。
- Azure NetApp Files:由 NetApp 提供的企業級 Azure 檔案共用。
- Azure 內容傳遞網路:快速、可靠且全域的內容傳遞網路。
- Microsoft項目標識碼:多重雲端身分識別和存取管理。
- Azure Container Registry:D ocker 和 Open Container Initiative (OCI) 映射的登錄,支援所有 OCI 成品。
- Azure 監視器:應用程式的端對端可檢視性、基礎結構和網路
案例詳細資料
如需Magento的詳細資訊,請參閱 內部部署安裝概觀。
潛在使用案例
該解決方案針對零售業進行了最佳化。
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
安全性
以下是此案例的一些安全性考慮:
設定 MySQL 的私人連結,讓用戶端與 MySQL 之間的流量不會公開至公用因特網。 如需詳細資訊,請參閱什麼是 Azure Private Link。
您可以新增 Azure 應用程式閘道 輸入以支援安全套接字層 (SSL) 終止。
您也可以啟用 Azure Web 應用程式防火牆 與 應用程式閘道,以協助保護流量進入裝載於 AKS 叢集中的 Web 應用程式。
角色型存取控制 (RBAC)
Kubernetes 和 Azure 都有角色型存取控制 (RBAC) 的機制。
Azure RBAC 可控制對 Azure 資源的存取,包括建立資源的能力。 Azure RBAC 可以將許可權指派給使用者、群組或服務 主體,這是應用程式所使用的安全性身分識別。
Kubernetes RBAC 控制 Kubernetes API 的許可權。 例如,建立 Pod 和列出 Pod 是 Kubernetes RBAC 可以授權給用戶的動作。
AKS 整合 Azure 和 Kubernetes RBAC 機制。 若要將 AKS 許可權指派給使用者,請建立 角色 和 角色系結:
角色是在命名空間內套用的一組許可權。 許可權會定義為Pod或部署等資源的動詞、更新、建立或刪除。
角色系結會將使用者或群組指派給角色。
ClusterRole 物件會定義適用於所有命名空間的整個 AKS 叢集的角色。 若要將使用者或群組指派給 ClusterRole,請建立 ClusterRoleBinding。
或者,您可以使用 適用於 Kubernetes 授權的 Azure RBAC,以跨 Azure 資源、AKS 和 Kubernetes 資源進行統一管理和存取控制。
當您建立 AKS 叢集時,您可以將它設定為使用 Microsoft Entra ID 進行使用者驗證。
如需如何設定Microsoft Entra 整合的詳細資訊,請參閱 AKS 管理的 Microsoft Entra 整合。
如需使用 Kubernetes RBAC 和 Microsoft Entra 身分識別來控制叢集資源存取的詳細資訊,請參閱 搭配使用 Kubernetes RBAC 搭配 Microsoft Entra ID。
延展性
有數種方式可將此案例的延展性優化:
媒體和靜態檔案
適當地布建 Azure 檔案儲存體、Azure NetApp Files 或其他網路連接記憶體 (NAS) 系統。 Magento 可以儲存數千個媒體檔案,例如產品影像。 請務必布建具有足夠每秒輸入/輸出作業的 NAS 產品,以處理需求。
將靜態內容的大小降到最低,例如 HTML、CSS 和 JavaScript。 縮減可以降低頻寬成本,併為使用者提供更響應的體驗。
資料庫連線
開啟 MySQL 資料庫的持續性連線 ,因此 Magento 會持續重複使用現有的連線,而不是為每個要求建立新的連線。 若要開啟持續性連線,請將下列這一行新增至
db
Magento env.php 檔案的區段:'persistent' => '1'
如果 MySQL 耗用太多 CPU,請在 Magento 設定中關閉分層導覽中的產品計數,以減少使用率:
magento config:set -vvv catalog/layered_navigation/display_product_count 0
快取功能
設定 適用於 PHP 程式代碼快取和優化的 OPcache 。
請確定下列指示詞已在 php.ini中設定和取消批註:
opcache.enable=1
opcache.save_comments=1
opcache.validate_timestamps=0
藉由在 Pod 上執行多個實例來平衡 Varnish 快取 的負載,以便調整它。
記錄
限制存取記錄,以避免效能問題,並防止公開敏感數據,例如用戶端IP位址。
使用下列 Varnish 命令將記錄限制為錯誤層級:
varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"
如果您使用 Apache 網頁伺服器進行輸入,請將下列這一行新增至 Apache 伺服器組態中的 Magento
VirtualHost
專案,將 Apache 記錄限制為錯誤層級:CustomLog /dev/null common
關閉 PHP-FPM 存取記錄,方法是批注化
access.log
所有 PHP-FPM 組態中的設定。
可用性
請考慮下列方式來優化此案例的可用性:
健康情況探查
Kubernetes 定義兩種類型的健康情況探查:
- 整 備探查 會告知 Kubernetes Pod 是否準備好接受要求。
- 即時性探查會告知 Kubernetes 是否應該移除 Pod,以及啟動新的實例。
自定義 Kubernetes 健康情況探查,並使用它們來判斷 Pod 是否狀況良好。
可用性區域
可用性區域 是 Azure 區域內的唯一實體位置,可協助保護應用程式和數據免於資料中心失敗。 每個區域由一或多個數據中心組成。 即使單一數據中心發生實體失敗,區域中的應用程式仍可維持可用狀態。
AKS 叢集可以部署到多個 可用性區域,以提供更高的可用性層級,並防範硬體故障或計劃性維護事件。 定義叢集節點集區以跨越多個區域可讓節點繼續運作,即使單一區域關閉也一樣。 如需將 AKS 部署至 可用性區域 的詳細資訊,請參閱建立使用可用性區域的 AKS 叢集。
資源限制
資源爭用可能會影響服務可用性。 定義容器資源條件約束,使任何單一容器都無法讓叢集記憶體和 CPU 資源無法負荷。 您可以使用 AKS 診斷來識別叢集中的任何問題。
使用資源限制來限制容器所允許的資源總數,因此一個特定的容器無法耗盡其他容器。
DevOps
以下是此案例的一些作業考慮:
在此案例中,MySQL 不會公開公用端點。 如果組建伺服器將組態設定儲存至後端 MySQL 資料庫,請務必將該伺服器部署到 MySQL 透過服務端點連線到的相同虛擬網路子網中。
使用 Azure Container Registry 或其他容器登錄,例如 Docker Hub 來儲存部署至叢集的私人 Docker 映像。 AKS 可以使用其 Microsoft Entra 身分識別,透過 Azure 容器登錄進行驗證。
監視
Azure 監視器為所有 Azure 服務提供重要計量,包括來自 AKS 的容器計量。 建立儀錶板以一個位置顯示所有計量。
除了使用適用於容器的 Azure 監視器,您現在還可以使用 Prometheus 的受控服務,透過 Prometheus 相容的監視解決方案大規模收集及分析計量。
您也可以使用 Azure Managed Grafana(或自我管理 Grafana)將 Prometheus 計量可視化。 當您使用 Azure 受控 Grafana 時,將 Azure 監視器工作區連線到 Azure 受控 Grafana 工作區可讓 Grafana 使用 Grafana 儀錶板中的 Azure 監視器工作區數據。 接著,您可以存取多個使用 Prometheus 計量的預先建置儀錶板,您也可以建立自定義儀錶板。
效能測試
使用 Magento Performance Toolkit 進行效能測試。 此工具組會使用 Apache JMeter 來模擬客戶的行為,例如登入、瀏覽產品及簽出。
您也應該考慮使用 Azure 負載測試,這是一項完全受控的負載測試服務,可讓您產生大規模的負載。 透過 Azure 負載測試,您可以使用 URL 快速建立 Web 應用程式的負載測試。 或者,針對更進階的負載測試案例,您可以重複使用現有的 JMeter 測試腳本來建立負載測試。
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化支柱的概觀。
根據效能測試進行容量規劃。
使用 Azure 定價計算機來預估成本。
請參閱 Azure 良好架構架構中Microsoft成本優化原則中的其他成本考慮。