日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

openstack中的rpc遠(yuǎn)程調(diào)用的方法

瀏覽:104日期:2022-06-15 10:13:45

眾所周知,OpenStack的通信方式有兩種,一種是基于HTTP協(xié)議的RESTFul API方式,另一種則是RPC調(diào)用。兩種通信方式的應(yīng)用場景有所不同,在OpenStack中,前者主要用于各組件之間的通信(如nova與glance的通信),而后者則用于同一組件中各個(gè)不同模塊之間的通信(如nova組件中nova-compute與nova-scheduler的通信)。

nova中rpc調(diào)用非常多,用pycharm點(diǎn)點(diǎn)點(diǎn)跟函數(shù)的時(shí)候遇到rpc就會點(diǎn)不下去了,不解決直接就看不下去了那種多法

什么是 RPC

openstack中的rpc遠(yuǎn)程調(diào)用的方法

看不明白這個(gè)圖對于看nova代碼,其實(shí)不是很重要,直接忽略以后再看也可以,當(dāng)務(wù)之急是解決一下看openstack代碼遇到rpc就跟丟了的問題

RPC、消息隊(duì)列、RESTful

這三個(gè)其實(shí)不是一個(gè)層面的東西,本質(zhì)上不應(yīng)該放在一起比,但是因?yàn)槎加脕硗ㄐ牛容^容易混淆就還是解釋一下

RESTful:主要用于各組件之間的通信(比如nova與glance的通信),或者說用于組件對外提供調(diào)用接口 RPC:則用于同一組件中各個(gè)不同模塊之間的通信(比如nova組件中nova-compute與-nova-scheduler的通信) 消息隊(duì)列:用于解耦組件,也是組件間通信用的,而且會有一個(gè)隊(duì)列用來暫存消息在nova中的典型rpc

nova/nova/nova/conductor/tasks/live_migrate.py

class LiveMigrationTask(base.TaskBase): def __init__(self, context, instance, destination, block_migration, disk_over_commit, migration, compute_rpcapi, servicegroup_api, scheduler_client):super(LiveMigrationTask, self).__init__(context, instance) ... def _execute(self):self._check_instance_is_active()self._check_host_is_up(self.source)if not self.destination: self.destination = self._find_destination() self.migration.dest_compute = self.destination self.migration.save()else: self._check_requested_destination()# TODO(johngarbutt) need to move complexity out of compute manager# TODO(johngarbutt) disk_over_commit?#調(diào)用 ComputeAPI 類中的 live_migration() RPC接口return self.compute_rpcapi.live_migration(self.context,host=self.source,instance=self.instance,dest=self.destination,block_migration=self.block_migration,migration=self.migration,migrate_data=self.migrate_data)

conductor以compute_rpcapi.live_migration的方式遠(yuǎn)程調(diào)用compute的live_migration,過程就是, conductor以RPC的方式發(fā)出一個(gè)請求到Queue再被nova-compute接收

nova/nova/nova/compute/rpcapi.py

class ComputeAPI(object): # 這是一個(gè)RPC遠(yuǎn)程調(diào)用的方法 def live_migration(self, ctxt, instance, dest, block_migration, host, migration, migrate_data=None):args = {’migration’: migration}version = ’4.2’if not self.client.can_send_version(version): version = ’4.0’# 獲取目標(biāo) compute 主機(jī)(DEST HOST)的RPC client,即被調(diào)用的服務(wù)進(jìn)程的HostIPcctxt = self.client.prepare(server=host, version=version)# 通過目標(biāo)主機(jī)對象的 RPC cliient 來調(diào)用遠(yuǎn)程過程方法 cast() ,以此來實(shí)現(xiàn)遠(yuǎn)程調(diào)用cctxt.cast(ctxt, ’live_migration’, instance=instance, dest=dest, block_migration=block_migration, migrate_data=migrate_data, **args)# cast()異步遠(yuǎn)程調(diào)用,不會阻塞別的進(jìn)程,適合于需要長時(shí)間進(jìn)行的執(zhí)行過程# cast()的第二個(gè)參數(shù)是RPC client調(diào)用的函數(shù)名,case()后面的參數(shù)會繼續(xù)作為參數(shù)傳入該調(diào)用函數(shù)# cast()函數(shù)內(nèi)的live_migration()函數(shù)是 manager.live_migration() 視具體實(shí)現(xiàn)遷移功能的函數(shù),在manager.py內(nèi)實(shí)現(xiàn)。

調(diào)用的時(shí)候是從nova/nova/conductor/tasks/live_migrate.py到nova/nova/compute/rpcapi.py,但是實(shí)際上是compute服務(wù)首先得在rpcapi.py提供出接口函數(shù),然后使用者通過- 1. import導(dǎo)入的方式去使用rpc調(diào)用- 2. 類實(shí)例化傳參的方式去引入

