一 Glance源碼目錄結構
[[email protected] glance]# tree -L 2
.
├── api-ref
│ └── source
├── etc
│ ├── glance-api.conf
│ ├── glance-api-paste.ini
│ ├── glance-cache.conf
│ ├── glance-glare.conf
│ ├── glance-glare-paste.ini
│ ├── glance-manage.conf
│ ├── glance-registry.conf
│ ├── glance-registry-paste.ini
│ ├── glance-scrubber.conf
│ ├── glance-swift.conf.sample
│ ├── metadefs
│ ├── oslo-config-generator
│ ├── ovf-metadata.json.sample
│ ├── policy.json
│ ├── property-protections-policies.conf.sample
│ ├── property-protections-roles.conf.sample
│ └── schema-image.json
├── glance
│ ├── api
│ ├── async
│ ├── cmd
│ ├── common
│ ├── context.py
│ ├── contrib
│ ├── db
│ ├── domain
│ ├── gateway.py
│ ├── glare
│ ├── hacking
│ ├── i18n.py
│ ├── i18n.pyc
│ ├── image_cache
│ ├── __init__.py
│ ├── locale
│ ├── location.py
│ ├── notifier.py
│ ├── opts.py
│ ├── quota
│ ├── registry
│ ├── schema.py
│ ├── scrubber.py
│ ├── tests
│ ├── version.py
│ └── version.pyc
├── glance.egg-info
│ ├── dependency_links.txt
│ ├── entry_points.txt
│ ├── not-zip-safe
│ ├── pbr.json
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── HACKING.rst
├── LICENSE
├── MANIFEST.in
├── pylintrc
├── rally-jobs
│ ├── extra
│ ├── glance.yaml
│ ├── plugins
│ └── README.rst
├── README.rst
├── releasenotes
│ ├── notes
│ └── source
├── requirements.txt
├── setup.cfg
├── setup.py
├── test-requirements.txt
├── tools
│ └── test-setup.sh
└── tox.ini
二 源碼結構分析 Glance的核心代碼位于glance目錄。 glance/cmd:所有服務以及工具的執行腳本。 glance/api:Glance API glance/registry:glance-registry服務具體實作。 glance-api可以為鏡像建立本地緩存,實作API服務節點的數量擴充,提供多個API節點為同一個鏡像提供服務的效率,如果隻有一個API節點,緩存機制并沒有意義。本地的Image Cache是鏡像檔案的完全複制,這種複制緩存機制對使用者來說是透明的,使用者并不知道得到的鏡像檔案是來自存儲背景還是本地緩存。 glance/image_cache:鏡像緩存實作。 可以通過配置檔案/etc/glance/glance-cache.conf指定Cache檔案存放的路徑、本地能夠用于Cache的存儲空間等資訊。 image_cache_dir = /opt/stack/data/glance/cache/ image_cache_max_size = 10737418240 針對import、export、clone等鏡像操作,Glance統一引入了Task的概念,進而友善管理,Task是針對鏡像的異步操作,glance/async即是部分實作。 Glance采用了責任鍊的設計模式實作使用者請求的處理流程。在責任鍊模式裡,各個對象通過前一個對象對後一個對象引用而連接配接起來形成一條鍊,請求在這個鍊上傳遞,直到鍊上的某一個對象決定處理此請求。發起請求的使用者或用戶端并不知道鍊上的哪一個對象最終處理這個請求,進而使系統可以在不影響用戶端的情況下動态重新組織鍊和配置設定責任。glance/domain目錄與glance/gateway.py檔案即是相關的一些實作,glance.domain子產品定義了一些基類或接口,比如ImageFactory、Repo等,而glance.gateway.Gateway子產品則是實作了責任鍊的建立。 Rally是一個性能測試的項目,glance/rally-jobs目錄是一些用于Rally的檔案或插件。
三 setup.cfg 依照慣例,分析具體實作之前,我們首先看看setup.cfg檔案
[entry_points]
console_scripts =
glance-api = glance.cmd.api:main
glance-cache-prefetcher = glance.cmd.cache_prefetcher:main
glance-cache-pruner = glance.cmd.cache_pruner:main
glance-cache-manage = glance.cmd.cache_manage:main
glance-cache-cleaner = glance.cmd.cache_cleaner:main
glance-control = glance.cmd.control:main
glance-manage = glance.cmd.manage:main
glance-registry = glance.cmd.registry:main
glance-replicator = glance.cmd.replicator:main
glance-scrubber = glance.cmd.scrubber:main
glance-glare = glance.cmd.glare:main
"entry_points"中的命名空間"console_scripts"裡,涵蓋了Glance所提供的所有服務以及工具,其中的每一個項都是一個可執行的腳本,這些腳本在部署時被安裝,它們同時也是Glance各項工作的入口。
- glance-cache-*:四個對Image Cache進行管理的工具。比如glance-cache-pruner用于執行一些周期性的任務,glance-cache-cleaner可以清理Cache檔案釋放空間。
- glance-manage:用于Glance資料庫的管理。
- glance-replicator:實作鏡像複制功能。
- glance-scrubber:用于清理已經删除的Image
- glance-control:Glance提供了glance-api、glance-registry兩個WSGI Server,以及一個glance-scrubber背景服務程序,這裡的glance-control工具即是用于控制這三個服務的程序,包括start、stop、restart等。