1. 程式人生 > >Openstack通用技術

Openstack通用技術

“Don’t Reinvent the Wheel”

1. 訊息匯流排

OpenStack遵循的設計原則:

  • 專案之間通過RESTful API通訊
  • 專案內部,不同的服務程序的通訊,必須通過訊息匯流排
    這樣既可以保證各專案對外提供服務的介面可以被不同的客戶端高效支援,
    又可以保證專案內部通訊介面的可擴充套件性和可靠性,
    以支援大規模的部署。

Openstack oslo.messaging庫

實現了兩種方式來完成專案內部各服務程序之間的通訊

遠端過程呼叫(RPC,Remote Procedure Call)

一個服務程序可以呼叫其他遠端服務程序的方法
- call

:遠端方法會被同步執行,呼叫者會被阻塞直到結果返回
- cast:遠端方法被非同步執行,結果不會立即返回,呼叫者也不會阻塞,但是呼叫結果需要呼叫者通過其他方式查詢

事件通知(Event Notification)

  • 某個服務程序可以把事件通知傳送到訊息匯流排
  • 訊息總線上所有對此事件感興趣的服務程序都可以貨值此事件通知,並可以進行進一步處理,處理結果並不會返回給事件傳送者
  • 這種通訊方式,不但可以在同一個專案內部的各個服務程序中傳送通知,也可以實現跨專案之間的通知傳送。

2. SQLAlchemy和資料庫

SQLAlchemy是Python語言對資料庫操作的一個庫。
提供了SQL工具包以及物件關係對映器(Object Relation Mapper,ORM)。

SQLAlchemy庫包括兩部分,core 和ORM

SQLAlchemy Core

包括SQL語言表示式、資料引擎、連線池等。用於連結不通型別的後臺資料庫、提交查詢和更新SQL請求去後臺執行、定義資料庫資料型別和定義Schema等。

SQLAlchemy ORM

提供資料對映模式,吧程式語言的物件資料對映成資料庫中的關係資料,或者把關係資料對映成物件資料

  • 在openstack中,有大量的資料需要後臺資料庫儲存維護,比如虛機的狀態和各種監控資料;MySQL和Postgresql等多種資料庫都可以作為openstack後臺資料庫,操作資料庫的類封裝都用到了SQLAlchemy,程式碼都儲存在各個專案的db
    目錄下。