資料庫發展到今天,其高可用性已經變成了人們關心的頭等話題。一個項目(比如一個複雜的、需要頻繁讀寫各種數據的量化交易系統)的數據往往分布在不同的資料庫實例、甚至是不同的數據中心中。多資料庫節點形成的集群可以擴展更多節點,單個節點的失敗往往會導致集群需要重新配置拓撲規則。這就引出了一個問題——應用程序如何知道要訪問哪個資料庫節點?應用程序如何檢測資料庫拓撲已更改?我們如何保護應用程序免受底層資料庫架構複雜性的影響?
不知道從什麼時候開始,「中間人技術」的概念變得很流行,而資料庫環境開始集成代理。這篇文章將會討論什麼是資料庫代理,它們的用途以及如何使用現代代理構建高度可用且高度可控的資料庫環境。
一、什麼是資料庫代理?
代理是處理雙方連接通信的軟體。在資料庫的語境中,代理是位於應用程序和資料庫的中間層。應用程序連接到代理,代理將連接轉發到資料庫。讓我們嘗試分析這個模式,看看使用代理可能會有什麼好處?
對於初學者來說,一個比較大的好處是應用程序僅需要連接代理。在資料庫領域,要確定應該將連接引入何處並不容易。很多資料庫架構存在可寫主庫或是存在集群核心角色的主庫,也有隻讀副本。這種需要複製的拓撲結構不斷發展。Hardcode(「代碼寫死」) 連接模式不是一個好主意。另一方面,編寫代碼來跟蹤拓撲變化需要仔細規劃、設計和測試。這是代理的來源,通過使用代理,應用程序可以連接到它(或代理池),我們希望應用程序能將訪問流量從出現故障的資料庫路由到還正常運行的資料庫。