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

Dubbo服務調用過程

開發
前面丙已經帶著大家過了服務暴露和服務引入兩個流程了,而這兩個流程就是為了服務的調用,今天丙就帶著大家來過一遍 Dubbo 服務調用流程。

 看完今天的服務調用流程,基本上Dubbo的核心過程就完整的串聯起來了,在腦海中應該就有 Dubbo 整體運行的概念,這體系就建立起來了,對 RPC 也會有進一步的認識。

簡單的想想大致流程
在分析Dubbo 的服務調用過程前我們先來思考一下如果讓我們自己實現的話一次調用過程需要經歷哪些步驟?

首先我們已經知曉了遠程服務的地址,然后我們要做的就是把我們要

然后根據這些信息找到對應的實現類,然后進行調用,調用完了之后再原路返回,然后客戶端解析響應再返回即可。

 

調用具體的信息
那客戶端告知服務端的具體信息應該包含哪些呢?

首先客戶端肯定要告知要調用是服務端的哪個接口,當然還需要方法名、方法的參數類型、方法的參數值,還有可能存在多個版本的情況,所以還得帶上版本號。

由這么幾個參數,那么服務端就可以清晰的得知客戶端要調用的是哪個方法,可以進行精確調用!

然后組裝響應返回即可,我這里貼一個實際調用請求對象列子。

 

data 就是我所說的那些數據,其他是框架的,包括協議版本、調用方式等等這個下面再分析。

到此其實大致的意思大家都清楚了,就是普通的遠程調用,告知請求的參數,然后服務端解析參數找到對應的實現調用,再返回。

落地的調用流程
上面的是想象的調用流程,真實的落地調用流程沒有這么簡單。

首先遠程調用需要定義協議,也就是互相約定我們要講什么樣的語言,要保證雙方都能聽得懂。

比如我會英語和中文,你也會英語、中文,我們之間要做約定,選定一個語言比如都用中文來談話,有人說不對啊,你中文夾著的英文我也能聽得懂啊。

那是因為你的大腦很智能,它能智能地識別到交流的語言,而計算機可不是,你想想你的代碼寫 print 1,它還能打出 2 不成?

也就是計算機是死板的,我們的程序告訴它該怎么做,它就會生硬的怎么做。

需要一個協議
所以首先需要雙方定義一個協議,這樣計算機才能解析出正確的信息。

常見的三種協議形式
應用層一般有三種類型的協議形式,分別是:固定長度形式、特殊字符隔斷形式、header+body 形式。

固定長度形式:指的是協議的長度是固定的,比如100個字節為一個協議單元,那么讀取100個字節之后就開始解析。

優點就是效率較高,無腦讀一定長度就解析。

缺點就是死板,每次長度只能固定,不能超過限制的長度,并且短了還得填充,在 RPC 場景中不太合適,誰曉得參數啥的要多長,定長了浪費,定短了不夠。

特殊字符隔斷形式:其實就是定義一個特殊結束符,根據特殊的結束符來判斷一個協議單元的結束,比如用換行符等等。

這個協議的優點是長度自由,反正根據特殊字符來截斷,缺點就是需要一直讀,直到讀到一個完整的協議單元之后才能開始解析,然后假如傳輸的數據里面混入了這個特殊字符就出錯了。

header+body 形式:也就是頭部是固定長度的,然后頭部里面會填寫 body 的長度, body 是不固定長度的,這樣伸縮性就比較好了,可以先解析頭部,然后根據頭部得到 body 的 len 然后解析 body。

dubbo 協議就是屬于 header+body 形式,而且也有特殊的字符 0xdabb ,這是用來解決 TCP 網絡粘包問題的。

Dubbo 協議
Dubbo 支持的協議很多,我們就簡單的分析下 Dubbo 協議。

 

協議分為協議頭和協議體,可以看到 16 字節的頭部主要攜帶了魔法數,也就是之前說的 0xdabb,然后一些請求的設置,消息體的長度等等。

16 字節之后就是協議體了,包括協議版本、接口名字、接口版本、方法名字等等。

