當前位置:
首頁 > 最新 > OpenStack資料庫遠程對象模型

OpenStack資料庫遠程對象模型

在OpenStack的各個服務之間有些資料庫對象是遠程操作的,遠程對象所實現的效果是:一個 A 服務中的遠程對象實例,可以由消息隊列傳送到B 服務,B 服務能夠使用這個實例,當調用實例的方法時,實際執行這個方法卻是在A 服務中。

以Instance類的實例為例,nova-conductor在收到創建虛擬機請求時生成了實例instance=Instance(),之後將instance這個資料庫對象通過消息隊列發送到了nova-compute,在nova-compute進行虛擬機創建的過程中,經常性地需要更改虛擬機的狀態,所以經常出現類似這樣的語句:

nova-compute不直接訪問資料庫,這個save() 方法,就是由nova-conductor來執行的。

具體原理

以instance的save()方法為例,有一個@base.remotable修飾

(objects/instance.py ),

remotable的定義如下,根據indirection_api的定義情況:如果有定義indirection_api,則把save()方法作為一個參數fn來運行indirection_api.object_action,如果沒有定義則運行save()。

(dist-packages/oslo_versionedobjects/base.py),

indirection_api在nova-compute服務中有賦值,而其他服務中沒有:

(cmd/compute.py )

所以:

nova-compute運行instance.save()時是把save方法以及save的參數作為參數去運行indirection_api.object_action,而其他服務則是直接運行save()。

而indirection_api.object_action的具體實現就是消息隊列的call方法。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 虛擬化雲計算 的精彩文章:

TAG:虛擬化雲計算 |