具有 Apache Cassandra 的多層式架構 (N-tier) 應用程式

DNS
Load Balancer
監視器
虛擬機器
虛擬網路

此參考架構展示如何在 Linux 上使用 Apache Cassandra 作為資料層,來部署針對多層式架構 (N-Tier) 應用程式設定的虛擬機器 (VM) 和虛擬網路。

架構

此圖顯示使用 Microsoft Azure 的多層式架構。

下載這個架構的 Visio 檔案

工作流程

此架構具有下列元件。

一般

  • 資源群組資源群組可用來將 Azure 資源組合在一起,讓它們可以依存留期、擁有者或其他準則管理。

  • 可用性區域可用性區域 是 Azure 區域內的實體位置。 每個區域都包含一或多個具有獨立電源、冷卻和網路的資料中心。 藉由將 VM 放在各個區域,應用程式就會變成在區域內失敗的復原能力。

網路和負載平衡

  • 虛擬網路和子網路。 每部 Azure VM 都會部署到可以分割成子網路的虛擬網路。 針對每一層建立不同的子網路。

  • 應用程式閘道應用程式閘道是第 7 層負載平衡器。 在此架構中,它會將 HTTP 要求路由傳送至 Web 前端。 應用程式閘道也會提供 Web 應用程式防火牆 (WAF),該防火牆會保護應用程式免於常見惡意探索和弱點。

  • 負載平衡器。 使用Azure Standard Load Balancer將網路流量從 Web 層散發到商務層。

  • 網路安全性群組 (NSG)。 使用 NSG 來限制虛擬網路內的網路流量。 例如,在如下所示的三層式架構中,資料庫層不接受來自 Web 前端的流量,只接受來自 Business 層和管理子網路的流量。

  • DDoS 保護。 雖然 Azure 平臺提供基本保護,以防止分散式阻斷服務 (DDoS) 攻擊,但我們建議使用具有增強 DDoS 防護功能的 Azure DDoS 網路保護。 請參閱 安全性 考慮。

  • Azure DNSAzure DNS 是一個適用於 DNS 網域的主機服務。 其使用 Microsoft Azure 基礎結構來提供名稱解析。 在 Azure 中裝載網域,即可使用與其他 Azure 服務相同的認證、API、工具和計費來管理 DNS 記錄。

虛擬機器

  • Apache Cassandra 資料庫。 藉由啟用複寫和容錯移轉,在資料層提供高可用性。

  • OpsCenter。 部署 DataStax OpsCenter 之類的監視解決方案,以監視 Cassandra 叢集。

  • Jumpbox。 也稱為防禦主機。 網路上系統管理員用來連線到其他 VM 的安全 VM。 Jumpbox 具有 NSG,只允許來自安全清單上公用 IP 位址的遠端流量。 NSG 應該允許遠端桌面 (RDP) 流量。

建議

您的需求可能和此處所述的架構不同。 請使用以下建議作為起點。

虛擬機器

如需設定 VM 的建議,請參閱 在 Azure 上執行 Linux VM

虛擬網路

當您建立虛擬網路時,請判斷您在每個子網路中的資源需要多少個 IP 位址。 使用 CIDR 標記法,針對所需的 IP 位址指定子網路遮罩和夠大的網路位址範圍。 使用落在標準私人 IP 位址區塊內的位址空間,其為 10.0.0.0/8、172.16.0.0/12 及 192.168.0.0/16。

選擇未與您的內部部署網路重迭的位址範圍,以防您稍後需要在 VNet 與內部部署網路之間設定閘道。 一旦建立 VNet 之後,就無法變更位址範圍。

請記得以功能和安全性需求來設計子網路。 位於相同層或角色的所有 VM 都應移入相同的子網路,它可以是安全性界限。 如需設計 VNet 和子網路的詳細資訊,請參閱規劃和設計 Azure 虛擬網路

應用程式閘道

如需設定應用程式閘道的詳細資訊,請參閱應用程式閘道組態概觀

負載平衡器

