Openstack Glance原始碼架構解析

2021-09-13 02:57:17 字數 3050 閱讀 8801

這段時間搗鼓了一下glance源**,還是有收穫的,修改了部分**實現了支援多個ceph儲存後端的功能。這個功能是不是個偽需求都還待定,反正也就當磨練了。

關於支援多個ceph儲存後端的功能,稍微說一下 

需要實現的功能就是在命令中行上傳映象,通過指定集群將映象上傳到不同ceph集群中。在通過nova建立虛擬機器的時候肯定也需要能夠使用這些建立虛擬機器,當然這在計算節點的nova配置中就能實現。

整體結構圖

glance架構是乙個典型的cs架構,提供的也是標準的rest介面,各個layer分層也是很清楚的。 

名字    解釋

glance-api    服務端,負責處理各個請求

glance-store    與底層儲存打交道,做適應性驅動等

glance-client    客戶端,處理使用者命令並傳送請求到服務端

glance-registry    處理元資料相關,跟資料庫有關

gateway and basic layers

the domain model contains the following layers:

authorization

property protection

notifier

policy

quota

location

database

這次主要關注的還是location這一層,database主要是由glance-registry來進行資料庫的互動,順帶了解了很多。 

請求處理的大致過程如下: 

client端傳送請求,api端router.py中將請求下發,選擇相應的方法處理請求,目前我們測試環境中使用的api是v1版本

經過中間auth, notifier, policy, quota到location,會呼叫到glance_store進行底端儲存,並返回儲存的位置資訊,需要寫到資料庫中

在跟資料庫的互動中需要用到glance_registry,將映象的相關資訊寫到資料庫中,值得注意的是會將上面映象儲存的位置資訊location_uri寫入到資料庫中,在進行刪除等操作會直接從資料庫中讀取這個uri,進行刪除

這裡只是分析了一些主要的請求處理流程,對於一些複雜的過程暫時不考慮

重要流程分析

1. glance服務啟動過程

在/cmd/api.py中可以看到啟動服務時進行操作:

def main():

try:

config.parse_args()

log.setup('glance')

glance.store.create_stores()    

#將所有支援的儲存store_cls及其location_cls資訊載入

glance.store.verify_default_store()

#驗證預設儲存,這兩步會呼叫到rbd.py中生成store物件測試

def create_resource():

"""images resource factory method"""

deserializer = imagedeserializer()

"""handles deserialization of specific controller method requests."""

serializer = imageserializer()

"""handles serialization of specific controller method responses."""

return wsgi.resource(controller(), deserializer, serializer)

2.列表過程image-list

在使用glance image-list時候呼叫的就是這個過程,用於檢索可用的image列表。

glance-client會傳送乙個get請求到 給api端

glance-api收到請求後,按照前面的router.py中的map將請求對映到detail方法。

def detail(self, req):

self._enforce(req, 'get_images')

params = self._get_query_params(req)

try:

images = registry.get_images_detail(req.context, **params)  #從registery中讀取元資料

# strip out the location attribute. temporary fix for

# lp bug #755916. this information is still coming back

# from the registry, since the api server still needs access

# to it, however we do not return this potential security

# information to the api end user...

for image in images:

redact_loc(image, copy_dict=false)                      #清除系統不小心存留的位置資訊

資料將會已下面格式的json返回

},...]}

3.映象建立過程

4.映象刪除過程

azkaban web server原始碼解析

azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...

JDK LinkedHashMap原始碼解析

今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...

Clickhouse 原始碼架構

原始碼版本 v20.1 這篇文章主要是從整體上看一下整個專案包含哪些主要模組,明確每個模組的作用,為後續針對性的深挖打個基礎。access 許可權控制 aggregatefunctions functions tablefunctions 聚合函式 普通函式 表函式的定義 client server...