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

Spring Cloud構建微服務架構:分布式服務跟蹤(收集原理)

開發(fā) 開發(fā)工具 分布式
我們介紹一下關于Zipkin收集跟蹤信息的過程細節(jié),以幫助我們更好地理解Sleuth生產跟蹤信息以及輸出跟蹤信息的整體過程和工作原理。

在本節(jié)內容之前,我們已經對如何引入Sleuth跟蹤信息和搭建Zipkin服務端分析跟蹤延遲的過程做了詳細的介紹,相信大家對于Sleuth和Zipkin已經有了一定的感性認識。接下來,我們介紹一下關于Zipkin收集跟蹤信息的過程細節(jié),以幫助我們更好地理解Sleuth生產跟蹤信息以及輸出跟蹤信息的整體過程和工作原理。

[[226135]]

數據模型

我們先來看看Zipkin中關于跟蹤信息的一些基礎概念。由于Zipkin的實現(xiàn)借鑒了Google的Dapper,所以它們有著類似的核心術語,主要有下面幾個內容:

  • Span:它代表了一個基礎的工作單元。我們以HTTP請求為例,一次完整的請求過程在客戶端和服務端都會產生多個不同的事件狀態(tài)(比如下面所說的四個核心Annotation所標識的不同階段),對于同一個請求來說,它們屬于一個工作單元,所以同一HTTP請求過程中的四個Annotation同屬于一個Span。每一個不同的工作單元都通過一個64位的ID來唯一標識,稱為Span ID。另外,在工作單元中還存儲了一個用來串聯(lián)其他工作單元的ID,它也通過一個64位的ID來唯一標識,稱為Trace ID。在同一條請求鏈路中的不同工作單元都會有不同的Span ID,但是它們的Trace ID是相同的,所以通過Trace ID可以將一次請求中依賴的所有依賴請求串聯(lián)起來形成請求鏈路。除了這兩個核心的ID之外,Span中還存儲了一些其他信息,比如:描述信息、事件時間戳、Annotation的鍵值對屬性、上一級工作單元的Span ID等。
  • Trace:它是由一系列具有相同Trace ID的Span串聯(lián)形成的一個樹狀結構。在復雜的分布式系統(tǒng)中,每一個外部請求通常都會產生一個復雜的樹狀結構的Trace。
  • Annotation:它用來及時地記錄一個事件的存在。我們可以把Annotation理解為一個包含有時間戳的事件標簽,對于一個HTTP請求來說,在Sleuth中定義了下面四個核心Annotation來標識一個請求的開始和結束:

cs(Client Send):該Annotation用來記錄客戶端發(fā)起了一個請求,同時它也標識了這個HTTP請求的開始。

sr(Server Received):該Annotation用來記錄服務端接收到了請求,并準備開始處理它。通過計算sr與cs兩個Annotation的時間戳之差,我們可以得到當前HTTP請求的網絡延遲。

ss(Server Send):該Annotation用來記錄服務端處理完請求后準備發(fā)送請求響應信息。通過計算ss與sr兩個Annotation的時間戳之差,我們可以得到當前服務端處理請求的時間消耗。

cr(Client Received):該Annotation用來記錄客戶端接收到服務端的回復,同時它也標識了這個HTTP請求的結束。通過計算cr與cs兩個Annotation的時間戳之差,我們可以得到該HTTP請求從客戶端發(fā)起開始到接收服務端響應的總時間消耗。

  • BinaryAnnotation:它用來對跟蹤信息添加一些額外的補充說明,一般以鍵值對方式出現(xiàn)。比如:在記錄HTTP請求接收后執(zhí)行具體業(yè)務邏輯時,此時并沒有默認的Annotation來標識該事件狀態(tài),但是有BinaryAnnotation信息對其進行補充。

收集機制

在理解了Zipkin的各個基本概念之后,下面我們結合前面章節(jié)中實現(xiàn)的例子來詳細介紹和理解Spring Cloud Sleuth是如何對請求調用鏈路完成跟蹤信息的生產、輸出和后續(xù)處理的。