請勿直接向網際網路公開虛擬機器。 相反地,給每個虛擬機器私人 IP 位址。 用戶端會使用與應用程式閘道相關聯的 IP 位址進行連線。

定義負載平衡器規則,以將網路流量導向至 VM。 例如,若要啟用 HTTP 流量,請建立一個規則,將前端設定的連接埠 80 對應至後端位址集區的連接埠 80。 當用戶端將 HTTP 要求傳送到連接埠 80 時,負載平衡器會藉由使用雜湊演算法 (其中包含來源 IP 位址) 來選取後端 IP 位址。 用戶端要求會散發到所有 VM。

網路安全性群組

使用 NSG 規則來限制各層之間的流量。 例如,在如上所示的三層式架構中,Web 層不會直接與資料庫層通訊。 若要強制執行此動作,資料庫層應該封鎖來自 Web 層子網路的連入流量。

  1. 拒絕來自 VNet 的所有輸入流量。 (在規則中使用 VIRTUAL_NETWORK 標記)。
  2. 允許來自 Business 層子網路的輸入流量。
  3. 允許來自資料庫層子網路本身的輸入流量。 此規則允許資料庫 VM 之間的通訊,是進行資料庫複寫和容錯移轉所需的。
  4. 允許來自 Jumpbox 子網路的 ssh 流量 (連接埠 22)。 此規則讓系統管理員能夠從 Jumpbox 連線到資料庫層。

建立規則 2 – 4,其優先順序高於第一個規則,因此它們會覆寫它。

Cassandra

我們建議針對生產環境使用 DataStax Enterprise,但這些建議適用於所有的 Cassandra 版本。 如需在 Azure 中執行 DataStax 的詳細資訊,請參閱適用於 Azure 的DataStax Enterprise 部署指南

在機架感知的模式中設定節點。 在 cassandra-rackdc.properties 檔案中,將容錯網域對應到機架。

您不需要叢集前方的負載平衡器。 用戶端會直接連線至用戶端中的節點。

此架構的部署腳本會使用名稱解析來初始化叢集內通訊的種子節點, (gossip) 。 若要啟用名稱解析,部署會建立具有 Cassandra 節點 A 記錄的 Azure 私用 DNS 區域。 視您的初始化腳本而定,您可能能夠改用靜態 IP 位址。

注意

Azure Private DNS 目前為公開預覽狀態。

Jumpbox

不允許從公用網際網路對執行應用程式工作負載的 VM 進行 ssh 存取。 對這些 VM 所做的所有 ssh 存取都必須改為透過 Jumpbox 進行。 系統管理員會登入 Jumpbox,然後從 Jumpbox 登入其他 VM。 Jumpbox 允許來自網際網路,但只來自已知且安全 IP 位址的 ssh 流量。

Jumpbox 有最低效能需求,因此選取小的 VM 大小。 針對 Jumpbox 建立公用 IP 位址。 將 Jumpbox 放置於與其他 VM 相同的 VNet,但在個別的管理子網路中。

若要保護 Jumpbox,請新增 NSG 規則,只允許來自一組安全公用 IP 位址的 ssh 連線。 設定其他子網路的 NSG,允許來自管理子網路的 ssh 流量。

考量

延展性

擴展集

針對 Web 和商務層,請考慮使用虛擬機器擴展集,而不是將個別 VM 部署到可用性設定組。 擴展集可讓您輕鬆部署及管理一組完全相同的虛擬機器,並根據效能計量自動調整虛擬機器。 當 VM 上的負載增加時,就會將其他 VM 自動新增到負載平衡器。

有兩種基本方法可用來設定擴展集中部署的 VM:

  • 部署虛擬機器之後,使用擴充功能來設定它。 透過此方法,新的 VM 執行個體可能需要較長的時間來啟動不具擴充功能的 VM。

  • 利用自訂的磁碟映像來部署受控磁碟。 這個選項可能會更快速地部署。 不過,它會要求您讓映像保持最新狀態。

如需詳細資訊,請參閱擴展集的設計考量

提示