其實協議很重要,因為從中可以得知很多信息,而且只有懂了協議的內容,才能看得懂編碼器和解碼器在干嘛,我再截取一張官網對協議的解釋圖。

 

需要約定序列化器
網絡是以字節流的形式傳輸的,相對于我們的對象來說,我們對象是多維的,而字節流是一維的,我們需要把我們的對象壓縮成一維的字節流傳輸到對端。

然后對端再反序列化這些字節流變成對象。

序列化協議
其實從上圖的協議中可以得知 Dubbo 支持很多種序列化,我不具體分析每一種協議,就大致分析序列化的種類,萬變不離其宗。

序列化大致分為兩大類,一種是字符型,一種是二進制流。

字符型的代表就是 XML、JSON,字符型的優點就是調試方便,它是對人友好的,我們一看就能知道那個字段對應的哪個參數。

缺點就是傳輸的效率低,有很多冗余的東西,比如 JSON 的括號,對于網絡傳輸來說傳輸的時間變長,占用的帶寬變大。

還有一大類就是二進制流型,這種類型是對機器友好的,它的數據更加的緊湊,所以占用的字節數更小,傳輸更快。

缺點就是調試很難,肉眼是無法識別的,必須借用特殊的工具轉換。

更深層次的就不深入了,序列化還是有很多門道的,以后有機會再談。

Dubbo 默認用的是 hessian2 序列化協議。

所以實際落地還需要先約定好協議,然后再選擇好序列化方式構造完請求之后發送。

粗略的調用流程圖
我們來看一下官網的圖。

 

簡述一下就是客戶端發起調用,實際調用的是代理類,代理類最終調用的是 Client (默認Netty),需要構造好協議頭,然后將 Java 的對象序列化生成協議體,然后網絡調用傳輸。

服務端的 NettyServer接到這個請求之后,分發給業務線程池,由業務線程調用具體的實現方法。

但是這還不夠,因為 Dubbo 是一個生產級別的 RPC 框架,它需要更加的安全、穩重。

詳細的調用流程

 

前面已經分析過了客戶端也是要序列化構造請求的,為了讓圖更加突出重點,所以就省略了這一步,當然還有響應回來的步驟,暫時就理解為原路返回,下文會再做分析。

可以看到生產級別就得穩,因此服務端往往會有多個,多個服務端的服務就會有多個 Invoker,最終需要通過路由過濾,然后再通過負載均衡機制來選出一個 Invoker 進行調用。

當然 Cluster 還有容錯機制,包括重試等等。

請求會先到達 Netty 的 I/O 線程池進行讀寫和可選的序列化和反序列化,可以通過 decode.in.io控制,然后通過業務線程池處理反序列化之后的對象,找到對應 Invoker 進行調用。

調用流程-客戶端源碼分析
客戶端調用一下代碼。

 

  1. String hello = demoService.sayHello("world");  

調用具體的接口會調用生成的代理類,而代理類會生成一個 RpcInvocation 對象調用 MockClusterInvoker#invoke方法。

此時生成的 RpcInvocation 如下圖所示,包含方法名、參數類和參數值。

 

然后我們再來看一下 MockClusterInvoker#invoke 代碼。

 

可以看到就是判斷配置里面有沒有配置 mock, mock 的話就不展開分析了,我們來看看 this.invoker.invoke 的實現,實際上會調用 AbstractClusterInvoker#invoker 。

 

模板方法
這其實就是很常見的設計模式之一,模板方法。如果你經??丛创a的話你知道這個設計模式真的是太常見的。

模板方法其實就是在抽象類中定好代碼的執行骨架,然后將具體的實現延遲到子類中,由子類來自定義個性化實現,也就是說可以在不改變整體執行步驟的情況下修改步驟里面的實現,減少了重復的代碼,也利于擴展,符合開閉原則。

在代碼中就是那個 doInvoke由子類來實現,上面的一些步驟都是每個子類都要走的,所以抽到抽象類中。

