RDS Proxy 概念和術語 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

RDS Proxy 概念和術語

您可以使用 RDS Proxy 來簡化 Amazon RDS 資料庫執行個體的連線管理。

RDS Proxy 處理用戶端應用程式與資料庫之間的網路流量。它以主動方式達成此功能,首先了解資料庫協定,然後根據據應用程式的 SQL 操作和資料庫中的結果集調整其行為。

RDS Proxy 減輕了資料庫連線管理的記憶體和 CPU 負荷。當應用程式同時開啟許多連線時,資料庫需要的記憶體和 CPU 資源比較少。它關閉並重新開啟長時間閒置的連線時,也不需要依據應用程式的邏輯。同樣地,當資料庫發生問題時,重新建立連線需要的應用程式邏輯也比較少。

RDS Proxy 的基礎設施具備高度可用性,並可部署到數個可用區域 (AZ) 上。RDS Proxy 的運算、記憶體和儲存體獨立於 RDS 資料庫執行個體 。這種分離有助於降低資料庫伺服器的負荷,使它們可以投入資源來服務資料庫工作負載。RDS Proxy 運算資源可在無伺服器的狀態下執行,根據您的資料庫工作負載自動擴展。

RDS Proxy 概念概觀

RDS Proxy 運用基礎設施來執行連線集區以及以下各節描述的其他功能。您可以在代理頁面上看到 RDS 主控台中所代表的代理。

每個代理處理與單一 RDS 資料庫執行個體 的連線。Proxy 會自動決定 RDS Multi-AZ 資料庫執行個體的目前寫入器執行個體。

Proxy 保持開啟且可供資料庫應用程式使用的連線組成連線集區

根據預設,RDS Proxy 可以在工作階段中的每一筆交易結束之後重新使用連線。此一交易層級重複使用稱為多工。當 RDS Proxy 從連線集區暫時移除連線以重複使用時,該操作就是所謂的借用連線。在這麼做是安全的情況下,RDS Proxy 會將該連線傳回至連線集區。

在某些情況下,RDS Proxy 無法確定在目前工作階段之外重複使用資料庫連線是否安全。這時,它會讓工作階段保持在同一連線上,直到該工作階段結束。這種回復行為稱為鎖定

代理具有預設端點。當使用 Amazon RDS 資料庫執行個體時,您會連線到此端點。您會這樣做,而不是連線到直接連線至執行個體的讀取/寫入端點。對於 RDS 資料庫叢集,您也可以建立其他讀取/寫入和唯讀端點。如需詳細資訊,請參閱 代理端點概觀

例如,您仍然可以連線到叢集端點以進行讀取/寫入連線,而不需要連線集區。您仍然可以連線至讀取器端點,以進行唯讀連線的負載平衡。您仍然可以連線到執行個體端點,以便對叢集內的特定資料庫執行個體進行診斷和疑難排解。如果您使用其他 AWS 服務 (例如 AWS Lambda 連線至 RDS 資料庫),請變更其連線設定以使用 Proxy 端點。例如,您可以指定代理端點,以允許 Lambda 函數存取您的資料庫,同時利用 RDS Proxy 功能。

每個代理都包含一個目標群組。此目標群組體現了代理可連線的 RDS 資。與代理相關聯的 RDS 資料庫執行個體 稱為該代理的目標。為了方便起見,當您透過主控台建立代理伺服器時,RDS Proxy 也會建立對應的目標群組,並自動註冊關聯的目標。

引擎系列是一組使用相同資料庫協定的相關資料庫引擎。您可以為您建立的每一個代理選擇引擎系列。

連線集區

每個 Proxy 都會針對其相關聯 RDS 資料庫的寫入器執行個體執行連線集區。連線集區是一種最佳化,可以減輕開啟和關閉連線,以及保持許多連線同時開啟的相關負荷。此一負荷包含處理每個新連線所需的記憶體。它還涉及關閉每個連線和開啟新連線的 CPU 額外負荷。範例包括 Transport Layer Security/Secure Sockets Layer (TLS/SSL) 交握、身分驗證、協商功能等。連線集區簡化了應用程式的邏輯。您不需要撰寫應用程式碼,以便同時開啟的連線數降到最低。