使用任何自動調整規模解決方案時,事前也要利用生產層級的工作負載來進行測試。

訂用帳戶限制

每個 Azure 訂用帳戶都已經有預設限制,包括每個區域的 VM 最大數目。 您可以藉由提出支援要求來提高限制。 如需詳細資訊,請參閱 Azure 訂用帳戶和服務限制、配額與條件約束

應用程式閘道

應用程式閘道支援固定容量模式或自動調整模式。 固定容量模式適用於工作負載一致且可預測的案例。 請考慮針對具有可變流量的工作負載使用自動調整模式。 如需詳細資訊,請參閱自動調整和區域備援應用程式閘道 v2

效能效率

若要從 Azure VM 上的 Cassandra 取得最佳效能,請參閱 在 Azure VM 上執行 Apache Cassandra 中的建議。

可用性

可用性區域提供單一區域內的最佳復原能力。 如果您需要更高的可用性,請考慮跨兩個區域複寫應用程式。

並非所有區域都支援可用性區域,並非所有區域都支援所有 VM 大小。 執行下列 Azure CLI 命令,以尋找區域內每個 VM 大小的支援區域:

az vm list-skus --resource-type virtualMachines --zone false --location <location> \
    --query "[].{Name:name, Zones:locationInfo[].zones[] | join(','@)}" -o table

如果您將此架構部署到不支援可用性區域的區域,請將每個層的 VM 放在 可用性設定組內。 相同可用性內的 VM 會部署到多個實體伺服器、電腦架、儲存單位和網路交換器,以進行備援。 擴展集會自動使用放置群組,其可做為隱含的可用性設定組。

部署至可用性區域時,請使用 Azure Load Balancer 的標準 SKU 和 應用程式閘道 的 v2 SKU。 這些 SKU 支援跨區域備援。 如需詳細資訊,請參閱

單一應用程式閘道部署可以執行閘道的多個實例。 針對生產工作負載,至少執行兩個實例。

Cassandra 叢集

針對 Cassandra 叢集,容錯移轉案例取決於應用程式所使用的一致性層級,以及複本數目。 如需 Cassandra 中的一致性層級和使用方式,請參閱 設定資料一致性Cassandra:與仲裁交談的節點數目? Cassandra 中的資料可用性取決於應用程式和複寫機制所使用的一致性層級。 如需 Cassandra 中的複寫,請參閱 NoSQL 資料庫的資料複寫說明

健康狀態探查

應用程式閘道和Load Balancer兩者都使用健康情況探查來監視 VM 實例的可用性。

  • 應用程式閘道一律使用 HTTP 探查。
  • Load Balancer可以測試 HTTP 或 TCP。 一般而言,如果 VM 執行 HTTP 伺服器,請使用 HTTP 探查。 否則,請使用 TCP。

如果探查在逾時期間內無法連線到實例,閘道或負載平衡器就會停止將流量傳送至該 VM。 如果 VM 再次可用,探查會繼續檢查,並將 VM 傳回後端集區。

HTTP 探查會將 HTTP GET 要求傳送至指定的路徑,並接聽 HTTP 200 回應。 此路徑可以是根路徑 ("/"),或是實作一些自訂邏輯來檢查應用程式健康情況的健康情況監視端點。 端點必須允許匿名的 HTTP 要求。

如需健康情況探查的詳細資訊,請參閱:

如需設計健康情況探查端點的考慮,請參閱 健全狀況端點監視模式

成本最佳化

使用 Azure 定價計算機 來預估成本。 以下是一些其他考慮。

虛擬機器擴展集

所有 Linux VM 大小都可以使用虛擬機器擴展集。 您只需要支付您部署的 Azure VM 費用,以及任何額外的基礎結構資源,例如儲存體和網路。 虛擬機器擴展集服務本身沒有累加費用。

如需單一 VM 定價選項,請參閱 Linux VM 定價

負載平衡器

您只需支付已設定的負載平衡和輸出規則數目的費用。 輸入 NAT 規則是免費的。 未設定任何規則時,Standard Load Balancer不需要每小時收費。

