這段時間搗鼓了一下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...