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

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

RDS Proxy 概念和術語

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

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

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

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

RDS Proxy 概念概觀

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

每個代理會處理單一RDS資料庫執行個體 的連線。代理會自動判斷RDS多可用區域資料庫執行個體或 clusterAurora 佈建叢集的目前寫入器執行個體

代理保持開啟的連線可供資料庫應用程式使用,以組成連線集區

根據預設,RDSProxy 可以在工作階段中的每個交易之後重複使用連線。此一交易層級重複使用稱為多工。當 RDS Proxy 從連線集區暫時移除連線以重複使用時,該操作稱為借用連線。當安全時,RDSProxy 會傳回連線至連線集區的連線。

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

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

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

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

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

連線集區

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

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

RDS Proxy 安全性

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

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

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

使用 TLS/SSL 搭配 RDS Proxy

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

注意

RDS Proxy 使用來自 AWS Certificate Manager () 的憑證ACM。如果您使用 RDS Proxy,則不需要下載 Amazon RDS憑證或使用 RDS Proxy 連線更新應用程式。

若要TLS強制代理與資料庫之間的所有連線,您可以在 中建立或修改代理時指定需要 Transport Layer Security 的設定 AWS Management Console。

RDS Proxy 也可以確保您的工作階段在用戶端和 RDS Proxy 端點之間使用 TLS/SSL。若要讓 RDS Proxy 這樣做,請在用戶端指定 需求。 SSL工作階段變數不會設定為使用 RDS Proxy SSL連線至資料庫。

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

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

RDS Proxy 支援TLS通訊協定版本 1.0、1.1、1.2 和 1.3。您可以使用TLS比基礎資料庫中使用的更高版本的 連線到代理。

根據預設,用戶端程式會與 RDS Proxy 建立加密連線,並透過 --ssl-mode選項進一步控制。從用戶端,RDSProxy 支援所有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 檔案,PEMs請從 Amazon Trust Services 下載所有根 CA,並將其放入單一.pem檔案。

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

容錯移轉

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

透過代理連線可讓應用程式對資料庫容錯移轉更具彈性。當原始資料庫執行個體無法使用時,RDSProxy 會連接至待命資料庫,而不會捨棄閒置的應用程式連線。這有助於加速和簡化容錯移轉程序。相較於典型的重新開機或資料庫問題,這會對您的應用程式造成較少干擾。

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

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

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

  • 本機DNS快取。

  • 連線逾時。

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

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

對於維護自己的連線集區的應用程式,透過 RDS Proxy 表示大多數連線在容錯移轉或其他中斷期間保持運作。只會取消交易或SQL陳述式中正在進行的連線。 RDSProxy 立即接受新的連線。當資料庫寫入器無法使用時,RDSProxy 會將傳入的請求排入佇列。

對於未維護自己的連線集區的應用程式,RDSProxy 提供更快的連線速率和更多的開放連線。它免除了從資料庫頻繁重新連接的昂貴負荷。它透過重複使用 RDS Proxy 連線集區中維護的資料庫連線來執行此操作。此方法對於TLS連線尤其重要,其中設定成本相當高。

交易

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

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

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

  • 輸入資料定義語言 (DDL) 陳述式會導致交易在該陳述式完成之後結束。

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

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