路由和負載均衡得到 Invoker
我們再來看那個 list(invocation),其實就是通過方法名找 Invoker,然后服務的路由過濾一波,也有再造一個 MockInvoker 的。

 

然后帶著這些 Invoker 再進行一波 loadbalance 的挑選,得到一個 Invoker,我們默認使用的是 FailoverClusterInvoker,也就是失敗自動切換的容錯方式,其實關于路由、集群、負載均衡是獨立的模塊,如果展開講的話還是有很多內容的,所以需要另起一篇講,這篇文章就把它們先作為黑盒使用。

稍微總結一下就是 FailoverClusterInvoker 拿到 Directory 返回的 Invoker 列表,并且經過路由之后,它會讓 LoadBalance 從 Invoker 列表中選擇一個 Invoker。

最后FailoverClusterInvoker會將參數傳給選擇出的那個 Invoker 實例的 invoke 方法,進行真正的遠程調用,我們來簡單的看下 FailoverClusterInvoker#doInvoke,為了突出重點我刪除了很多方法。

 

發起調用的這個 invoke 又是調用抽象類中的 invoke 然后再調用子類的 doInvoker,抽象類中的方法很簡單我就不展示了,影響不大,直接看子類 DubboInvoker 的 doInvoke 方法。

 

調用的三種方式
從上面的代碼可以看到調用一共分為三種,分別是 oneway、異步、同步。

oneway還是很常見的,就是當你不關心你的請求是否發送成功的情況下,就用 oneway 的方式發送,這種方式消耗最小,啥都不用記,啥都不用管。

異步調用,其實 Dubbo 天然就是異步的,可以看到 client 發送請求之后會得到一個 ResponseFuture,然后把 future 包裝一下塞到上下文中,這樣用戶就可以從上下文中拿到這個 future,然后用戶可以做了一波操作之后再調用 future.get 等待結果。

同步調用,這是我們最常用的,也就是 Dubbo 框架幫助我們異步轉同步了,從代碼可以看到在 Dubbo 源碼中就調用了 future.get,所以給用戶的感覺就是我調用了這個接口的方法之后就阻塞住了,必須要等待結果到了之后才能返回,所以就是同步的。

可以看到 Dubbo 本質上就是異步的,為什么有同步就是因為框架幫我們轉了一下,而同步和異步的區別其實就是future.get 在用戶代碼被調用還是在框架代碼被調用。

再回到源碼中來,currentClient.request 源碼如下就是組裝 request 然后構造一個 future 然后調用 NettyClient 發送請求。

 

我們再來看一下 DefaultFuture 的內部,你有沒有想過一個問題,因為是異步,那么這個 future 保存了之后,等響應回來了如何找到對應的 future 呢?

這里就揭秘了!就是利用一個唯一 ID。

 

可以看到 Request 會生成一個全局唯一 ID,然后 future 內部會將自己和 ID 存儲到一個 ConcurrentHashMap。這個 ID 發送到服務端之后,服務端也會把這個 ID 返回來,這樣通過這個 ID 再去ConcurrentHashMap 里面就可以找到對應的 future ,這樣整個連接就正確且完整了!

我們再來看看最終接受到響應的代碼,應該就很清晰了。

先看下一個響應的 message 的樣子:

看到這個 ID 了吧,最終會調用 DefaultFuture#received的方法。

 

為了能讓大家更加的清晰,我再畫個圖:

 

到這里差不多客戶端調用主流程已經很清晰了,其實還有很多細節,之后的文章再講述,不然一下太亂太雜了。

發起請求的調用鏈如下圖所示:

 

處理請求響應的調用鏈如下圖所示

 

調用流程-服務端端源碼分析
服務端接收到請求之后就會解析請求得到消息,這消息又有五種派發策略:

 

默認走的是 all,也就是所有消息都派發到業務線程池中,我們來看下 AllChannelHandler 的實現。

 

就是將消息封裝成一個 ChannelEventRunnable 扔到業務線程池中執行,ChannelEventRunnable 里面會根據 ChannelState 調用對于的處理方法,這里是 ChannelState.RECEIVED,所以調用 handler.received,最終會調用 HeaderExchangeHandler#handleRequest,我們就來看下這個代碼。

 