首先,我們來看看Sleuth在請求調用時是怎么樣來記錄和生成跟蹤信息的。下圖展示了我們在本章節(jié)中實現(xiàn)示例的運行全過程:客戶端發(fā)送了一個HTTP請求到trace-1,trace-1依賴于trace-2的服務,所以trace-1再發(fā)送一個HTTP請求到trace-2,待trace-2返回響應之后,trace-1再組織響應結果返回給客戶端。

在上圖的請求過程中,我們?yōu)檎麄€調用過程標記了10個標簽,它們分別代表了該請求鏈路運行過程中記錄的幾個重要事件狀態(tài),我們根據事件發(fā)生的時間順序我們?yōu)檫@些標簽做了從小到大的編號,1代表請求的開始、10代表請求的結束。每個標簽中記錄了一些我們上面提到過的核心元素:Trace ID、Span ID以及Annotation。由于這些標簽都源自一個請求,所以他們的Trace ID相同,而標簽1和標簽10是起始和結束節(jié)點,它們的Trace ID與Span ID是相同的。

根據Span ID,我們可以發(fā)現(xiàn)在這些標簽中一共產生了4個不同ID的Span,這4個Span分別代表了這樣4個工作單元:

  • Span T:記錄了客戶端請求到達trace-1和trace-1發(fā)送請求響應的兩個事件,它可以計算出了客戶端請求響應過程的總延遲時間。
  • Span A:記錄了trace-1應用在接收到客戶端請求之后調用處理方法的開始和結束兩個事件,它可以計算出trace-1應用用于處理客戶端請求時,內部邏輯花費的時間延遲。
  • Span B:記錄了trace-1應用發(fā)送請求給trace-2應用、trace-2應用接收請求,trace-2應用發(fā)送響應、trace-1應用接收響應四個事件,它可以計算出trace-1調用trace-2的總體依賴時間(cr - cs),也可以計算出trace-1到trace-2的網絡延遲(sr - cs),也可以計算出trace-2應用用于處理客戶端請求的內部邏輯花費的時間延遲(ss - sr)。
  • Span C:記錄了trace-2應用在接收到trace-1的請求之后調用處理方法的開始和結束兩個事件,它可以計算出trace-2應用用于處理來自trace-1的請求時,內部邏輯花費的時間延遲。

在圖中展現(xiàn)的這個4個Span正好對應了Zipkin查看跟蹤詳細頁面中的顯示內容,它們的對應關系如下圖所示:

仔細的讀者可能還有這樣一個疑惑:我們在Zipkin服務端查詢跟蹤信息時(如下圖所示),在查詢結果頁面中顯示的spans是5,而點擊進入跟蹤明細頁面時,顯示的Total Spans又是4,為什么會出現(xiàn)span數量不一致的情況呢?

實際上這兩邊的span數量內容有不同的含義,在查詢結果頁面中的5 spans代表了總共接收的Span數量,而在詳細頁面中的Total Span則是對接收Span進行合并后的結果,也就是前文中我們介紹的4個不同ID的Span內容。下面我們來詳細研究一下Zipkin服務端收集客戶端跟蹤信息的過程,看看它到底收到了哪些具體的Span內容,從而來理解Zipkin中收集到的Span總數量。