熱遷移這里用的就是類實(shí)例化傳參

tip: call()表示同步調(diào)用 和 cast()表示異步調(diào)用

openstack中的rpc遠(yuǎn)程調(diào)用的方法

根據(jù)在rpc.py或者rpcapi.py中的cast()的第二個(gè)參數(shù),去該服務(wù)下的manager.py中找和這個(gè)參數(shù)同名的函數(shù)(這個(gè)就是rpc最終想要調(diào)用的函數(shù)),我們這里是compute_rpcapi,所以要去找compute下的mannager.py

為什么要去找mannager,是因?yàn)閚ova.compute.manager 會一直監(jiān)聽 Queue ,當(dāng)Queue中存在相關(guān)的 RPC 請求時(shí),就去完成這個(gè)請求

nova/nova/nova/compute/manager.py

@wrap_exception() @wrap_instance_event(prefix=’compute’) @wrap_instance_fault def live_migration(self, context, dest, instance, block_migration, migration, migrate_data):'''執(zhí)行實(shí)時(shí)遷移。:param context: security context:param dest: destination host:param instance: a nova.objects.instance.Instance object:param block_migration: if true, prepare for block migration:param migration: an nova.objects.Migration object:param migrate_data: implementation specific params'''self._set_migration_status(migration, ’queued’)def dispatch_live_migration(*args, **kwargs): with self._live_migration_semaphore:# 調(diào)用_do_live_migration執(zhí)行遷移self._do_live_migration(*args, **kwargs)# NOTE(danms): We spawn here to return the RPC worker thread back to# the pool. Since what follows could take a really long time, we don’t# want to tie up RPC workers.utils.spawn_n(dispatch_live_migration, context, dest, instance, block_migration, migration, migrate_data)

當(dāng)然實(shí)際干活的還不是manager.py的def live_migration,而是live_migration函數(shù)去調(diào)用_do_live_migration,但是之后的就是熱遷移的流程,在之前的文檔里寫了就不展開了,反正rpc的體現(xiàn)就只到這里

冷遷移中還有很多例子,不一一列舉了,有興趣可以去看冷遷移源碼分析這篇博客

看完例子會發(fā)現(xiàn),既然原生的代碼既然已經(jīng)寫了rpc調(diào)用,那么對應(yīng)的服務(wù)肯定已經(jīng)提供了rpc接口,所以實(shí)際上看到compute_rpcapi,可以不去compute下的rpc文件中找了,直接去compute下的manager看具體實(shí)現(xiàn)(不止compute,其他服務(wù)也一樣),當(dāng)然,如果需要雪確定是同步還是異步調(diào)用那還是不要偷這一步的懶。

總結(jié)

完整的rpc應(yīng)該具有

組件A提供出rpc調(diào)用接口(rpc.py或者rpcapi.py文件) 組件B引入組件A的rpc (import或者類實(shí)例化傳參) 組件B調(diào)用組件A的rpc(以rpc方式發(fā)送一個(gè)請求到消息隊(duì)列) 組件A處理請求(組件A監(jiān)聽到發(fā)給自己的rpc請求會通過manager處理請求)

如果只是看代碼,那么去對應(yīng)的manager下面找實(shí)現(xiàn)就可以了,但是如果自己要加就還是的明白從哪里提供的、怎樣導(dǎo)入,何種途徑接收,這樣想在代碼里添加自己的rpc調(diào)用才心里有數(shù)

參考文獻(xiàn):

https://zhuanlan.zhihu.com/p/36427583https://blog.csdn.net/Jmilk/article/details/52655645https://www.cnblogs.com/wongbingming/p/11086773.htmlhttps://blog.csdn.net/qq_33909098/article/details/118578133