這波關鍵點看到了吧,構造的響應先塞入請求的 ID,我們再來看看這個 reply 干了啥。

 

最后的調用我們已經清楚了,實際上會調用一個 Javassist 生成的代理類,里面包含了真正的實現類,之前已經分析過了這里就不再深入了,我們再來看看getInvoker 這個方法,看看怎么根據請求的信息找到對應的 invoker 的。

 

關鍵就是那個 serviceKey, 還記得之前服務暴露將invoker 封裝成 exporter 之后再構建了一個 serviceKey將其和 exporter 存入了 exporterMap 中吧,這 map 這個時候就起作用了!

這個 Key 就長這樣:

 

找到 invoker 最終調用實現類具體的方法再返回響應整個流程就完結了,我再補充一下之前的圖。

 

總結
今天的調用過程我再總結一遍應該差不多了。

首先客戶端調用接口的某個方法,實際調用的是代理類,代理類會通過 cluster 從 directory 中獲取一堆 invokers(如果有一堆的話),然后進行 router 的過濾(其中看配置也會添加 mockInvoker 用于服務降級),然后再通過 SPI 得到 loadBalance 進行一波負載均衡。

這里要強調一下默認的 cluster 是 FailoverCluster ,會進行容錯重試處理,這個日后再詳細分析。

現在我們已經得到要調用的遠程服務對應的 invoker 了,此時根據具體的協議構造請求頭,然后將參數根據具體的序列化協議序列化之后構造塞入請求體中,再通過 NettyClient 發起遠程調用。

服務端 NettyServer 收到請求之后,根據協議得到信息并且反序列化成對象,再按照派發策略派發消息,默認是 All,扔給業務線程池。

業務線程會根據消息類型判斷然后得到 serviceKey 從之前服務暴露生成的 exporterMap 中得到對應的 Invoker ,然后調用真實的實現類。

最終將結果返回,因為請求和響應都有一個統一的 ID, 客戶端根據響應的 ID 找到存儲起來的 Future, 然后塞入響應再喚醒等待 future 的線程,完成一次遠程調用全過程。

而且還小談了下模板方法這個設計模式,當然其實隱藏了很多設計模式在其中,比如責任鏈、裝飾器等等,沒有特意挑開來說,源碼中太常見了,基本上無處不在。

 

 

 

責任編輯:姜華 來源: 三太子敖丙
相關推薦

2021-09-03 08:50:50

Dubbo服務引用

2020-09-08 08:55:52

Dubbo服務全鏈路

2010-01-19 09:48:22

VB.NET調用過程

2021-01-19 09:19:33

RPC調用過程框架

2010-01-19 14:42:43

VB.NET調用過程重

2021-09-06 08:50:49

服務Dubbo參數

2023-04-14 08:19:27

2023-10-18 07:16:41

2023-06-01 08:10:56

2013-10-30 17:34:22

Clouda安裝使用

2022-04-06 08:47:03

Dubbo服務協議

2010-07-02 11:59:00

2018-08-10 10:23:40

服務器硬盤故障

2023-10-17 08:08:37

Dubbo服務注冊中心

2023-04-19 08:13:42

Dubbo服務注冊

2021-07-19 07:31:08

服務調用Dubbo

2024-09-14 14:14:26

Dubbo框架微服務

2025-02-27 00:00:55

Dubbo服務不兼容

2010-06-07 16:51:06

rsync 使用

2021-03-25 14:25:24

Linux運維Linux系統
點贊
收藏

51CTO技術棧公眾號

