Trove系列(二)—Trove 的架構和流程介紹

Trove主要邏輯目前Trove支持用戶建立一個數據庫服務實例,在實例裏能夠建立多個數據庫並進行管理。數據庫服務實例目前經過Nova API來建立,而後一樣經過Nova API建立一個Volume(將來經過Cinder API)做爲存儲,而後在Nova Instance里加載預約義的帶有MySQL的Image來啓動MySQL。此時用戶在獲得一個建立好的數據庫服務實例之後能夠經過API建立數據庫並 且指定參數,Trove經過在數據庫服務實例裏的guest agent來完成相應的命令。下圖是Trove處理請求的最主要流程。圖1 Trove處理請求的主要流程
Trove的當前架構圖2 Trove的當前架構說明
trove-api
提供REST風格的API,支持json和xml,程序源代碼入口在trove/cmd/api.py。API server與兩個組件通訊,全部複雜的異步任務它都交給taskmanager去完成,有些信息它會直接從trove的後端DB中得到。 根據其配置文件api-paste.ini,能夠看到起最終APP的入口是:trove/common/api.py,這就是整個trove除了version和extension外全部資源對象操做的總入口。在API類中明肯定義了url和處理的controller的路由關係,很是的清晰。 trove-taskmanager
負責配置數據庫虛擬機實例,管理數據庫虛擬機實例的生命週期和執行這對數據庫虛擬機實例的各類操做.監聽消息隊列服務器的RPC service,程序源代碼入口在trove/cmd/taskmanage.py。須要特別注意:trove-taskmanager是一個有狀態的服務,它負責組織複雜的業務流程。若是在有狀態的處理流程當中,taskmanager掛了,則任務就被認爲失敗。 trove-guestagent
運行於數據庫虛擬機實例的內部,負責管理和實際執行對數據庫管理程序的任務。guestagent在消息總線上監聽RPC消息,執行要求的操做。程序源代碼入口在trove/cmd/guest.py。每一種數據庫都有與之對應的不一樣的guestagent,顯而易見,redis的guestagent和mysql的guestagent的行爲不多是同樣的。
trove-conductor
負責從guestagents收集狀態信息而後將其寫入Trove的後端數據庫,其與guestagent交互基於RPC實現。這個組件的引入就是爲了實現這樣的目的,即db instance內的gusestagent不該直接與trove的後端數據庫相連。程序源代碼入口在trove/cmd/conductor.py。從目前的代碼看,這個組件就兩個功能函數:
def heartbeat(self, context, instance_id, payload, sent=None)上報DBinstance的心跳和狀態信息,如NEW to BUILDING to ACTIVEdef update_backup(self, context, instance_id, backup_id, sent=None, **backup_fields)更新當前backup的狀態信息,如當前狀態,已備份的大小,類型和校驗狀況。
Trove規劃中的改進架構將Trove-conductor做爲訪問trove後端數據庫的惟一入口,全部模型的數據庫CRDU操做都依靠他來完成。OpenStack不少服務組件都有這樣的設計傾向,如nova,都想將db的操做隔離出來,這樣作的好處是能夠將服務的後端DB與應用層隔離,後端DB能夠運行在另外一個網絡中,實現網絡隔離,除conductor外的全部組件都不能直接訪問到DB所在的網絡。
Trove API初步解讀下表列出了Trove 主要的API:mysql

API解讀:1.這裏的datastore和datastore_version是指存儲數據的數據庫管理程序和它的版本。例如trove如今支持的數據庫管理程序有MySQL、cassandra、mongodb,datastore就是指的是這些。而datastore_version是指這些數據庫管理程序的版本,例如5.1,仍是5.5之類的。這裏能夠看到對於datastore和datastore_version,只有查詢操做,這也是很正常的,對於DBaaS的服務來講,也只能支持指定的若干數據庫類型。這兩個resource用來在create db instance的時候供用戶選擇。
2.flavor是從nova中獲取的預先設定好的幾種虛擬機規格,只提供查詢操做,供用戶選擇。
3.configuration是指數據庫程序配置文件中一堆的配置項,這些配置項由key-value的形式組成;而configuration_parameter是對配置項key的詳細信息的記錄,它包括配置參數的默認值、是否應該配置、是否能夠動態生效以及數據類型是什麼。 4.從API咱們能夠看到security group的操做中沒有建立操做,這是由於數據庫安全組的目前的設計原則決定的。trove對於security group的目前的設計是:每一個數據庫實例對應一個安全組,用戶不能直接操做安全組,只能添加或刪除安全組的規則。將來這個設計可能改變,同時會在加入默認的安全規則集。 5.數據庫日誌文件能夠被保存並上傳到swift上。redis

相關文章
相關標籤/搜索