歡迎使用CSDN markdown編輯器

2021-08-01 22:57:43 字數 2217 閱讀 2826

通過虛擬機器建立流程來分析nova原始碼:

【messaging 服務】建立虛機最核心的幾個步驟,這幾個步驟向我們展示了 nova-* 子服務之間的協作的方式,也體現了 openstack 整個系統的分布式設計思想。

1、客戶( openstack 終端使用者,其他程式)向 api(nova-api)傳送請求:「幫我建立乙個虛機」

2、api 對請求做一些必要處理後,向 messaging(rabbitmq)傳送了一條訊息:「讓 scheduler 建立乙個虛機」

scheduler(nova-scheduler)從 messaging 獲取到 api 發給它的訊息,然後執行排程演算法,從若干計算節點中選出節點 a

3、scheduler 向 messaging 傳送了一條訊息:「在計算節點 a 上建立這個虛機」

4、計算節點 a 的 compute(nova-compute)從 messaging 中獲取到 scheduler 發給它的訊息,然後在本節點的 hypervisor 上啟動虛機。

5、在虛機建立的過程中,compute 如果需要查詢或更新資料庫資訊,會通過 messaging 向 conductor(nova-conductor)傳送訊息,conductor 負責資料庫訪問。

同步呼叫和非同步呼叫

cctxt = self.client.prepare(version=version)

cctxt.cast(context, 'build_instances', **kw)

cast表示非同步呼叫, build_instances 是遠端呼叫的方法, kw 是傳遞的引數。引數就是字典型別,沒有複雜物件結構,因此不需要特別的序列化操作。

cctxt.call(context,'***',*parameters)
api 直接呼叫 scheduler 的介面就是同步呼叫。其特點是 api 發出請求後需要一直等待,直到 scheduler 完成對 compute 的排程,將結果返回給 api 後 api 才能夠繼續做後面的工作。

通常採用非同步呼叫的方式,其好處是:

解耦各子服務 :子服務不需要知道其他服務在**執行,只需要傳送訊息給 messaging 就能完成呼叫。

提高效能 :非同步呼叫使得呼叫者無需等待結果返回。這樣可以繼續執行更多的工作,提高系統總的吞吐量。

提高伸縮性 :子服務可以根據需要進行擴充套件,啟動更多的例項處理更多的請求,在提高可用性的同時也提高了整個系統的伸縮性。而且這種變化不會影響到其他子服務,也就是說變化對別人是透明的。

【rpc請求】通常乙個服務的目錄都會包含api.py、rpcapi.py、manager.py,這個三個是最重要的模組。

•api.py: 通常是供其它元件呼叫的庫。換句話說,該模組通常並不會由本模組呼叫。比如compute目錄的api.py,通常由nova-api服務的controller呼叫。

•rpcapi.py:這個是rpc請求的封裝,或者說是rpc實現的client端,該模組封裝了rpc請求呼叫。

•manager.py: 這個才是真正服務的功能實現,也是rpc的服務端,即處理rpc請求的入口,實現的方法通常和rpcapi實現的方法對應。

•cmd:這是服務的啟動指令碼,即所有服務的main函式。看服務怎麼初始化,就從這裡開始。

•db: 封裝資料庫訪問,目前支援的driver為sqlalchemy。

•conf:nova的配置項宣告都在這裡。

•locale: 本地化處理。

•image: 封裝glance呼叫介面。

•network: 封裝網路服務介面,根據配置不同,可能呼叫nova-network或者neutron。

•volume: 封裝資料卷訪問介面,通常是cinder的client封裝。

•virt: 這是所有支援的hypervisor驅動,主流的如libvirt、xen等。

•objects: 物件模型,封裝了所有實體物件的curd操作,相對以前直接呼叫db的model更安全,並且支援版本控制。

•policies: policy校驗實現。

•tests: 單元測試和功能測試**。

原始碼結構

線框圖

呼叫鏈

歡迎使用CSDN markdow

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

歡迎毛毛與妞妞使用CSDN markdown編輯器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

歡迎使用CSDN markdow1n編輯器

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...