精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入研究Openstack Nova組件對(duì)象模型以及數(shù)據(jù)庫訪問機(jī)制

開發(fā) 開發(fā)工具 OpenStack
本文首先介紹了Openstack Nova組件數(shù)據(jù)庫訪問的發(fā)展歷程,然后基于源碼分析了當(dāng)前Nova訪問數(shù)據(jù)庫的過程,最后解釋了Nova使用軟刪除的原因。

[[193547]]

1. 背景

介紹在Openstack G版以前,Nova的所有服務(wù)(包括nova-compute服務(wù))都是直接訪問數(shù)據(jù)庫的,數(shù)據(jù)庫訪問接口在nova/db/api.py模塊中實(shí)現(xiàn),而該模塊只是調(diào)用了IMPL的方法,即該模塊只是一個(gè)代理,真正實(shí)現(xiàn)由IMPL實(shí)現(xiàn),IMPL是一個(gè)可配置的動(dòng)態(tài)加載驅(qū)動(dòng)模塊,通常使用Python sqlalchemy庫實(shí)現(xiàn),對(duì)應(yīng)的代碼為nova.db.sqlalchemy.api:

  1. _BACKEND_MAPPING = {'sqlalchemy''nova.db.sqlalchemy.api'

該模塊不僅實(shí)現(xiàn)了model的CRUD操作,還封裝了一些高級(jí)API,比如:

  • instance_get_all: 獲取所有虛擬機(jī)實(shí)例。
  • instance_update: 更新虛擬機(jī)熟悉。

這種直接訪問數(shù)據(jù)庫的設(shè)計(jì)至少存在以下兩個(gè)問題:

  • 所有服務(wù)與數(shù)據(jù)模型耦合,當(dāng)數(shù)據(jù)模型變更時(shí),可能需要涉及所有代碼的調(diào)整,并難以支持版本控制。
  • 所有的主機(jī)都能訪問數(shù)據(jù)庫,大大增加了數(shù)據(jù)庫的暴露風(fēng)險(xiǎn)。

為了實(shí)現(xiàn)Nova服務(wù)與數(shù)據(jù)庫訪問解耦,從G版本開始引入了nova-conductor服務(wù),該服務(wù)的一個(gè)重要作用就是訪問數(shù)據(jù)庫,其它服務(wù)訪問數(shù)據(jù)庫時(shí)需要向nova-conductor發(fā)起RPC請(qǐng)求,由nova-conductor代理請(qǐng)求數(shù)據(jù)庫。

以上方式基本解決了服務(wù)與數(shù)據(jù)庫訪問解耦,并且防止其它服務(wù)直接訪問數(shù)據(jù)庫,但仍然沒有解決對(duì)象模型的版本控制。從I版本開始引入了對(duì)象模型的概念,所有的對(duì)象模型定義在nova/objects。在此之前訪問數(shù)據(jù)庫是直接調(diào)用數(shù)據(jù)庫的model的,比如更新一個(gè)flavor一個(gè)字段,調(diào)用Flavor的update方法(由sqlalchemy)實(shí)現(xiàn)。引入對(duì)象模型后,相當(dāng)于在服務(wù)與數(shù)據(jù)庫之間又添加了一級(jí)對(duì)象層,各個(gè)服務(wù)直接和資源對(duì)象交互,資源對(duì)象再和數(shù)據(jù)庫接口交互,數(shù)據(jù)庫返回時(shí)也會(huì)相應(yīng)的轉(zhuǎn)化為對(duì)象模型中的對(duì)象。

對(duì)象模型的對(duì)象不僅封裝了數(shù)據(jù)庫訪問,還支持了版本控制。每個(gè)對(duì)象都會(huì)維護(hù)一個(gè)版本號(hào),發(fā)起RPC請(qǐng)求時(shí)必須指定對(duì)象的版本號(hào)。新版本的對(duì)象通常能夠兼容舊版本對(duì)象,比如nova-conductor升級(jí)了使用對(duì)象模型版本為1.2,但nova-compute服務(wù)可能還沒有升級(jí)完成,仍然使用的是1.1版本,此時(shí)請(qǐng)求返回時(shí)會(huì)把conductor的返回的對(duì)象轉(zhuǎn)化為1.1版本兼容的對(duì)象。

目前Cinder服務(wù)還是直接訪問數(shù)據(jù)庫,目前已經(jīng)在社區(qū)有對(duì)應(yīng)的BP關(guān)于增加cinder-conductor服務(wù)Create conductor service for cinder like nova-conductor, 該BP于2013年6月提出,到當(dāng)前最新版本N還尚未實(shí)現(xiàn)。

2. Nova配置

以上我們介紹了nova-conductor以及對(duì)象模型的背景,我們了解到所有服務(wù)訪問數(shù)據(jù)庫都必須通過RPC調(diào)用nova-conductor服務(wù)請(qǐng)求,但這并不是強(qiáng)制的,如果不考慮數(shù)據(jù)庫訪問安全,你仍然可以使用本地訪問方式,nova-compute服務(wù)可以直接訪問數(shù)據(jù)庫而不發(fā)起nova-conductor RPC調(diào)用。我們看nova-compute服務(wù)的初始化,它位于nova/cmd/compute.y:

  1. def main(): 
  2.     # ... 
  3.     if not CONF.conductor.use_local: 
  4.         cmd_common.block_db_access('nova-compute'
  5.         objects_base.NovaObject.indirection_api = \ 
  6.             conductor_rpcapi.ConductorAPI() 
  7.     else
  8.         LOG.warning(_LW('Conductor local mode is deprecated and will ' 
  9.                         'be removed in a subsequent release')) 
  10.     # ... 

因此在/etc/nova.conf配置文件中可以配置是否直接訪問數(shù)據(jù)庫。以上indirection_api是Nova對(duì)象模型的一個(gè)字段,初始化為None。

如果設(shè)置use_local為true,則indirection_api為None,否則將初始化為conductor_rpcapi.ConductorAPI,從這里我們也可以看出調(diào)用conductor的入口。

我們可能會(huì)想到說在對(duì)象模型訪問數(shù)據(jù)庫時(shí)會(huì)有一堆if-else來判斷是否使用use_local,事實(shí)上是否這樣呢,我們接下來將分析源碼,從而理解Openstack的設(shè)計(jì)理念。

3. 源碼分析

3.1 nova-compute源碼分析

本小節(jié)主要以刪除虛擬機(jī)為例,分析nova-compute在刪除虛擬機(jī)時(shí)如何操作數(shù)據(jù)庫的。刪除虛擬機(jī)的API入口為nova/compute/manager.py的_delete_instance方法,方法原型為:

  1. _delete_instance(self, context, instance, bdms, quotas) 

該方法有4個(gè)參數(shù),context是上下文信息,包含用戶、租戶等信息,instance就是我們上面提到的對(duì)象模型中Instance對(duì)象實(shí)例,bdms是blockDeviceMappingList對(duì)象實(shí)例,保存著block設(shè)備映射列表,quotas是nova.objects.quotas.Quotas對(duì)象實(shí)例,保存該租戶的quota信息。

該方法涉及的數(shù)據(jù)庫操作代碼為:

  1. instance.vm_state = vm_states.DELETED 
  2. instance.task_state = None 
  3. instance.power_state = power_state.NOSTATE 
  4. instance.terminated_at = timeutils.utcnow() 
  5. instance.save() 
  6. system_meta = instance.system_metadata 
  7. instance.destroy() 

從代碼中可以看到,首先更新instance的幾個(gè)字段,然后調(diào)用save()方法保存到數(shù)據(jù)庫中,最后調(diào)用destroy方法刪除該實(shí)例(注意,這里的刪除并不一定是真的從數(shù)據(jù)庫中刪除記錄,也有可能僅僅做個(gè)刪除的標(biāo)識(shí))。

我們先找到以上的save()方法,它位于nova/object/instance.py模塊中,方法原型為:

  1. @base.remotable 
  2. save(self, expected_vm_state=None, 
  3.      expected_task_state=None, admin_state_reset=False

save方法會(huì)記錄需要更新的字段,并調(diào)用db接口保存到數(shù)據(jù)庫中。關(guān)鍵是該方法的wrapper remotable,這個(gè)注解(python不叫注解,不過為了習(xí)慣這里就叫注解吧)非常重要,該方法在oslo中定義:

  1. def remotable(fn): 
  2.     """Decorator for remotable object methods.""" 
  3.     @six.wraps(fn) 
  4.     def wrapper(self, *args, **kwargs): 
  5.         ctxt = self._context 
  6.         if ctxt is None: 
  7.             raise exception.OrphanedObjectError(method=fn.__name__, 
  8.                                                 objtype=self.obj_name()) 
  9.         if self.indirection_api: 
  10.             updates, result = self.indirection_api.object_action( 
  11.                 ctxt, self, fn.__name__, args, kwargs) 
  12.             for key, value in six.iteritems(updates): 
  13.                 if key in self.fields: 
  14.                     field = self.fields[key
  15.                     # NOTE(ndipanov): Since VersionedObjectSerializer will have 
  16.                     # deserialized any object fields into objects already, 
  17.                     # we do not try to deserialize them again here. 
  18.                     if isinstance(value, VersionedObject): 
  19.                         setattr(self, key, value) 
  20.                     else
  21.                         setattr(self, key
  22.                                 field.from_primitive(self, key, value)) 
  23.             self.obj_reset_changes() 
  24.             self._changed_fields = set(updates.get('obj_what_changed', [])) 
  25.             return result 
  26.         else
  27.             return fn(self, *args, **kwargs) 
  28.  
  29.     wrapper.remotable = True 
  30.     wrapper.original_fn = fn 
  31.     return wrapper 

從代碼看到,當(dāng)indirection_api不為None時(shí)會(huì)調(diào)用indirection_api的object_action方法,由前面我們知道這個(gè)值由配置項(xiàng)use_local決定,當(dāng)use_local為False時(shí)indirection_api為conductor_rpcapi.ConductorAPI。從這里了解到對(duì)象并不是通過一堆if-else來判斷是否使用use_local的,而是通過@remotable注解實(shí)現(xiàn)的,remotable封裝了if-else,當(dāng)使用local時(shí)直接調(diào)用原來對(duì)象實(shí)例的save方法,否則調(diào)用indirection_api的object_action方法。

注意: 除了@remotable注解,還定義了@remotable_classmethod注解,該注解功能和@remotable類似,僅僅相當(dāng)于又封裝了個(gè)@classmethod注解。

3.2 RPC調(diào)用

前面我們分析到調(diào)用conductor_rpcapi.ConductorAPI的object_action方法,該方法在nova/conductor/rpcapi.py中定義:

  1. def object_action(self, context, objinst, objmethod, args, kwargs): 
  2.         cctxt = self.client.prepare() 
  3.         return cctxt.call(context, 'object_action', objinst=objinst, 
  4.                           objmethod=objmethod, args=args, kwargs=kwargs) 

rpcapi.py封裝了client端的所有RPC調(diào)用方法,從代碼上看,發(fā)起了RPC server端的object_action同步調(diào)用。此時(shí)nova-compute工作順利轉(zhuǎn)接到nova-conductor,并堵塞等待nova-conducor返回。

3.3 nova-conductor源碼分析

nova-conductor RPC server端接收到RPC請(qǐng)求后調(diào)用manager.py的object_action方法(nova/conductor/manager.py):

  1. def object_action(self, context, objinst, objmethod, args, kwargs): 
  2.        """Perform an action on an object.""" 
  3.        oldobj = objinst.obj_clone() 
  4.        result = self._object_dispatch(objinst, objmethod, args, kwargs) 
  5.        updates = dict() 
  6.        # NOTE(danms): Diff the object with the one passed to us and 
  7.        # generate a list of changes to forward back 
  8.        for name, field in objinst.fields.items(): 
  9.            if not objinst.obj_attr_is_set(name): 
  10.                # Avoid demand-loading anything 
  11.                continue 
  12.            if (not oldobj.obj_attr_is_set(nameor 
  13.                    getattr(oldobj, name) != getattr(objinst, name)): 
  14.                updates[name] = field.to_primitive(objinst, name
  15.                                                   getattr(objinst, name)) 
  16.        # This is safe since a field named this would conflict with the 
  17.        # method anyway 
  18.        updates['obj_what_changed'] = objinst.obj_what_changed() 
  19.        return updates, result 

該方法首先調(diào)用obj_clone()方法備份原來的對(duì)象,主要為了后續(xù)統(tǒng)計(jì)哪些字段更新了。然后調(diào)用了_object_dispatch方法:

  1. def _object_dispatch(self, target, method, args, kwargs): 
  2.         try: 
  3.             return getattr(target, method)(*args, **kwargs) 
  4.         except Exception: 
  5.             raise messaging.ExpectedException() 

該方法利用反射機(jī)制通過方法名調(diào)用,這里我們的方法名為save方法,因此顯然調(diào)用了target.save()方法,即最終還是調(diào)用的instance.save()方法,不過此時(shí)已經(jīng)是在conductor端調(diào)用了.

又回到了nova/objects/instance.py的save方法,有人會(huì)說難道這不會(huì)無限遞歸RPC調(diào)用嗎?顯然不會(huì),這是因?yàn)閚ova-conductor的indirection_api為None,在@remotable中肯定走else分支。

4. 思考一個(gè)問題

還記得在_delete_instance方法的數(shù)據(jù)庫調(diào)用代碼嗎?這里再貼下代碼:

  1. instance.vm_state = vm_states.DELETED 
  2. instance.task_state = None 
  3. instance.power_state = power_state.NOSTATE 
  4. instance.terminated_at = timeutils.utcnow() 
  5. instance.save() 
  6. system_meta = instance.system_metadata 
  7. instance.destroy() 

有人會(huì)說instance記錄都要?jiǎng)h了,直接調(diào)用destory方法不得了,前面一堆更新字段然后save方法是干什么的。這是因?yàn)镹ova在處理刪除記錄時(shí)使用的是軟刪除策略,即不會(huì)真正得把記錄徹底刪除,而是在記錄中有個(gè)deleted字段標(biāo)記是否已經(jīng)被刪除。這樣的好處是方便以后審計(jì)甚至數(shù)據(jù)恢復(fù)。

5. 總結(jié)

本文首先介紹了Openstack Nova組件數(shù)據(jù)庫訪問的發(fā)展歷程,然后基于源碼分析了當(dāng)前Nova訪問數(shù)據(jù)庫的過程,最后解釋了Nova使用軟刪除的原因。

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2010-08-26 15:48:21

DB2優(yōu)化數(shù)據(jù)庫

2010-11-23 16:35:59

MySQL刪除多表數(shù)據(jù)

2011-12-15 10:43:20

JavaNIO

2015-05-13 09:57:14

C++靜態(tài)庫與動(dòng)態(tài)庫

2011-06-01 10:58:54

Android Service

2010-08-03 17:36:55

DB2數(shù)據(jù)庫

2012-01-18 11:24:18

Java

2022-05-11 09:03:05

CSS容器文本換行

2018-12-24 15:00:58

混合云多云云采用

2010-11-18 17:24:27

Oracle旋轉(zhuǎn)ins

2009-10-20 10:17:50

綜合布線系統(tǒng)驗(yàn)收

2022-04-19 08:28:34

main函數(shù)

2010-06-21 13:07:14

2010-11-26 11:57:35

MySQL結(jié)果字符串

2017-06-06 11:29:23

Java異常研究與分析

2010-05-31 17:45:50

MySQL行鎖

2016-01-12 18:04:55

Java異常研究

2011-03-16 17:26:22

動(dòng)態(tài)數(shù)據(jù)庫

2013-01-07 13:38:56

Android開發(fā)布局長度單位

2021-05-25 09:00:00

Kubernetes容器集群
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美韩国日本在线| 亚洲资源在线看| a级片在线观看| 本网站久久精品| 91麻豆成人精品国产| 日韩中文在线播放| 亚洲私人黄色宅男| 激情小说综合网| 中文字幕人妻一区二区三区视频 | 国产精品一级黄片| 欧洲亚洲两性| 亚洲摸摸操操av| 久久精品日韩精品| 91麻豆成人精品国产| 国产亚洲午夜| 久久国产精品视频| 亚洲av无码成人精品国产| 日日夜夜一区| 狠狠色狠狠色综合日日五| 亚洲高清在线观看一区| 免费av一级片| 精品一区二区三区视频| 97国产一区二区精品久久呦| 婷婷综合在线视频| 久久精品福利| 欧美高清精品3d| 日本一本二本在线观看| 日韩另类在线| 国产精品二三区| 欧美黑人3p| 欧美一级特黄aaaaaa大片在线观看| 日韩综合小视频| 97国产精品视频| 欧美精品一区二区成人| 成人3d精品动漫精品一二三| 亚洲精品国产精品乱码不99按摩| 精品日韩久久久| 瑟瑟视频在线看| 亚洲午夜视频在线| 91九色国产ts另类人妖| 美丽的姑娘在线观看免费动漫| 国产精品一区二区在线播放| 国产成人精品在线观看| 国产精品成人av久久| 91超碰成人| 日韩中文字在线| 538精品视频| 亚洲区小说区图片区qvod| 精品国产伦一区二区三区观看体验| 污污网站在线观看视频| 91精品美女| 欧美综合久久久| 日韩欧美精品在线观看视频| 国产777精品精品热热热一区二区| 亚洲精选免费视频| 懂色av一区二区三区四区五区| 成人在线免费观看| 日本一区二区三区高清不卡| 欧美国产视频在线观看| 欧美孕妇性xxxⅹ精品hd| 99久久精品国产精品久久| 国产精品播放| 欧美一级特黄aaaaaa| 成人黄色av电影| 国语精品中文字幕| 天堂在线中文在线| 性无码专区无码| 性欧美videos另类喷潮| 91av视频在线观看| 久久亚洲精品石原莉奈| 日韩精品一级二级 | 伊人365影院| 亚洲美女毛片| 欧美性受xxx| 无码人妻丰满熟妇区五十路| 国产精品嫩草99av在线| 欧美一级大胆视频| 337p粉嫩色噜噜噜大肥臀| 秋霞影院一区二区| 国产中文日韩欧美| www.久久综合| 99精品偷自拍| 欧美亚州在线观看| 日本三级视频在线播放| 亚洲乱码国产乱码精品精98午夜| 欧美大黑帍在线播放| 91超碰免费在线| 欧美综合色免费| 四川一级毛毛片| 日韩mv欧美mv国产网站| 中文字幕精品www乱入免费视频| 亚洲国产123| 海角社区69精品视频| 国产91av在线| 国产日韩欧美一区二区东京热| 成人av在线资源| 亚洲电影天堂av | 亚洲一区二区影视| 国产精品一区二区在线播放| 久久久久免费网| 自拍视频在线| 亚洲成人免费视频| 一区二区xxx| 亚洲一区 二区| 亚洲欧美另类国产| 国产这里有精品| 三级亚洲高清视频| 99se婷婷在线视频观看| 欧美巨乳在线| 一区二区三区波多野结衣在线观看| 日韩中文字幕在线视频观看| 亚洲免费资源| 亚洲欧洲日韩国产| 久久久久久av无码免费网站| 日产国产高清一区二区三区| 国产高清在线一区二区| 国产最新视频在线观看| 亚洲综合无码一区二区| 麻豆一区二区三区视频| 欧美日韩破处| 欧美激情视频播放| 国产精品高潮呻吟久久久| 91啪亚洲精品| 黄色三级中文字幕| 欧美综合社区国产| 国产精品高潮久久久久无| 久久精品国产精品| 成人av网站在线播放| 丁香桃色午夜亚洲一区二区三区 | 欧美xxxxx视频| 欧美一级高清免费| 狠狠躁夜夜躁av无码中文幕| 成人欧美一区二区三区| 免费看污黄网站| 日韩成人av在线资源| 久久久久久久久久久人体| 国产乱码精品一区二区三区精东| 国产午夜久久久久| 九色在线视频观看| 91欧美日韩在线| 欧美高清第一页| 99精品在线视频观看| 中文字幕精品一区二区精品绿巨人 | 欧美一区网站| 成人网址在线观看| 五月香视频在线观看| 色八戒一区二区三区| 亚洲国产精品成人综合久久久| 韩国久久久久| 国产伦一区二区三区色一情| 秋霞在线视频| 欧美zozo另类异族| 久久婷婷国产麻豆91| 国产精品99久久久久久久女警 | 性色一区二区| 国内在线观看一区二区三区| 欧美一区二粉嫩精品国产一线天| 韩国av免费在线| 亚洲五码中文字幕| 久久久男人的天堂| a91a精品视频在线观看| 九九九久久久| 黑人巨大精品欧美一区二区桃花岛| 亚洲精品国产精品乱码不99按摩| 日韩欧美激情视频| 91尤物视频在线观看| 欧美v在线观看| 欧美日韩xxxx| 成人黄色生活片| а√天堂资源地址在线下载| 日韩欧美一区二区在线视频| 久久久久久久久99| 成人app下载| 能看的毛片网站| 999国产精品视频| 97视频热人人精品| free性欧美16hd| 亚洲性xxxx| 国产熟女一区二区三区五月婷| 亚洲精品国产视频| 亚洲激情 欧美| 久久久久看片| 天天干天天操天天干天天操| 都市激情亚洲| 国产成人精品一区| 成人影院www在线观看| 亚洲国产成人在线播放| 黄色在线视频网址| 自拍偷拍国产亚洲| 国产精品久久无码| 欧美96一区二区免费视频| 亚洲第一男人av| 日本精品久久久久中文字幕| 欧美gayvideo| 国产精品一区二区不卡视频| 亚洲伦乱视频| 久久久久久国产三级电影| 国产黄色在线播放| 精品免费国产二区三区| 在线视频免费观看一区| 亚洲成人免费在线观看| 黑人操日本美女| 久久九九全国免费| 久久久久久久久久影视| 日本美女一区二区| 国产二区视频在线| 婷婷激情图片久久| 日本在线播放一区| h视频久久久| 成人黄色在线观看| 唐人社导航福利精品| 欧美人交a欧美精品| caoporn国产精品免费视频| 亚洲成人精品在线| 国产剧情精品在线| 欧美三级一区二区| 特级做a爱片免费69| 一区二区三区.www| 亚洲综合网在线| 国产精品热久久久久夜色精品三区| 妖精视频一区二区| 韩国三级中文字幕hd久久精品| 欧美污视频网站| av成人国产| 亚洲色成人www永久在线观看 | 国产性色av一区二区| 狠狠人妻久久久久久综合麻豆| 欧美一区二区三区在线| 中文av免费观看| 91国产免费观看| 影音先锋亚洲天堂| 亚洲精品视频一区| 成年人视频软件| 亚洲国产岛国毛片在线| 老熟妇精品一区二区三区| 黄页网站大全一区二区| www.色欧美| 天堂一区二区在线| aa免费在线观看| 亚洲看片一区| 欧美在线一区二区三区四区| 福利在线播放| 久久久久国产精品一区三寸| 亚洲一区三区电影在线观看| 成人嫩草影院| 欧美日韩国产不卡在线看| 7777精品| 精品蜜桃传媒| 嫩草国产精品入口| 成人综合色站| 国产精品一区二区三区美女| 99re在线播放| 亚洲精品a区| 91精品国产综合久久男男| 91精品国产经典在线观看| 国产成人午夜视频网址| 无码小电影在线观看网站免费| 韩国精品久久久999| 俄罗斯一级**毛片在线播放| 久久99国产精品自在自在app | 欧美激情久久久久| 日本孕妇大胆孕交无码| 日韩日本欧美亚洲| 91精品久久| 欧美日韩成人网| 三级在线看中文字幕完整版| 国产va免费精品高清在线| 日韩不卡视频在线观看| 91免费的视频在线播放| 91成人入口| 欧美精品中文字幕一区二区| 精品国产一区二区三区久久久樱花| 欧美二级三级| 国产成人调教视频在线观看| 色播亚洲婷婷| 天天精品视频| 亚洲熟妇无码另类久久久| 亚洲综合欧美| 在线观看高清免费视频| 国产成人av电影免费在线观看| 在线观看免费视频黄| www一区二区| 羞羞在线观看视频| 亚洲欧美日韩国产一区二区三区 | 日韩欧美一区二区三区免费观看| 久久久久久成人精品| www视频在线观看| 国产成人精品电影| 欧美性片在线观看| 成人信息集中地欧美| 亚洲精品无播放器在线播放| 999在线观看免费大全电视剧| 精品国产一区二区三区不卡蜜臂| 日韩视频在线播放| 先锋资源久久| 欧美日韩一道本| 久久狠狠亚洲综合| 中文字幕天堂av| 国产丝袜欧美中文另类| 久久午夜无码鲁丝片午夜精品| 疯狂做受xxxx欧美肥白少妇| 中文字幕欧美色图| 亚洲黄色av网站| 香蕉视频网站在线观看| 欧美精品激情视频| 色狠狠一区二区三区| 国产精品对白一区二区三区| 国产亚洲电影| 国产二区视频在线| 九色|91porny| 蜜桃传媒一区二区亚洲av| 日本一区二区三区在线观看| 奇米影视第四色777| 欧美日本在线一区| 亚洲男女视频在线观看| 日韩视频免费大全中文字幕| 欧美aaaaa性bbbbb小妇| 国产欧美日韩免费看aⅴ视频| 婷婷综合电影| 人妻无码一区二区三区四区| 蜜桃精品视频在线观看| 久久精品女同亚洲女同13| 国产精品麻豆欧美日韩ww| 蜜臀99久久精品久久久久小说| 精品对白一区国产伦| 免费观看久久久久| 国产精品jizz在线观看麻豆| 成人在线超碰| 黄色污污在线观看| 久久福利视频一区二区| 在线观看av中文字幕| 亚洲综合久久久| 99国产精品久久久久久久成人| 国产小视频91| 素人啪啪色综合| 精品国产二区在线| 夜夜嗨一区二区| 苍井空张开腿实干12次| 精品动漫av| 日韩在线观看免费av| www国产在线观看| 国产精品尤物福利片在线观看| 小说区图片区色综合区| 特级西西人体www高清大胆| 麻豆精品一区二区av白丝在线 | 国产三级三级三级精品8ⅰ区| 国产在线拍揄自揄拍无码视频| 这里只有精品电影| 成人看av片| 成人xxxx视频| 日韩在线中文| 中文字幕55页| 自拍视频在线观看一区二区| 日韩一级在线视频| 一本一本久久a久久精品牛牛影视| 亚洲优女在线| 视频二区一区| 欧美aaa在线| 免费一级suv好看的国产网站| 欧美日韩中文字幕一区二区| 岛国在线大片| 国产精品第一页在线| 日本一本不卡| 亚洲欧美日韩精品一区| 亚洲视频免费观看| 国产视频手机在线| 欧美老妇交乱视频| 欧美网色网址| 黄色一级一级片| 国产精品美女视频| 国产露脸无套对白在线播放| 久久影院免费观看| 乱中年女人伦av一区二区| 91精品91久久久中77777老牛| av高清久久久| 亚洲中文字幕在线一区| 久久婷婷国产麻豆91天堂 | 日韩午夜激情av| 秋霞在线午夜| 欧美成人免费在线| 久久99精品国产91久久来源| 老妇女50岁三级| 亚洲精品一区二区精华| 涩涩涩视频在线观看| 日本一区二区三区四区在线观看| 国内精品伊人久久久久影院对白| 国产av不卡一区二区| 国产精品久久久久久妇女| 制服诱惑一区| 国产suv一区二区三区88区| 久久青青草视频| 色一区av在线| 动漫av一区| 五月婷婷丁香综合网| 18涩涩午夜精品.www| 天天操天天操天天| 国产精品久久中文| 亚洲人成久久| 99国产精品无码| 亚洲国产精品大全|