到此這篇關(guān)于openstack中的rpc遠(yuǎn)程調(diào)用的文章就介紹到這了,更多相關(guān)openstack rpc調(diào)用內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: openstack rpc遠(yuǎn)程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩国产在线一区| 日韩高清在线不卡| 亚洲欧美日韩国产一区二区| 麻豆精品视频在线| 亚洲女人av| 99精品视频精品精品视频| 久久精品一区二区国产| 欧美精品观看| 青青草精品视频| 亚洲精品无播放器在线播放| 日韩视频一区| 午夜日韩福利| 国产农村妇女精品一二区| 91亚洲一区| 欧美久久香蕉| 美女国产一区二区三区| 国产乱子精品一区二区在线观看| 日韩激情精品| 欧美精品福利| 亚洲精品在线a| 国产日产精品_国产精品毛片 | 亚洲欧洲日韩| 高清一区二区| 亚洲精品黄色| 久久蜜桃av| 欧美日韩亚洲三区| 激情欧美日韩一区| 国产美女亚洲精品7777| 亚洲福利精品| 日韩综合在线| 国产免费av一区二区三区| 99成人超碰| 精品国产不卡| 国产日韩免费| 国内精品福利| 正在播放日韩精品| 免费在线观看一区| 91福利精品在线观看| 99riav国产精品| 老牛影视精品| 久久av中文| 69堂免费精品视频在线播放| 欧美午夜不卡| 国产高清久久| 在线观看精品| 国产传媒在线观看| 麻豆中文一区二区| 国产精品一区三区在线观看| 日韩av二区在线播放| 欧美女激情福利| 欧美日韩国产一区精品一区| 91久久国产| 一区二区自拍| 亚洲综合二区| 在线综合欧美| 蜜桃久久久久久| 一级成人国产| 日韩精品成人在线观看| 日本麻豆一区二区三区视频| 一区二区91| 国产精品午夜av| 国产成人免费精品| 久久精品成人| 狠狠爱成人网| 国产韩日影视精品| 亚洲一区欧美| 国产精品porn| 日韩和的一区二在线| 99久久夜色精品国产亚洲狼| 99在线精品免费视频九九视| 免费久久精品视频| 国产精品资源| 人人香蕉久久| 亚洲人成网77777色在线播放| 亚洲免费资源| 精品国产不卡| 欧美日韩精品一本二本三本| 美女精品网站| 国产成人免费精品| 国产精品国产三级国产在线观看| 日韩欧美综合| 亚洲欧美日韩国产一区二区| 国产欧美一区二区三区米奇| 韩国久久久久久| 四虎成人精品一区二区免费网站| 国产一区二区三区四区二区| 国产精品老牛| 国产不卡av一区二区| 日韩精品一级中文字幕精品视频免费观看 | 国产中文欧美日韩在线 | 国产福利片在线观看| 女人天堂亚洲aⅴ在线观看| 日韩精品欧美激情一区二区| 中文字幕亚洲精品乱码| 偷拍精品精品一区二区三区| 欧美一区=区三区| 国产模特精品视频久久久久| 不卡专区在线| 麻豆精品av| 亚洲精品九九| 激情欧美一区| 欧美国产一级| 欧美激情一区| 日韩精品成人| 蜜桃久久久久久久| 91超碰国产精品| 欧美日韩在线二区| 国产一区二区三区成人欧美日韩在线观看| 久色成人在线| 免费观看在线综合| 国产精品人人爽人人做我的可爱| 黄色精品视频| 久久精品国产网站| 国产精品白浆| 国产欧美日韩在线一区二区| 午夜一级在线看亚洲| 欧美成人综合| 色88888久久久久久影院| 国产+成+人+亚洲欧洲在线| 久久中文欧美| 国内精品麻豆美女在线播放视频| 卡一卡二国产精品| 精品九九久久| 日韩欧美自拍| 精品一区毛片| 亚洲尤物在线| 日韩中文一区二区| 国产伦理久久久久久妇女| 国产经典一区| 秋霞影院一区二区三区| 亚洲深夜视频| 五月婷婷亚洲| 日本不卡视频在线观看| 国产精品夜夜夜| 亚洲日本网址| 亚洲最新av| 日韩视频精品在线观看| 欧美日韩国产探花| 蜜桃av一区二区| 国产精品片aa在线观看| 91青青国产在线观看精品| 欧美a级片一区| 清纯唯美亚洲综合一区| 亚洲美女久久精品| 免费中文字幕日韩欧美| 国产视频欧美| 国产精品综合| 免费精品国产的网站免费观看| 爽爽淫人综合网网站| 免费精品一区| 国产精品社区| 精品黄色一级片| 亚洲久久在线| 中文在线资源| 日本视频一区二区| 久久伦理在线| 国产精品地址| 久久国产99| 日韩国产欧美| 国产九一精品| 久久精选视频| 久久免费视频66| 免费黄网站欧美| 久久人人97超碰国产公开结果| 国产欧美一区二区三区精品观看| 亚洲精品1区| 欧美片第1页| 精品国产成人| 国产麻豆精品| 日本不卡视频一二三区| 99视频在线精品国自产拍免费观看| 里番精品3d一二三区| 蜜臀精品一区二区三区在线观看| 亚洲精品福利电影| 久久精品国产久精国产| 蜜臀久久99精品久久久画质超高清 | 三级一区在线视频先锋| 99久久99久久精品国产片果冰| 国产精品sm| 国产伦一区二区三区| 日韩av一区二区三区四区| 久久一二三区| 亚洲天堂免费| 亚洲精品四区| 午夜久久美女| 午夜久久黄色| 国产视频亚洲| 黑丝一区二区| 视频在线观看一区二区三区| 亚洲一区中文| 亚洲精品国模| 欧美日本二区| 精品国产午夜肉伦伦影院| 久久免费福利| 久久国产日本精品| 日韩精品一级二级 | 9色国产精品| 亚洲专区视频| 日韩欧美中文字幕一区二区三区| 亚洲精品一级|