如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework 中的成本一節。

安全性

虛擬網路是 Azure 中的流量隔離界限。 某一個 VNet 中的 VM 無法直接與不同 VNet 中的 VM 通訊。 除非您建立網路安全性群組 (NSG) 來限制流量,否則,相同 VNet 中的 VM 可以彼此通訊。 如需詳細資訊,請參閱 Microsoft 雲端服務和網路安全性

針對傳入的網際網路流量,負載平衡器規則會定義哪些流量可以連線到後端。 不過,負載平衡器規則不支援 IP 安全清單,因此,如果您想要將特定的公用 IP 位址新增至安全清單,請將 NSG 新增至子網路。

DMZ。 請考慮新增網路虛擬設備 (NVA),在網際網路和 Azure 虛擬網路之間建立 DMZ。 NVA 是虛擬設備的通稱,可以執行網路相關的工作,例如防火牆、封包檢查、稽核和自訂路由傳送。 如需詳細資訊,請參閱實作 Azure 和網際網路之間的 DMZ

加密。 將機密的待用資料加密,並使用 Azure Key Vault 來管理資料庫加密金鑰。 Key Vault 可以在硬體安全模組 (HSM) 中儲存加密金鑰。 也建議將應用程式密碼 (例如資料庫連接字串) 儲存在金鑰保存庫中。

DDoS 保護。 Azure 平台預設會提供基本的 DDoS 保護。 此基本保護的目標是保護整個 Azure 基礎結構。 雖然會自動啟用基本 DDoS 保護,但我們建議使用 Azure DDoS 網路保護。 網路保護會根據應用程式的網路流量模式使用調適型調整來偵測威脅。 這可讓它針對 DDoS 攻擊套用風險降低措施,這些攻擊可能因整個基礎結構的 DDoS 原則而未被察覺。 網路保護也會透過 Azure 監視器提供警示、遙測和分析。 如需詳細資訊,請參閱 Azure DDoS 保護:最佳做法與參考架構

卓越營運

由於所有主要資源和其相依性都位於此架構中的相同虛擬網路中,因此會在相同的基本工作負載中隔離。 該事實可讓您更輕鬆地將工作負載的特定資源與 DevOps 小組產生關聯,讓小組可以獨立管理這些資源的所有層面。 此隔離可讓 DevOps Teams 和服務執行持續整合和持續傳遞 (CI/CD) 。

此外,您可以使用不同的部署範本,並將其與Azure DevOps Services整合,以在幾分鐘內布建不同的環境,例如,只在需要時複寫生產環境,例如案例或負載測試環境,以節省成本。

在此案例中,您的虛擬機器是使用虛擬機器擴充功能來設定,因為它們提供安裝某些額外軟體的可能性,例如 Apache Cassandra。 特別是,自訂腳本擴充功能允許在虛擬機器上下載和執行任意程式碼,允許無限制地自訂 Azure VM 的作業系統。 VM 擴充功能只會在 VM 建立期間安裝和執行。 這表示如果作業系統在稍後階段設定不正確,則需要手動介入,才能將它移回正確的狀態。 組態管理工具可用來解決此問題。

請考慮使用 Azure 監視器,不需要登入您的虛擬機器即可分析和最佳化基礎結構的效能、監視和診斷網路問題。 Application Insights 實際上是 Azure 監視器的其中一個元件,可提供您豐富的計量和記錄,以驗證完整 Azure 環境的狀態。 Azure 監視器將協助您遵循基礎結構的狀態。

請務必不僅監視支援應用程式程式碼的計算元素,也請務必監視您的資料平臺,特別是您的資料庫,因為應用程式的資料層效能低可能會造成嚴重後果。

為了測試應用程式執行所在的 Azure 環境,它應該透過與應用程式程式碼相同的機制進行版本控制及部署,然後也可以使用 DevOps 測試範例進行測試和驗證。

如需詳細資訊,請參閱 Microsoft Azure Well-Architecture Framework中的營運卓越一節。

下一步