摘要:通過,也就是通過各個項目提供的來使用各個服務(wù)的功能。通過使用的方式是由各個服務(wù)自己實現(xiàn)的,比如負(fù)責(zé)計算的項目實現(xiàn)了計算相關(guān)的,負(fù)責(zé)認(rèn)證的項目實現(xiàn)了認(rèn)證和授權(quán)相關(guān)的。的服務(wù)都是使用的方式來部署的。
使用OpenStack服務(wù)的方式
OpenStack項目作為一個IaaS平臺,提供了三種使用方式:
通過Web界面,也就是通過Dashboard(面板)來使用平臺上的功能。
通過命令行,也就是通過keystone, nova, neutron等命令,或者通過最新的openstack命令來使用各個服務(wù)的功能(社區(qū)目前的發(fā)展目標(biāo)是使用一個單一的openstack命令替代過去的每個項目一個命令的方式,以后會只存在一個openstack命令)。
通過API,也就是通過各個OpenStack項目提供的API來使用各個服務(wù)的功能。
上面提到的三種方式中,通過API這種方式是基礎(chǔ),是其他兩種方式可行的基礎(chǔ)。
通過Web界面使用OpenStack服務(wù)這種方式是通過OpenStack的Horizon項目提供的。Horizon項目是一個Django應(yīng)用,實現(xiàn)了一個面板功能,包含了前后端的代碼(除了Python,還包括了CSS和JS)。Horizon項目主要是提供一種交互界面,它會通過API來和各個OpenStack服務(wù)進(jìn)行交互,然后在Web界面上展示各個服務(wù)的狀態(tài);它也會接收用戶的操作,然后調(diào)用各個服務(wù)的API來完成用戶對各個服務(wù)的使用。
通過命令行是用OpenStack服務(wù)的方式是由一系列項目來提供的,這些項目一般都命名為python-projectclient,比如python-keystoneclient,python-novaclietn等。這些命令行項目分別對應(yīng)到各個主要的服務(wù),為用戶提供命令行操作界面和Python的SDK。比如python-keystoneclient對應(yīng)到keystone,為用戶提供了keystone這個命令,同時也提供了keyston項目的SDK(其實是在SDK的基礎(chǔ)上實現(xiàn)了命令行)。這些client項目提供的SDK其實也是封裝了對各自服務(wù)的API的調(diào)用。由于每個主要項目都有一個自己的命令行工具,社區(qū)覺得不好,于是又有了一個新的項目python-openstackclient,用來提供一個統(tǒng)一的命令行工具openstack(命令的名字就叫做openstack),這個工具實現(xiàn)了命令行,然后使用各個服務(wù)的client項目提供的SDK來完成對應(yīng)的操作。
通過API使用OpenStack的方式是由各個服務(wù)自己實現(xiàn)的,比如負(fù)責(zé)計算的nova項目實現(xiàn)了計算相關(guān)的API,負(fù)責(zé)認(rèn)證的keystone項目實現(xiàn)了認(rèn)證和授權(quán)相關(guān)的API。這些API都是有統(tǒng)一的形式的,都是采用了HTTP協(xié)議實現(xiàn)的符合REST規(guī)范的API。OpenStack中如何實現(xiàn)這些API就是本文重點要將的內(nèi)容。
基于HTTP協(xié)議的RESTful APIREST的全稱是Representational State Transfer,中文翻譯過來是表征狀態(tài)轉(zhuǎn)移,是Roy Fielding在他的博士論文**Architectural Styles and the Design of Network-based Software Architectures**提出的一種軟件架構(gòu)風(fēng)格??梢韵鹊絯ikipedia頁面了解一下這個風(fēng)格的特點。一般會把滿足這種設(shè)計風(fēng)格的API成為RESTful API。由于這種軟件設(shè)計風(fēng)格非常適合采用HTTP協(xié)議來實現(xiàn),因此HTTP協(xié)議是目前實現(xiàn)RESTful API的主要方案。
OpenStack就是基于HTTP協(xié)議和JSON來實現(xiàn)自己的RESTful API(之前OpenStack還有采用XML來表示數(shù)據(jù)的,現(xiàn)在都已經(jīng)轉(zhuǎn)到JSON了)。當(dāng)一個服務(wù)要提供API時,它就會啟動一個HTTP服務(wù)端,用來對外提供RESTful API。
OpenStack的API都是有詳細(xì)的文檔記錄的,可以在http://docs.openstack.org/看到所有的API的文檔。每個API的文檔形式如下:
當(dāng)然,你可以點開detail看到詳細(xì)的說明。從上面這個API的文檔來看,你會覺得這個和開發(fā)網(wǎng)站時使用的GET方法和POST方法差不多,實際上也是差不多的,只不過對HTTP協(xié)議的使用方法做了滿足REST風(fēng)格的規(guī)定而已。
Python如何實現(xiàn)RESTful API因為Python能夠進(jìn)行Web開發(fā),所以用來開發(fā)RESTful API也就不成問題,這兩者的技術(shù)基礎(chǔ)是一樣。在Python下開發(fā)RESTful API應(yīng)用,無非是解決兩個問題:
服務(wù)如何部署?
用什么框架開發(fā)?
服務(wù)如何部署?說到Python的Web服務(wù)部署這個問題,就不得不提到WSGI。目前Python有兩種方式來開發(fā)和部署一個Web應(yīng)用:用WSGI和不用WSGI。如果你不了解WSGI,那么你需要先看下另外這篇關(guān)于WSGI的文章:WSGI簡介。
OpenStack的API服務(wù)都是使用WSGI的方式來部署的。在生產(chǎn)環(huán)境中部署WSGI,一般會考慮使用Web服務(wù)器 + 應(yīng)用服務(wù)器 + 應(yīng)用(框架)的方案。OpenStack官方推薦的是使用Apache + mod_wsgi的方案,不過這個要換成其他方案也很容易,你也可以選nginx + uWSGI。對于開發(fā)調(diào)試的目的,有些項目也會提供使用eventlet的單進(jìn)程部署方案,比如Keystone項目的keystone-all命令。采用eventlet這種異步架構(gòu)來進(jìn)行應(yīng)用開發(fā)也是一個比較大的話題,本文不覆蓋這方面的內(nèi)容。
當(dāng)然,也可以不用WSGI。在Python中,如果不使用WSGI的化,一般開發(fā)者會選擇一些專門的服務(wù)器和框架,比如Tornado,或者最新最潮的aiohttp。不過在OpenStack的項目中我還沒見過不使用WSGI的。
用什么框架開發(fā)Python的Web開發(fā)框架很多,最出名自然是Django了。基本上,還活躍的框架都支持RESTful API的開發(fā),有些框架還專門為RESTful API的開發(fā)提供了便利的功能(比如Pecan),有些框架則通過第三方模塊來提供這種便利,比如Django和Flask都有不少和REST相關(guān)的第三方庫。
對于框架選擇,也沒有什么特別好的標(biāo)準(zhǔn),一般都是比較性能、文檔、社區(qū)是否活躍等。在我看來,選擇流行的一般就不會錯。
OpenStack中的RESTful API開發(fā)上面已經(jīng)談到了OpenStack都是使用WSGI,也提到了部署方式。這一章來說一下OpenStack中使用的框架。
OpenStack項目傾向于不重新發(fā)明輪子,一般都會選擇現(xiàn)有的庫和框架來使用,除非現(xiàn)有的框架不滿足需求。因為Web框架的選擇很多,而且都滿足需求,所以O(shè)penStack項目到目前為止都是使用現(xiàn)成的Web框架。
OpenStack早期的項目并沒有使用一個框架,而是使用了幾個不同的模塊來組合出一個框架:Paste + PasteDeploy + Routes + WebOb,這幾個不同的模塊分別負(fù)責(zé)應(yīng)用的WSGI化、URL路由和請求處理等功能。Nova, Glance, Neutron, Keystone等早期的項目都是使用這樣的架構(gòu)來實現(xiàn)RESTful API的。
早期的這種技術(shù)選型帶來的好處是"框架"具備足夠的靈活性,缺點則是要把這幾個模塊組合起來實現(xiàn)一個REST服務(wù),需要寫很多代碼,連WSGI的入口函數(shù)都要自己實現(xiàn)(比如Keystone項目的keystone/common/wsgi.py文件中的class Application)。因為靈活性的好處不是很明顯,而代碼量大的壞處很明顯,比如上面那個class Application需要在每個項目中復(fù)制一遍,所以社區(qū)的新項目就開始使用新的Web框架Pecan。
Pecan是一個基于對象路由的框架,即靈活又簡單。Pecan主要實現(xiàn)了URL路由功能,支持RESTful API。Pecan沒有實現(xiàn)模板、session管理和ORM等功能,但是這些功能可以通過其他的模塊來實現(xiàn)。對于OpenStack來說,Pecan是一個很好的選擇,因為OpenStack項目中統(tǒng)一使用sqlalchemy來實現(xiàn)ORM,API的實現(xiàn)也不需要模板功能,安全控制則基于Keystone體系。使用Pecan來開發(fā)REST服務(wù),代碼量很少,代碼結(jié)構(gòu)也清晰。Ceilometer項目就是使用了Pecan。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/37598.html
摘要:在實際項目中,這么做肯定是不行的實際項目中不會使用內(nèi)存數(shù)據(jù)庫,這種數(shù)據(jù)庫一般只是在單元測試中使用。接下來,我們將會了解中單元測試的相關(guān)知識。 在上一篇文章,我們介紹了SQLAlchemy的基本概念,也介紹了基本的使用流程。本文我們結(jié)合webdemo這個項目來介紹如何在項目中使用SQLAlchemy。另外,我們還會介紹數(shù)據(jù)庫版本管理的概念和實踐,這也是OpenStack每個項目都需要做的...
摘要:到這里,我們的服務(wù)的框架已經(jīng)搭建完成,并且測試服務(wù)器也跑起來了。上面的代碼也就可以修改為再次運行我們的測試服務(wù)器,就可以返現(xiàn)返回值為格式了。我們先來完成利用來檢查返回值的代碼方法的第一個參數(shù)表示返回值的類型這樣就完成了的返回值檢查了。 上一篇文章說到,我們將以實例的形式來繼續(xù)講述這個API服務(wù)的開發(fā)知識,這里會使用Pecan和WSME兩個庫。 設(shè)計REST API 要開發(fā)REST AP...
摘要:本文將進(jìn)入單元測試的部分,這也是基礎(chǔ)知識中最后一個大塊。本文將重點講述和中的單元測試的生態(tài)環(huán)境。另外,在中指定要運行的單元測試用例的完整語法是。中使用模塊管理單元測試用例。每個項目的單元測試代碼結(jié)構(gòu)可 本文將進(jìn)入單元測試的部分,這也是基礎(chǔ)知識中最后一個大塊。本文將重點講述Python和OpenStack中的單元測試的生態(tài)環(huán)境。 單元測試的重要性 github上有個人畫了一些不同語言的學(xué)...
摘要:從上面的例子可以看出,決定響應(yīng)類型的主要是傳遞給函數(shù)的參數(shù),我們看下函數(shù)的完整聲明參數(shù)用來指定返回值的模板,如果是就會返回內(nèi)容,這里可以指定一個文件,或者指定一個模板。用來做什么上面兩節(jié)已經(jīng)說明了可以比較好的處理請求中的參數(shù)以及控制返回值。 上一篇文章我們了解了一個巨啰嗦的框架:Paste + PasteDeploy + Routes + WebOb。后來OpenStack社區(qū)的人受不...
摘要:不幸的是,在軟件包管理十分混亂,至少歷史上十分混亂。的最大改進(jìn)是將函數(shù)的參數(shù)單獨放到一個的文件中這些成為包的元數(shù)據(jù)?;诘陌姹咎柟芾怼5陌姹就茖?dǎo)這里重點說明一下基于的版本號管理這個功能。開發(fā)版本號的形式如下。 為什么寫這個系列 OpenStack是目前我所知的最大最復(fù)雜的基于Python項目。整個OpenStack項目包含了數(shù)十個主要的子項目,每個子項目所用到的庫也不盡相同。因此,對于...
閱讀 3172·2021-11-19 09:40
閱讀 2475·2021-10-14 09:42
閱讀 1755·2021-09-22 15:34
閱讀 1477·2019-08-30 15:55
閱讀 811·2019-08-29 12:59
閱讀 446·2019-08-28 18:28
閱讀 1852·2019-08-26 13:42
閱讀 1554·2019-08-26 13:29