丝袜国产在线| 国产精品久久久久久久免费| 久久夜色电影| 一本大道久久a久久综合| 欧美深深色噜噜狠狠yyy| 亚洲视频一区在线播放| 亚洲视频综合| 夜夜嗨av色综合久久久综合网 | 欧美成人久久久免费播放| 成人亚洲精品| 色偷偷一区二区三区| 综合色婷婷一区二区亚洲欧美国产| 亚洲av无码一区二区三区性色| 国产精品综合色区在线观看| 久久精品国产99国产精品澳门| 国产真实乱人偷精品| 偷拍自拍亚洲| 日本久久一区二区| 欧美深夜福利视频| 成人看片免费| 中文字幕在线观看一区| 麻豆精品视频| 成人毛片在线精品国产| 久久99精品国产91久久来源| 欧美性做爰毛片| 精品深夜av无码一区二区老年| 日韩专区精品| 一本一本久久a久久精品牛牛影视| 尤物网站在线观看| 欧美日韩黄色| 3751色影院一区二区三区| 亚洲 中文字幕 日韩 无码| 黄色大片在线| 亚洲欧美精品午睡沙发| 亚洲日本欧美在线| 国产资源在线播放| 久久久久久亚洲综合| 国内成+人亚洲| 亚洲黄色a级片| 国产精品99久| 91传媒视频在线观看| 国产精品久久久久久久免费看 | 国产精品88久久久久久| 亚洲午夜国产成人av电影男同| 久久久久国产精品无码免费看| 国内精品视频| 欧美一区二区在线免费播放| 欧美大片久久久| 色综合视频一区二区三区44| 欧美视频一区在线观看| 国产小视频精品| 你懂得影院夜精品a| 色88888久久久久久影院野外| 国产精品va无码一区二区| 国产免费拔擦拔擦8x高清在线人| 亚洲国产美国国产综合一区二区| www.日本三级| 国产污视频在线播放| 午夜久久福利影院| 亚洲中文字幕无码专区| 涩涩视频在线播放| 91久久精品一区二区| 在线视频日韩一区| 久久久久伊人| 69堂国产成人免费视频| 青青草精品在线| 成人av综合网| 日韩国产中文字幕| av男人的天堂av| 日韩成人激情| 久久亚洲精品一区二区| 精品无码人妻一区二区三区品| 亚洲小说欧美另类婷婷| 91成人在线播放| 亚洲 国产 日韩 欧美| 久久66热偷产精品| 高清国产一区| 国产在线91| 综合在线观看色| www.国产在线视频| 日韩成人动漫| 日韩欧美中文一区二区| 在线观看国产网站| 日韩综合在线| 国内精品久久久久影院优 | 欧美日韩成人综合天天影院 | 国产精品乱战久久久| 日韩av中文字幕在线| 国产又粗又猛又爽又黄av| 99久久99久久精品国产片果冰| 欧美高清视频在线观看| 伊人中文字幕在线观看| 国产美女精品在线| 欧美国产一区二区在线| 成人三级网址| 一本到一区二区三区| 午夜视频在线观| 免费成人高清在线视频theav| 色婷婷av一区二区三区在线观看| 国产精品23p| 裸体在线国模精品偷拍| 国产乱码精品一区二区三区不卡| yourporn在线观看视频| 亚洲综合av网| av亚洲天堂网| 亚洲另类春色校园小说| 精品中文字幕在线| 欧美成人一区二区视频| 北岛玲一区二区三区四区| 亚洲最大免费| 全亚洲第一av番号网站| 日韩久久精品一区| 日本视频在线免费| 欧美亚洲网站| 国产精品伊人日日| 在线看三级电影| 欧美日韩国产小视频在线观看| 野外性满足hd| 影音先锋亚洲电影| 亚洲综合视频1区| 91福利在线视频| 色欲综合视频天天天| 四虎永久免费观看| 一区二区三区网站| 国产日韩在线免费| 国产高清一级毛片在线不卡| 欧美午夜xxx| 艳妇乳肉亭妇荡乳av| 欧美激情自拍| 91免费版黄色| av免费网站在线观看| 欧美日本在线一区| 欧美性受xxxx黑人| 久久综合网络一区二区| 久久草.com| 国产精品xx| 精品88久久久久88久久久| 久久99久久99精品免费看小说| 日精品一区二区| 欧美影视一区二区| 成人直播视频| 亚洲深夜福利在线| 波多野结衣绝顶大高潮| 久久久久国产精品厨房| 国产xxxxx在线观看| 国产成人1区| 国产成人在线视频| 992tv免费直播在线观看| 色欧美乱欧美15图片| 精品少妇人妻一区二区黑料社区 | 久久99亚洲热视| 精品国产九九九| 亚洲一区免费观看| 日本国产在线视频| 国产一区二区三区成人欧美日韩在线观看| 狠狠色噜噜狠狠狠狠色吗综合| 黄视频免费在线看| 亚洲精品色婷婷福利天堂| 久久精品无码av| 国产欧美一二三区| 久久久精品高清| 一级欧洲+日本+国产| 91高跟黑色丝袜呻吟在线观看| 麻豆蜜桃在线| 国产视频精品在线| 中文资源在线播放| **网站欧美大片在线观看| av影片在线播放| 国产精品色网| 亚洲精品美女久久7777777| 亚洲精品69| 欧美激情奇米色| 男女污污视频在线观看| 欧美午夜精品久久久久久孕妇| 波兰性xxxxx极品hd| 国产精品1区二区.| 午夜肉伦伦影院| 99re6这里只有精品| 999国内精品视频在线| 2020av在线| 中文字幕在线视频日韩| www.日本在线观看| 色婷婷亚洲精品| 尤物在线免费视频| 99久久免费精品| 亚洲精品综合在线观看| 激情欧美一区| 亚洲三区四区| 国产伦精品一区二区三区在线播放| 国产成+人+综合+亚洲欧美丁香花| 日本在线看片免费人成视1000| 精品奇米国产一区二区三区| jizz国产在线观看| 亚洲制服丝袜在线| 91麻豆精品国产91久久综合| 国产精品69久久久久水密桃| 超碰影院在线观看| 狠狠干综合网| 亚洲国产欧美不卡在线观看| 2023国产精华国产精品| 国产精品久久久久久久电影| 欧美寡妇性猛交xxx免费| 一区二区三区精品99久久| 亚洲伦理在线观看| 欧美日韩小视频| 日韩黄色一级大片| 亚洲精品自拍动漫在线| 国产精久久一区二区三区| 成人夜色视频网站在线观看| 亚洲欧美久久久久| 亚洲永久在线| 999一区二区三区| 婷婷久久国产对白刺激五月99| 九九99久久| 成人搞黄视频| 91夜夜揉人人捏人人添红杏| 欧美91看片特黄aaaa| 久久久久国产精品www| 欧美极品视频| 中文字幕久久久av一区| 国产在线观看黄| 精品亚洲一区二区| 天堂在线观看av| 欧美成人激情免费网| 亚洲一区精品在线观看| 在线一区二区三区| 欧美a视频在线观看| 午夜精品久久一牛影视| 激情四射综合网| 亚洲激情成人在线| 中文字幕另类日韩欧美亚洲嫩草| 国产精品沙发午睡系列990531| 国产精品1000部啪视频| 成人av电影在线网| 国产极品一区二区| av资源网一区| 亚洲第九十七页| av不卡在线观看| xxxx黄色片| 成人污视频在线观看| 韩国一区二区三区四区| 国产麻豆精品视频| 五月天激情视频在线观看| 日韩av成人高清| 91国产精品视频在线观看| 日本亚洲视频在线| 亚洲污视频在线观看| 日日噜噜夜夜狠狠视频欧美人| 日日摸天天爽天天爽视频| 久久精品成人| 国产熟人av一二三区| 欧美aa在线视频| www.久久久精品| 国产一区在线观看视频| 中文字幕亚洲日本| 成人av综合在线| 97人妻天天摸天天爽天天| 久久只精品国产| 色婷婷av777| 亚洲国产精品ⅴa在线观看| 黄色av片三级三级三级免费看| 国产精品麻豆久久久| 久久国产美女视频| 亚洲在线免费播放| 中文字幕在线字幕中文| 一本到三区不卡视频| 中文字幕av网站| 91精品国产综合久久香蕉的特点| 国产成人精品白浆久久69| 精品国产亚洲在线| 香蕉视频国产在线| 伊人久久精品视频| 18加网站在线| 97人洗澡人人免费公开视频碰碰碰| 日本不卡一二三| 成人做爽爽免费视频| 国产ts一区| 色综合久久久久久久久五月| 天天av综合| 成品人视频ww入口| 日日摸夜夜添夜夜添国产精品 | 欧美男女爱爱视频| 免费在线亚洲欧美| 国产乱女淫av麻豆国产| 国产+成+人+亚洲欧洲自线| 久久午夜夜伦鲁鲁片| 中文字幕+乱码+中文字幕一区| 日韩在线观看视频一区二区| 午夜精品免费在线| 97超碰国产在线| 日韩精品在线免费| 国产色在线观看| 日本久久亚洲电影| 久久国产精品美女| 日韩欧美第二区在线观看| 欧美日韩18| 午夜激情av在线| 91在线视频官网| 少妇人妻丰满做爰xxx| 91福利国产精品| 日韩一区二区三区不卡| www.日韩不卡电影av| 中文字幕高清在线播放| 99re资源| 久久伦理在线| 少妇高清精品毛片在线视频| 粉嫩久久99精品久久久久久夜| 美女网站视频色| 91国偷自产一区二区使用方法| 欧性猛交ⅹxxx乱大交| 日韩在线精品视频| 免费日韩电影| 极品校花啪啪激情久久| 一区二区三区午夜视频| 性chinese极品按摩| 久久久美女毛片| 日韩久久久久久久久| 欧美一级二级在线观看| seseavlu视频在线| 欧美中文在线视频| 精品国产一区二区三区不卡蜜臂 | 日本精品久久久久中文| 欧美日韩国产中文精品字幕自在自线| 99久久精品国产一区二区成人| 在线a欧美视频| 另类中文字幕国产精品| 欧美日韩在线一区二区三区| 一本综合精品| 影音先锋黄色资源| 亚洲成人自拍网| 高清乱码毛片入口| 久久久亚洲网站| 国产精品白浆| 国产xxxx振车| 成人免费av在线| 日本三级网站在线观看| 精品国产123| 成人性生交大片免费看网站| 北条麻妃高清一区| 亚洲视频观看| 动漫美女无遮挡免费| 亚洲va在线va天堂| 三级网站在线看| 性色av一区二区三区| 久久精品国产亚洲5555| 欧美视频在线免费播放| 91视频一区二区三区| 五月婷婷开心网| 亚洲精品视频免费在线观看| 欧美大片免费观看网址| 欧美伦理一区二区| 日韩精品一级二级 | 欧美视频日韩视频| 自拍视频在线网| 96精品久久久久中文字幕| 欧美日韩国产精品一区二区亚洲| 日本久久久久久久久久| 亚洲国产成人av网| 神马亚洲视频| 国产精品久久久久久搜索| 99久久精品国产亚洲精品 | 欧美日韩成人在线播放| 成人另类视频| 成熟老妇女视频| 国产精品高潮呻吟| 狠狠综合久久av一区二区| 91精品成人久久| 欧美中文一区二区| 国产黄色一区二区三区| 激情成人中文字幕| 成人亚洲综合天堂| 亚洲在线第一页| 午夜在线一区| 啪啪一区二区三区| 精品国产免费视频| 欧美xx视频| 香蕉视频免费版| 91浏览器在线视频| 国产精品无码免费播放| 韩剧1988在线观看免费完整版| 精品国产一区一区二区三亚瑟 | 中文字幕av网站| 国内精品国产三级国产在线专| 日本大胆欧美| 无码人妻精品一区二区三| 在线视频国内自拍亚洲视频| a级在线观看| 日本一区二区免费看| 国产99久久久国产精品潘金| 国产九色91回来了| 欧美激情亚洲综合一区| 欧美亚洲国产激情| 荫蒂被男人添免费视频| 欧美狂野另类xxxxoooo| 天堂av在线网| av久久久久久| 中文字幕免费不卡| 香蕉视频911| 99久久伊人精品影院| 麻豆精品在线看|