為了更直觀的觀察Zipkin服務端的收集過程,我們可以對之前實現(xiàn)的消息中間件方式收集跟蹤信息的程序進行調試。通過在Zipkin服務端的消息通道監(jiān)聽程序中增加斷點,我們就能清楚的知道客戶端都發(fā)送了一些什么信息到Zipkin的服務端。在spring-cloud-sleuth-zipkin-stream依賴包中的代碼并不多,我們很容易的就能找到定義消息通道監(jiān)聽的實現(xiàn)類:org.springframework.cloud.sleuth.zipkin.stream.ZipkinMessageListener。它的具體實現(xiàn)如下所示,其中SleuthSink.INPUT定義了監(jiān)聽的輸入通道,默認會使用名為sleuth的主題,我們也可以通過Spring Cloud Stream的配置對其進行修改。

  1. @MessageEndpoint 
  2. @Conditional(NotSleuthStreamClient.class) 
  3. public class ZipkinMessageListener { 
  4.    
  5.     final Collector collector; 
  6.  
  7.     @ServiceActivator(inputChannel = SleuthSink.INPUT) 
  8.     public void sink(Spans input) { 
  9.         List<zipkin.Span> converted = ConvertToZipkinSpanList.convert(input); 
  10.         this.collector.accept(converted, Callback.NOOP); 
  11.     } 
  12.      
  13.     ... 
  14.  

從通道監(jiān)聽方法的定義中我們可以看到Sleuth與Zipkin在整合的時候是有兩個不同的Span定義的,一個是消息通道的輸入對象org.springframework.cloud.sleuth.stream.Spans,它是sleuth中定義的用于消息通道傳輸的Span對象,每個消息中包含的Span信息定義在org.springframework.cloud.sleuth.Span對象中,但是真正在zipkin服務端使用的并非這個Span對象,而是zipkin自己的zipkin.Span對象。所以,在消息通道監(jiān)聽處理方法中,對sleuth的Span做了處理,每次接收到sleuth的Span之后就將其轉換成Zipkin的Span。

下面我們可以嘗試在sink(Spans input)方法實現(xiàn)的***行代碼中加入斷點,并向trace-1發(fā)送一個請求,觸發(fā)跟蹤信息發(fā)送到RabbitMQ上。此時我們通過DEBUG模式可以發(fā)現(xiàn)消息通道中都接收到了兩次輸入,一次來自trace-1,一次來自trace-2。下面兩張圖分別展示了來自trace-1和trace-2輸出的跟蹤消息,其中trace-1的跟蹤消息包含了3條span信息,trace-2的跟蹤消息包含了2條span信息,所以在這個請求調用鏈上,一共發(fā)送了5個span信息,也就是我們在Zipkin搜索結果頁面中看到的spans數量信息。

點開一個具體的Span內容,我們可以看到如下所示的結構,它記錄了Sleuth中定義的Span詳細信息,包括該Span的開始時間、結束時間、Span的名稱、Trace ID、Span ID、Tags(對應Zipkin中的BinaryAnnotation)、Logs(對應Zipkin中的Annotation)等我們之前提到過的核心跟蹤信息。

介紹到這里仔細的讀者可能會有一個這樣的疑惑,在明細信息中展示的Trace ID和Span ID的值為什么與列表展示的概要信息中的Trace ID和Span ID的值不一樣呢?實際上,Trace ID和Span ID都是使用long類型存儲的,在DEBUG模式下查看其明細時自然是long類型,也就是它的原始值,但是在查看Span對象的時候,我們看到的是通過toString()函數處理過的值,從sleuth的Span源碼中我們可以看到如下定義,在輸出Trace ID和Span ID時都調用了idToHex函數將long類型的值轉換成了16進制的字符串值,所以在DEBUG時我們會看到兩個不一樣的值。

  1. public String toString() { 
  2.     return "[Trace: " + idToHex(this.traceId) + ", Span: " + idToHex(this.spanId) 
  3.             + ", Parent: " + getParentIdIfPresent() + ", exportable:" + this.exportable + "]"
  4.  
  5. public static String idToHex(long id) { 
  6.     return Long.toHexString(id); 

在接收到Sleuth之后我們將程序繼續(xù)執(zhí)行下去,可以看到經過轉換后的Zipkin的Span內容,它們保存在一個名為converted的列表中,具體內容如下所示:

上圖展示了轉換后的Zipkin Span對象的詳細內容,我們可以看到很多熟悉的名稱,也就是之前我們介紹的關于zipkin中的各個基本概念,而這些基本概念的值我們也都可以在之前sleuth的原始span中找到,其中annotations和binaryAnnotations有一些特殊,在sleuth定義的span中沒有使用相同的名稱,而是使用了logs和tags來命名。從這里的詳細信息中,我們可以直觀的看到annotations和binaryAnnotations的作用,其中annotations中存儲了當前Span包含的各種事件狀態(tài)以及對應事件狀態(tài)的時間戳,而binaryAnnotations則存儲了對事件的補充信息,比如上圖中存儲的就是該HTTP請求的細節(jié)描述信息,除此之外,它也可以存儲對調用函數的詳細描述(如下圖所示)。

下面我們再來詳細看看通過調試消息監(jiān)聽程序接收到的這5個Span內容。首先,我們可以發(fā)現(xiàn)每個Span中都包含有3個ID信息,其中除了標識Span自身的ID以及用來標識整條鏈路的traceId之外,還有一個之前沒有提過的parentId,它是用來標識各Span父子關系的ID(它的值來自與上一步執(zhí)行單元Span的ID) ,通過parentId的定義我們可以為每個Span找到它的前置節(jié)點,從而定位每個Span在請求調用鏈中的確切位置。在每條調用鏈路中都有一個特殊的Span,它的parentId為null,這類Span我們稱它為Root Span,也就是這條請求調用鏈的根節(jié)點。為了弄清楚這些Span之間的關系,我們可以從Root Span開始來整理出整條鏈路的Span內容。下表展示了我們從Root Span開始,根據各個Span的父子關系***整理出的結果:

上表中的Host代表了該Span是從哪個應用發(fā)送過來的;Span ID是當前Span的唯一標識;Parent Span ID代表了上一執(zhí)行單元的Span ID;Annotation代表了該Span中記錄的事件(這里主要用來記錄HTTP請求的四個階段,表中內容作了省略處理,只記錄了Annotation名稱(sr代表服務端接收請求,ss代表服務端發(fā)送請求,cs代表客戶端發(fā)送請求,cr代表客戶端接收請求),省略了一些其他細節(jié)信息,比如服務名、時間戳、IP地址、端口號等信息);Binary Annotation代表了事件的補充信息(Sleuth的原始Span記錄更為詳細,Zipkin的Span處理后會去掉一些內容,對于有Annotation標識的信息,不再使用Binary Annotation補充,在上表中我們只記錄了服務名、類名、方法名,同樣省略了一些其他信息,比如:時間戳、IP地址、端口號等信息)。

通過收集到的Zipkin Span詳細信息,我們很容易的可以將它們與本節(jié)開始時介紹的一次調用鏈路中的10個標簽內容聯(lián)系起來:

  • Span ID = T的標簽有2個,分別是序號1和10,它們分別表示這次請求的開始和結束。它們對應了上表中ID為e9a933ec50d180d6的Span,該Span的內容在標簽10執(zhí)行結束后,由trace-1將標簽1和10合并成一個Span發(fā)送給Zipkin Server。
  • Span ID = A的標簽有2個,分別是序號2和9,它們分別表示了trace-1請求接收后,具體處理方法調用的開始和結束。該Span的內容在標簽9執(zhí)行結束后,由trace-1將標簽2和9合并成一個Span發(fā)送給Zipkin Server。
  • Span ID = B的標簽有4個,分別是序號3、4、7、8,該Span比較特殊,它的產生跨越了兩個實例,其中標簽3和8是由trace-1生成的,而標簽4和7則是由trace-2生成的,所以該標簽會拆分成兩個Span內容發(fā)送給Zipkin Server。trace-1會在標簽8結束的時候將標簽3和8合并成一個Span發(fā)送給Zipkin Server,而trace-2會在標簽7結束的時候將標簽4和7合并成一個Span發(fā)送給Zipkin Server。
  • Span ID = C的標簽有2個,分別是序號5和6,它們分別表示了trace-2請求接收后,具體處理方法調用的開始和結束。該Span的內容在標簽6執(zhí)行結束后,由trace-2將標簽2和9合并成一個Span發(fā)送給Zipkin Server。

所以,根據上面的分析,Zipkin總共會收到5個Span:一個Span T,一個Span A,兩個Span B,一個Span C。結合之前請求鏈路的標簽圖和這里的Span記錄,我們可以總結出如下圖所示的Span收集過程,讀者可以參照此圖來理解Span收集過程的處理邏輯以及各個Span之間的關系。

雖然,Zipkin服務端接收到了5個Span,但就如前文中分析的那樣,其中有兩個Span ID=B的標簽,由于它們來自于同一個HTTP請求(trace-1對trace-2的服務調用),概念上它們屬于同一個工作單元,因此Zipkin服務端在前端展現(xiàn)分析詳情時會將這兩個Span合并了來顯示,而合并后的Span數量就是在請求鏈路詳情頁面中Total Spans的數量。

下圖是本章示例的一個請求鏈路詳情頁面,在頁面中顯示了各個Span的延遲統(tǒng)計,其中第三條Span信息就是trace-1對trace-2的HTTP請求調用,通過點擊它可以查看該Span的詳細信息,點擊后會以模態(tài)框的方式彈出Span詳細信息(如圖下半部分),在彈出框中詳細展示了Span的Annotation和BinaryAnnotation信息,在Annotation區(qū)域我們可以看到它同時包含了trace-1和trace-2發(fā)送的Span信息,而在BinaryAnnotation區(qū)域則展示了該HTTP請求的詳細信息。

完整示例:

讀者可以根據喜好選擇下面的兩個倉庫中查看trace-1和trace-2兩個項目:

Github:https://github.com/dyc87112/SpringCloud-Learning/

Gitee:https://gitee.com/didispace/SpringCloud-Learning/

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉載請通過51CTO聯(lián)系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2018-03-13 16:42:26

分布式服務跟蹤

2018-04-18 16:07:49

Spring Clou微服務分布式

2018-03-02 16:11:29

Spring Clou分布式服務跟蹤

2018-04-09 13:56:13

微服務架構分布式

2018-04-02 15:01:31

微服務架構分布式服務

2017-07-28 16:41:53

Spring Clou微服務架構

2018-05-23 15:58:27

Spring Clou微服務架構

2018-07-19 14:58:14

Spring Clou微服務架構

2021-06-09 09:00:00

微服務架構技術

2017-06-26 09:06:10

Spring Clou微服務架構

2017-09-04 16:15:44

服務網關架構

2020-05-26 11:59:30

日志鏈路微服務架構

2017-07-03 09:50:07

Spring Clou微服務架構

2017-08-10 11:15:05

Spring Clou微服務架構

2017-08-09 15:50:47

Spring Clou微服務架構

2023-09-12 22:58:51

分布式架構微服務

2023-08-25 16:26:49

微服務架構

2017-07-04 17:35:46

微服務架構Spring Clou

2017-06-25 13:33:25

Spring Clou微服務架構

2017-12-20 15:37:39

Spring Clou微服務架構
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 成人国产精品av| 国产白丝一区二区三区 | 乱码第一页成人| www.久久久久| 这里只有精品在线观看视频| 8av国产精品爽爽ⅴa在线观看| 日韩美女啊v在线免费观看| 国产精品国产亚洲精品看不卡15| 波多野结衣二区三区| 亚洲色图88| 亚洲午夜激情免费视频| 色婷婷狠狠18禁久久| 亚洲成人看片| 亚洲曰韩产成在线| 亚洲啪啪av| 婷婷丁香一区二区三区| 国产综合色在线视频区| 97免费视频在线| 国产精品成人69xxx免费视频| 99re6热只有精品免费观看| 色综合久久99| 可以看毛片的网址| 成人欧美在线| 国产精品美女久久久久久2018 | 日韩在线观看视频一区| 精品一区二区三区视频在线观看 | 日韩精品一区二区亚洲av| 亚洲精品一区二区在线看| 亚洲欧美日韩另类| 精品人妻在线视频| 欧美中文高清| 6080国产精品一区二区| 五月婷婷深爱五月| 亚洲精品mv| 精品国产成人av| 精品一二三四五区| a毛片在线观看| 国产精品卡一卡二卡三| 日本亚洲导航| 国产理论电影在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 91嫩草在线| 国产a级免费视频| 韩国女主播成人在线| 国产精品一区久久| 毛片在线免费播放| 久久一综合视频| 日本免费在线精品| 人人爽人人爽人人片av| 亚久久调教视频| 热久久美女精品天天吊色| 日韩av女优在线观看| 国产精品mm| 久久久久久久久网站| 欧美精品一级片| 好吊日精品视频| 欧美精品18videosex性欧美| 国产一级二级三级| 伊人影院久久| 5566日本婷婷色中文字幕97| 日韩精品一区二区亚洲av| 狂野欧美一区| 国产精品日韩在线播放| 在线观看黄色国产| 国产精品综合av一区二区国产馆| 亚洲xxx大片| 日本国产在线观看| 国产午夜精品久久久久久免费视 | 国产视频一区二区三区四区| 四虎精品一区二区三区| 国产亚洲一区二区三区四区 | 国产嫩草一区二区三区在线观看| 理论片中文字幕| 久久婷婷国产综合精品青草| 美女精品国产| 久久99精品久久| 亚洲综合一区二区三区| 欧美牲交a欧美牲交aⅴ免费真| 日韩三区在线| 欧美一区二区三区不卡| 久久久久国产精品无码免费看| 久久av超碰| 久久韩国免费视频| 日韩 国产 在线| 美日韩一区二区| 99视频免费观看蜜桃视频| 青青草免费观看免费视频在线| 中文字幕免费在线观看视频一区| 国产免费xxx| 亚洲深夜视频| 51精品国自产在线| 国产福利短视频| 99精品视频在线观看播放| 久久久久久国产| 久久久999久久久| 粉嫩aⅴ一区二区三区四区| 欧美大陆一区二区| 中文字幕中文字幕在线十八区 | 欧美激情中文字幕在线| 波多野结衣黄色网址| 国产精品乡下勾搭老头1| 免费国产在线精品一区二区三区| 国产激情在线观看| 日韩欧美成人区| 成年人看片网站| 成人午夜国产| 2018中文字幕一区二区三区| a级片在线视频| 国产女同性恋一区二区| 欧美 日韩 亚洲 一区| 亚洲网站三级| 亚洲少妇中文在线| 日本少妇裸体做爰| 国产精选一区二区三区| 亚洲成人第一| 美女福利一区二区三区| 亚洲精品一区二区三区香蕉| 国产乱子轮xxx农村| 美女网站久久| 久久狠狠久久综合桃花| 色爱综合区网| 欧美一区二区三区免费| 呻吟揉丰满对白91乃国产区| 久久久噜噜噜| 六月婷婷久久| 国产夫妻在线播放| 亚洲成人网av| 久久人人爽人人爽人人| 国产美女av一区二区三区| 一本一道久久a久久精品综合| 欧美黑人粗大| 日韩精品在线电影| 天天操天天爽天天干| 丁香天五香天堂综合| 91九色国产ts另类人妖| 亚洲精品自拍| 久久亚洲精品中文字幕冲田杏梨| 夜夜爽8888| 国产精品污污网站在线观看| 免费男同深夜夜行网站| 自拍偷拍一区| 日本高清不卡在线| 欧美日韩国产亚洲沙发| 欧美午夜www高清视频| 亚洲激情 欧美| 国产精品久久久亚洲一区| 精品伦精品一区二区三区视频| 狂野欧美性猛交xxxxx视频| 精品乱码亚洲一区二区不卡| 欧美精品色哟哟| 成人激情综合网站| 欧美变态另类刺激| 天天做夜夜做人人爱精品 | 成人毛片在线播放| 久久综合久久99| 欧美黄色一级片视频| 菠萝蜜一区二区| 国产一区香蕉久久| av在线影院| 精品国产成人系列| 男人的天堂一区二区| 久久久另类综合| 日日噜噜夜夜狠狠| 亚洲91视频| 国产精品区一区| sis001欧美| 俺去亚洲欧洲欧美日韩| 精品欧美一区二区精品少妇| 午夜精品久久久久影视| 制服丝袜第二页| 日本欧美久久久久免费播放网| 在线观看成人av电影| 欧美经典一区| 欧美一性一乱一交一视频| 成人欧美亚洲| 日韩欧美美女一区二区三区| 91精品国产乱码久久久张津瑜| 久久久精品中文字幕麻豆发布| 亚洲另类第一页| 亚洲无线一线二线三线区别av| 久久亚洲综合网| 四虎国产精品永久在线国在线| 色综合男人天堂| 你懂的在线免费观看| 欧美精品123区| 97免费在线观看视频| 欧美高清在线精品一区| 91亚洲一线产区二线产区| 久久精品系列| 欧美国产视频一区| 欧美一级淫片| 福利视频一区二区三区| 日韩电影av| 九九热精品在线| 国产免费视频在线| 欧美xingq一区二区| www.久久视频| 性做久久久久久久免费看| wwwww黄色| 91在线视频观看| 日日夜夜精品视频免费观看| 日日夜夜精品视频天天综合网| 无码人妻精品一区二区蜜桃百度| 国产欧美高清视频在线| 国产传媒欧美日韩| 久久uomeier| 欧美激情一区二区三区久久久| 91网在线播放| 亚洲精品自拍偷拍| 成人免费观看在线视频| 欧美日韩大陆一区二区| 亚洲综合久久网| 亚洲福中文字幕伊人影院| 强制高潮抽搐sm调教高h| 久久日韩粉嫩一区二区三区| 老司机午夜免费福利| 韩国一区二区视频| 亚洲精品久久久久久宅男| 免费日韩av片| 国产精品333| 一区久久精品| 欧洲精品视频在线| 婷婷综合久久| 亚洲成人a**址| 欧美日韩色图| 欧美在线日韩精品| 亚洲妇女av| 精品久久中出| 亚洲人成网77777色在线播放| 电影午夜精品一区二区三区| 韩国三级成人在线| 91精品综合久久久久久五月天| 天堂久久午夜av| 国产97在线观看| 中文字幕乱码中文乱码51精品| 97国产精品久久| free性护士videos欧美| 久久免费福利视频| 日本aa在线| 久久久久久久成人| 久草免费在线色站| 久久久久久久久久久人体| 肉体视频在线| 欧美极度另类性三渗透| 国内老司机av在线| 久久久久久成人| 日本蜜桃在线观看视频| 欧美在线xxx| 日韩毛片免费观看| 国产精品白嫩初高中害羞小美女| 欧美黄色三级| 国产免费一区二区三区在线能观看| 欧美91在线|欧美| 成人黄色av网| 视频成人永久免费视频| 99porn视频在线| 精品一区二区男人吃奶| 九色91在线视频| 国产一区二区精品久| 一区二区三区四区欧美日韩| 亚洲国产精品久久久久蝴蝶传媒| 欧美视频在线第一页| 亚洲人人精品| 国产一区二区视频免费在线观看| 日本欧美一区二区在线观看| 亚洲黄色av片| av在线一区二区| b站大片免费直播| 中文字幕永久在线不卡| 欧美日韩三级在线观看| 欧美日韩精品在线视频| 中文字幕视频在线播放| 91精品国模一区二区三区| 免费看国产片在线观看| 亚洲欧美国产精品va在线观看| 在线a人片免费观看视频| 欧美另类高清videos| 在线能看的av网址| 国产精品自产拍在线观| 91成人精品在线| 日韩中文一区二区三区| 女主播福利一区| 日韩人妻精品无码一区二区三区| 免费视频一区二区| 又黄又色的网站| 国产区在线观看成人精品 | 亚洲成人中文| 三级a在线观看| 成人午夜在线免费| 日日操免费视频| 午夜精品视频一区| 中日精品一色哟哟| 欧美精品一区二区在线播放| av免费在线一区二区三区| 欧美黑人性视频| 粉嫩91精品久久久久久久99蜜桃| 国产精品一区二区你懂得| 日本不卡电影| 鲁一鲁一鲁一鲁一澡| 国产在线播放一区三区四| 瑟瑟视频在线观看| 亚洲一线二线三线视频| 中文字幕 视频一区| 亚洲国产欧美自拍| 超碰免费在线播放| 国产精品成人一区| 欧美三级自拍| 无码人妻精品一区二区蜜桃百度| 蜜桃免费网站一区二区三区| 欧美在线一级片| 一区2区3区在线看| 一区二区三区日| 永久免费毛片在线播放不卡| 蜜桃视频在线观看免费视频| 亚洲iv一区二区三区| 成人在线免费观看网站| 黄色国产精品视频| 波多野结衣在线一区| 九九热这里有精品视频| 欧美精品高清视频| av在线资源网| 国产成人免费av| 自拍偷拍精品| 欧美视频第一区| 91在线观看污| 日韩精品无码一区二区| 精品av久久707| 成人三级小说| 粉嫩av一区二区三区免费观看| 久久久久久美女精品| 天天干天天av| 国产精品视频线看| 正在播放木下凛凛xv99| 亚洲午夜小视频| 亚洲1234区| 亚洲成人第一| 蜜臂av日日欢夜夜爽一区| 正在播放国产对白害羞| 欧美日韩1234| 免费黄色在线看| 91久久久久久久久久| 亚洲欧美网站在线观看| 亚洲综合20p| 一区二区三区中文字幕在线观看| 国产女人18毛片18精品| 久久精品国产一区二区电影| 亚洲ww精品| 裸体裸乳免费看| 国产成人精品影视| 国产精品自拍视频一区| 日韩av在线网站| 东京一区二区| 日韩精品无码一区二区三区| 日韩成人免费电影| 少妇的滋味中文字幕bd| 欧美一区二区视频在线观看2020| 日本孕妇大胆孕交无码| 成人欧美一区二区三区视频xxx| 亚洲激情精品| 自拍偷拍亚洲天堂| 欧美日免费三级在线| 精品176二区| 国产精品视频免费一区| 模特精品在线| 日本精品久久久久中文| 91精品国产色综合久久不卡蜜臀 | 日本亚洲欧洲色| 成人嫩草影院| 日本人dh亚洲人ⅹxx| 亚洲超丰满肉感bbw| 韩国三级在线观看久| 成人a在线观看| 激情婷婷欧美| 无码人妻aⅴ一区二区三区69岛| 欧美人妖巨大在线| 国产盗摄一区二区| 日韩精彩视频| 国产黄色91视频| 日本视频网站在线观看| 久久精品视频导航| 久久综合社区| 色91精品久久久久久久久| 激情亚洲一区二区三区四区 | 亚洲av无码一区二区三区dv| 欧美亚洲在线播放| 亚洲v在线看| 欧美 变态 另类 人妖| 欧美高清视频一二三区| 国产欧洲在线| 做爰高潮hd色即是空| 99精品视频一区二区三区| 在线不卡免费视频| 97免费在线视频| 一精品久久久| 人人妻人人澡人人爽| 亚洲第一视频网| 91精品亚洲一区在线观看| 欧美丰满熟妇bbbbbb百度| 亚洲日本护士毛茸茸|