“Don’t Reinvent the Wheel”
- 消息總線
- OpenStack遵循的設計原則
- Openstack oslomessaging庫
-
- 遠端過程調用RPCRemote Procedure Call
- 事件通知Event Notification
-
- SQLAlchemy和資料庫
- SQLAlchemy Core
- SQLAlchemy ORM
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