每個 Proxy 也會執行連線多工,又稱為連線重用。RDS Proxy 運用「多工」,使用一個基礎資料庫連線執行一筆交易的所有操作。然後,RDS 可以使用不同的連線處理下一筆交易。您可以同時開啟到代理的多個連線,代理則使較少的資料庫執行個體或叢集連線保持開啟。這樣做可以進一步減輕資料庫伺服器上連線的記憶體負荷。此技術也可以降低發生「連線數太多」錯誤的可能性。

RDS Proxy 安全性

RDS Proxy 會使用現有的 RDS 安全機制,例如 TLS/SSL 和 AWS Identity and Access Management (IAM)。如需這些安全功能的一般資訊,請參閱 Amazon RDS 中的安全。此外,請務必熟悉 RDS 如何使用身分驗證、授權和其他安全領域。

RDS Proxy 可以充當用戶端應用程式和基礎資料庫之間的額外安全層。例如,即使基礎資料庫執行個體支援舊版 TLS,您也可以使用 TLS 1.3 連線到代理伺服器。您可以使用 IAM 角色連線到代理。即使代理使用原生使用者和密碼身分驗證方法來連線至資料庫,仍然如此。您可以使用這種技術,強制資料庫應用程式執行嚴格的身分驗證要求,而無需在資料庫執行個體上進行昂貴的遷移工作。

您可以將 RDS 代理使用的資料庫認證儲存在中 AWS Secrets Manager。代理伺服器存取的 RDS 資料庫執行個體 的每個資料庫使用者都必須在 Secret Manager 中具有對應的密碼。您也可以為 RDS Proxy 的使用者設定 IAM 身分驗證。如此一來,即使資料庫仍使用原生密碼身分驗證,您也可以對資料庫存取強制執行 IAM 身分驗證。與其將資料庫登入資料嵌入在應用程式的程式碼中,建議您使用這些安全功能。

搭配 RDS Proxy 使用 TLS/SSL

您可以使用 TLS/SSL 通訊協定連線到 RDS Proxy。

注意

RDS 代理伺服器會使用來自 AWS Certificate Manager (ACM) 的憑證。如果您正在使用 RDS Proxy,您不需要下載 Amazon RDS 憑證或更新使用 RDS Proxy 連線的應用程式。

若要針對 Proxy 和資料庫之間的所有連線強制執行 TLS,您可以在中建立或修改 Proxy 時指定「需要傳輸層安全性」設定 AWS Management Console。

RDS Proxy 也能確保您的工作階段在用戶端與 RDS Proxy 端點之間使用 TLS/SSL。若要讓 RDS Proxy 執行此作業,請在用戶端指定需求。SSL 工作階段變數不會針對使用 RDS Proxy 之資料庫的 SSL 連線進行設定。

  • 若為 RDS for MySQL,請在執行 mysql 命令時,使用 --ssl-mode 參數在用戶端指定需求。

  • 若為 Amazon RDS PostgreSQL,請在執行 psql 命令時,指定 sslmode=require 做為 conninfo 字串的一部分。

RDS 代理伺服器支援 TLS 通訊協定 1.0、1.1、1.2 和 1.3 版本。您可以使用比基礎資料庫中所使用之 TLS 更新的版本連線至代理。

根據預設,用戶端程式會使用 RDS Proxy 建立加密連線,並且可透過 --ssl-mode 選項取得進一步的控制。RDS Proxy 在用戶端支援所有 SSL 模式。

針對用戶端,SSL 模式如下:

PREFERRED

SSL 為第一個選擇,但並非必要。

DISABLED

不允許任何 SSL。

REQUIRED

強制採用 SSL。

VERIFY_CA

強制採用 SSL 並驗證憑證授權單位 (CA)。

VERIFY_IDENTITY

強制採用 SSL 並驗證 CA 和 CA 主機名稱。

在搭配 --ssl-mode VERIFY_CAVERIFY_IDENTITY 使用用戶端時,請指定指向 --ssl-ca 格式 CA 的 .pem 選項。對於要使用的 .pem 檔案,請從 Amazon Trust Services 下載所有根 CA PEM 並將它們放入單一 .pem 檔案。

