讀古今文學網 > OpenStack系統架構設計實戰 > 10.6 Trove二次開發 >

10.6 Trove二次開發

隨著Trove的不斷發展,已經提供了數據庫即服務的基本功能,基本上能夠滿足小型環境的需求。但是海量數據的發展對數據庫的容量和安全性能提出了越來越高的要求。Trove是基於OpenStack開發的,上述創建數據庫實例的過程可以借鑒過來,根據自身業務的特定需求,對Trove進行二次開發,實現數據庫的一些擴展功能。

下面通過一個二次開發實例,講解如何在原有的Trove基礎上,擴充特定的功能。Trove是在OpenStack的基礎上開發的,並對外提供公開的源碼,如果直接修改源碼,需要對系統的實現邏輯及代碼原理有深入的瞭解,需要的開發驗證維護工作量都非常大。我們可以從另外層面,通過編寫Heat腳本,調用OpenStack和Trove對外提供的接口,實現相應的功能。

1.收集業務需求

得到的需求如下:

1)業務模型需要支持海量數據,並且隨著業務的發展,數據庫會越來越大,要求數據的存儲可擴充。

2)單機數據庫無法滿足數據的安全性要求,在單數據庫節點發生異常時,要有可靠的數據備份。

3)支持海量數據的同時要求支持業務的高並發,單台DB已經無法滿足業務的訪問性能要求,需要實現數據庫的讀寫分離功能,多個數據庫同時對外提供讀寫服務,提高業務的訪問性能。

2.基於Trove需要擴充的功能

1)Trove實現了在雲化環境中,自動化創建數據庫實例和管理數據庫實例的功能。可以在Trove的基礎上,根據業務的需求動態生成多個數據庫實例,以滿足海量數據的存儲。

2)Trove實現了手工的數據庫備份,並且提供了多種方式。但是無法實現數據庫的實時備份,需要在流程中自動生成主備數據庫,並提供自動化的配置,根據業務的需求配置數據同步模式,實現主備數據庫的數據實時同步。

3)基於第二點數據備份的實現,為了提高數據庫系統的並發處理能力,可以通過proxy代理實現數據庫的讀寫分離。多個DB對外提供讀操作,主DB提供寫操作。

在原Trove的架構上,加入了數據庫的主備和讀寫分離功能,如圖10-3所示。

3.具體實現方案

1)增加Manager Server模塊,Manager Server和Trove的API Server對接,調用Trove接口生成數據庫實例。同時Manager Server和OpenStack對接,通過OpenStack接口自動申請DB Proxy節點。

2)增加新的Horizon用戶界面,和Manager Server對接,用戶通過界面可以選擇創建的數據庫類型,包括是否主備複製、主備複製模式、是否需要支持讀寫分離、數據庫實例的配置CPU、內存、存儲等信息。Manager Server根據用戶選擇的實例類型,創建相應的數據庫實例和DB Proxy節點。

3)增加Guest Agent模塊,和DB節點部署在一起,實現數據庫集群的管理。在做數據庫鏡像時,可以提供多種類型鏡像文件,需要數據庫集群管理時,則使用包含Guest Agent的DB鏡像文件生成數據庫實例。

圖10-3 主備和讀寫分離功能

4)新增DB Proxy模塊,DB Proxy模塊實現讀寫分離功能。DB Proxy根據SQL類型分析業務請求的SQL,如果是讀操作則把請求信息下發到備機數據庫實例上;如果是寫操作,則把請求信息下發到主數據庫實例上,從而實現SQL請求的分發。DB Proxy對外提供外網訪問IP,應用程序用這個外網IP訪問數據庫。

通過上面的二次開發,擴展了Trove原有的數據庫基本功能,實現了數據庫主備複製和讀寫分離的功能,從而改變了雲化數據庫單機DB提供服務的情況,提高了數據庫的可靠性和並發性能。我們可以根據自身業務的實際需求,在原Trove的基礎上,增加相應的模塊,實現更多更具擴展性的雲化數據庫系統。