common library in nova (1


本文轉載至www.x9byod.com


nova中把通用的功能模塊放在openstack/common下,實現了很多基本的常用功能,比如log,time,包引用等等;這個模塊與其它模塊高度獨立,因此可以被很容易的被各個模塊,甚至其它工程複用。這裏介紹openstack比較常用和重要的幾個模塊:

  • db

nova數據庫默認採用的後臺是sqlalchemy,common/db實現了抽象的DBAPI類,所有對數據庫的操作都通過DBAPI來代理。DBAPI只是一個簡單的wrapper,真正的實現由它的初始話參數backend_mapping來決定。nova裏採用的默認值爲“{‘sqlalchemy’: ‘nova.db.sqlalchemy.api’}”,也就是說,db的後臺實現在目錄nova/db/sqlalchemy下。nova.db.sqlalchemy.api中實現了所有對數據庫操作函數的封裝,任何一個對數據庫狀態有修改的函數,都可以在這裏找到對應的數據庫更新函數。數據庫的表定義在nova.db.sqlalchemy.models中。

  • log

nova的log可以認爲是對python標準庫裏logging函數的封裝和增強。它根據配置文件,對輸出的內容,級別,格式以及輸出目的進行控制。同時,配合gettextutils模塊,log還支持多語言的數據

  • gettextutils

是對gettext工具的封裝,用來提供多語言的輸出。典型用法也是通過_(“index message id”)來提供不同語言的輸出。gettextutils提供兩種模式,如果用普通模式(非lasy),會調用gettext模塊中translation的ugettext直接翻譯輸出。如果用lazy模式,_會返回一個Message對象,只有在訪問Message對象的str或者unicode方法時,纔會從po文件裏查找對應的翻譯內容。

  • service

簡單說就是把函數或者可執行程序放在後臺執行。服務有launch函數啓動,有兩種啓動方式:一是直接在thread裏執行,另一個是創建子進程執行。nova中service的實現在nova.service中,由cmd下的all.py來啓動對應的服務。啓動過程首先創建service或者wsgi_service,wsgi_service由對應的manager啓動,service除了manager外,還實現了rpc的接口,用來相應遠程命令的實現。nova-compute’, ‘nova-network’, ‘nova-scheduler’都屬於Service,’ec2′屬於wsgi_service。

  • periodic_task

nova在運行時需要很多定時任務,例如檢查vm狀態,更新節點信息等等。periodic_task是用來簡化nova中定時任務的處理,通過periodic_task我們不必爲每一個任務寫一個單獨的定時器進行調度。periodic_task的核心是一個decorator,一個metaclass,一個定時任務的基類。
periodic_task.periodic_task是decorator,它爲函數設置必要的屬性(例如定時間隔,執行時間等),保存在函數的屬性中(函數也是對象);PeriodicTasks是定時任務的基類,它的run_periodic_tasks函數會在定時器到達時,檢查並執行所有需要被執行的成員函數。而_PeriodicTasksMeta作爲PeriodicTasks的metaclass,在生成PeriodicTasks類時,會把所有需要定時執行的成員函數(PeriodicTasks中被periodic_task decorated的成員函數)保存到數組_periodic_tasks中。而run_periodic_tasks函數就是在這個數組中進行檢查的。


待續


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章