RDS Proxy 使用萬用字元憑證,這些憑證同時適用於網域及其子網域。如果您使用 mysql 用戶端來利用 SSL 模式 VERIFY_IDENTITY 連接,則目前必須使用 MySQL 8.0 相容的 mysql 命令。

容錯移轉

容錯移轉是一種高可用性功能,當原始執行個體無法使用時,用另一個來取代該資料庫執行個體。發生容錯移轉可能是因為資料庫執行個體發生問題。它也可能是正常維護程序的一部分,例如在資料庫升級期間。容錯移轉適用於多可用區域組態中的 RDS 資料庫執行個體。

透過 Proxy 連線可讓您的應用程式對資料庫容錯移轉更具彈性。當原始資料庫執行個體無法使用時,RDS Proxy 會連線至待命資料庫,而不會捨棄閒置的應用程式連線。這有助於加速並簡化容錯移轉程序。與典型的重新啟動或資料庫問題相比,這對應用程式的干擾程度較小。

如果沒有 RDS Proxy,容錯移轉將導致短暫的執行中斷。在中斷期間,您無法在容錯移轉中對資料庫執行寫入作業。任何現有的資料庫連線都會中斷,您的應用程式必須將其重新開啟。當提升唯讀資料庫執行個體,以取代無法使用的執行個體時,該資料庫將可使用於新連線和寫入操作。

在資料庫容錯移轉期間,RDS Proxy 繼續接受位於相同 IP 地址的連線,並自動將連線導向至新的主要資料庫執個體。透過 RDS Proxy 連線的用戶端不會受到下列項目影響:

  • 容錯移轉時的網域名稱系統 (DNS) 傳播延遲。

  • 本機 DNS 快取。

  • 連線逾時。

  • 不確定哪個資料庫執行個體是目前的寫入器。

  • 等候來自已不可使用,卻未關閉連線的前寫入器的查詢回應。

對於自行維護連線集區的應用程式而言,經歷 RDS Proxy 意味著大部分的連線在容錯移轉或其他中斷期間保持活動狀態。只會取消處於交易或 SQL 陳述式中間的連線。RDS Proxy 會立即接受新的連線。當資料庫寫入器無法使用時,RDS Proxy 會將傳入的請求排入佇列。

對於不自行維護連線集區的應用程式,RDS Proxy 提供了更快的連線速率和更多的開放連線。它免除了從資料庫頻繁重新連接的昂貴負荷。它會重複使用 RDS Proxy 的連線集區中維護的資料庫連線,而達成此功能。此方法對於 TLS 連線來說尤其重要,因為設定成本很大。

交易

單一交易中的所有陳述式總是使用相同的基礎資料庫連線。當交易結束時,連線將可提供給不同的工作階段使用。使用交易做為粒度單位會產生下列後果:

  • 開啟 RDS for MySQL autocommit 設定時,連線可能會在每一個別陳述式之後重複使用。

  • 相反地,autocommit 設定關閉時,您在工作階段中發出的第一個陳述式會開始新的交易。例如,假設您輸入一連串的 SELECTINSERTUPDATE 和其他資料操作語言 (DML) 陳述式。在此情況下,直到您發出 COMMITROLLBACK 或以另外方式結束交易之前,都不會重複使用連線。

  • 輸入資料定義語言 (DDL) 陳述式將使交易在陳述式完成後結束。

RDS Proxy 透過資料庫用戶端應用程式使用的網路協定偵測交易何時結束。交易偵測並不依賴 SQL 陳述式的文字中出現的 COMMITROLLBACK 等關鍵字。

在某些情況下,RDS Proxy 可能會偵測到資料庫要求,使得將工作階段移到不同的連線變得不切實際。這時,它會在剩餘的工作階段關閉該連線的多工功能。如果 RDS Proxy 無法確定多工在此工作階段中實際可行,則適用相同的規則。此操作稱為鎖定。如需偵測和最小化鎖定的方法,請參閱 避免鎖定