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

《吃透微服務(wù)》- 服務(wù)追蹤之Sleuth

開發(fā) 架構(gòu)
微服務(wù)的好壞我們不再爭(zhēng)議,最近看到很多反面宣傳微服務(wù)的特性,不知道是否大數(shù)據(jù)精準(zhǔn)投喂~ ps:估計(jì)后臺(tái)人物畫像已經(jīng)標(biāo)簽為一個(gè)反微分子了。這當(dāng)然是一句玩笑話,結(jié)束玩笑,我們來(lái)為微服務(wù)的學(xué)習(xí)添磚加瓦!

[[410885]]

本文轉(zhuǎn)載自微信公眾號(hào)「小菜良記」,作者蔡不菜丶。轉(zhuǎn)載本文請(qǐng)聯(lián)系小菜良記公眾號(hào)。

這么這篇我們繼續(xù)我們的主題 《吃透微服務(wù)》 ,繼續(xù)了解分布式系統(tǒng)中解決鏈路追蹤的方案 --- Sleuth。吃透 當(dāng)然可以作為一個(gè)噱頭,但也可以作為一個(gè)目標(biāo)!

微服務(wù)的好壞我們不再爭(zhēng)議,最近看到很多反面宣傳微服務(wù)的特性,不知道是否大數(shù)據(jù)精準(zhǔn)投喂~ ps:估計(jì)后臺(tái)人物畫像已經(jīng)標(biāo)簽為一個(gè)反微分子了。這當(dāng)然是一句玩笑話,結(jié)束玩笑,我們來(lái)為微服務(wù)的學(xué)習(xí)添磚加瓦!

微服務(wù)的關(guān)鍵在于拆分服務(wù),但是關(guān)鍵不在 微 ,而在于合適的大小。當(dāng)我們跨出拆分服務(wù)的那一刻起,我們就得對(duì)我們拆分后的服務(wù)負(fù)責(zé),這個(gè)是一個(gè)程序員應(yīng)有的擔(dān)當(dāng)!當(dāng)服務(wù)出現(xiàn)問(wèn)題的時(shí)候,你是否還苦于排查,而無(wú)從定位。線上的代碼我們無(wú)法 debug,找出問(wèn)題的時(shí)刻往往出現(xiàn)以下對(duì)話:

除了無(wú)奈的苦笑,只能盲目的摸索,終于有一天程序員小菜不再妥協(xié),力求解決該問(wèn)題。咱們能不能搞個(gè)類似監(jiān)控的功能,當(dāng)請(qǐng)求進(jìn)來(lái)的時(shí)候,分配一個(gè)身份令牌的給它,當(dāng)它在微服務(wù)中游走的時(shí)候,每個(gè)服務(wù)都會(huì)留下它的痕跡,當(dāng)它出現(xiàn)問(wèn)題的時(shí)候,我們只需要檢查游走到哪一個(gè)微服務(wù),相當(dāng)于畫一個(gè)行為軌跡,通過(guò)行為軌跡追蹤服務(wù)的調(diào)用問(wèn)題!沾沾自喜的同時(shí)犯嘀咕了,這說(shuō)起來(lái)容易,實(shí)現(xiàn)起來(lái)好像有點(diǎn)困難~退堂鼓即將敲響,便想到微服務(wù)中怎么可能沒有人想到該問(wèn)題,于是便游走于微服務(wù)組件之中,力求找到解決問(wèn)題的實(shí)現(xiàn)。終于,Sleuth 出現(xiàn)了。

Sleuth

一、認(rèn)識(shí) Sleuth

前面做了那么多的鋪墊,就是想引出 Sleuth 這玩意。洋洋灑灑說(shuō)了一堆,那就簡(jiǎn)單用一句話描述一下它的作用:在分布式系統(tǒng)中提供追蹤解決方案。它大量借用了 Google Dapper 的設(shè)計(jì),難道又是個(gè)換殼的玩意?

我們先來(lái)了解一下 Sleuth 中的術(shù)語(yǔ)和相關(guān)概念,只為了讓我們更加專業(yè),更好 吹著牛x談架構(gòu)

  • Trace

由一組 Trace Id 相同的 Span 串聯(lián)形成一個(gè)樹狀結(jié)構(gòu)。為了實(shí)現(xiàn)請(qǐng)求追蹤,當(dāng)請(qǐng)求到達(dá)分布式系統(tǒng)的入口端點(diǎn)時(shí),只需要服務(wù)跟蹤框架為該請(qǐng)求創(chuàng)建一個(gè)唯一的標(biāo)識(shí)(即 Trace Id),同時(shí)在恩不是系統(tǒng)內(nèi)部流轉(zhuǎn)的時(shí)候,框架是中保持傳遞該唯一值,直到整個(gè)請(qǐng)求的返回。那么我們就可以使用該唯一標(biāo)識(shí)將所有的請(qǐng)求串聯(lián)起來(lái),形成一條完整的請(qǐng)求鏈路。

  • Span

代表了一組基本的工作單元。為了統(tǒng)計(jì)各處理單元的延遲,當(dāng)請(qǐng)求到達(dá)各個(gè)服務(wù)組件的時(shí)候,也通過(guò)一個(gè)唯一標(biāo)識(shí)(SpanId)來(lái)標(biāo)記它的開始,具體過(guò)程和結(jié)束。通過(guò) SpanId 的開始和結(jié)束時(shí)間戳,就能統(tǒng)計(jì)該 Span 的調(diào)用時(shí)間,除此之外,我們還可以獲取如事件的名稱,請(qǐng)求信息等元數(shù)據(jù)

  • Annotation

用于記錄一段時(shí)間內(nèi)的事件。內(nèi)部使用的重要注釋如下:

  1. cs(Client Send):客戶端發(fā)出請(qǐng)求,開始一個(gè)請(qǐng)求的事件
  2. sr(Server Received) :服務(wù)端接受到請(qǐng)求開始進(jìn)行處理。sr - cs = 網(wǎng)絡(luò)延遲(服務(wù)調(diào)用的時(shí)間)
  3. ss(Server Send):服務(wù)端處理完畢準(zhǔn)備發(fā)送到客戶端。ss -sr = 服務(wù)器上的請(qǐng)求處理時(shí)間
  4. cr(Client Reveived):客戶端接受到服務(wù)端的響應(yīng),請(qǐng)求結(jié)束。cr - sr = 請(qǐng)求的總時(shí)間

理解完三個(gè)概念,我們下面就直接上手認(rèn)識(shí)!

二、掌握 Sleuth

我們老樣子請(qǐng)出我們的微服務(wù)項(xiàng)目:

簡(jiǎn)簡(jiǎn)單單幾個(gè)服務(wù)做個(gè)自我介紹

  • store-gateway: 服務(wù)網(wǎng)關(guān)
  • store-order: 訂單服務(wù)
  • store-product: 產(chǎn)品服務(wù)

然后我們需要在父工程中引入 Sleuth 依賴

  1. <dependency> 
  2.     <groupId>org.springframework.cloud</groupId> 
  3.     <artifactId>spring-cloud-starter-sleuth</artifactId> 
  4. </dependency> 

直接在父工程的 dependencies 中引入,這樣子每個(gè)子服務(wù)就可以不同重復(fù)引入該依賴

然后開始我們的簡(jiǎn)易代碼模式:

store-order服務(wù)

OrderController:

ProductService:

store-product 服務(wù)

ProductController:

我們?cè)谟唵畏?wù) 中使用 Feign 遠(yuǎn)程調(diào)用 產(chǎn)品服務(wù) 中的接口,然后啟動(dòng)服務(wù)調(diào)用后看控制臺(tái)打印:

注意看我圈出來(lái)的部分,有沒有發(fā)現(xiàn)了些許不同,沒錯(cuò)!這一串字符中包含的信息有 服務(wù)名 / TraceId / SpanId。依次調(diào)用有一個(gè)全局的 TraceId,將調(diào)用鏈路穿起來(lái)。通過(guò)分析微服務(wù)的日志,不難看出請(qǐng)求的具體過(guò)程。但是有個(gè)弊端,但服務(wù)數(shù)量增多,或者日志數(shù)量增多,從日志文件中撈出某個(gè)請(qǐng)求的調(diào)用過(guò)程,可并非是件易事,那么有沒有一個(gè)可以全文檢索和可視化展示的插件幫助我們解決該問(wèn)題?既然提出問(wèn)題,小菜自然已經(jīng)找到解決問(wèn)題的方法!那就是 ZipKin

三、使用 ZipKin

ZipKin 是 Twitter 開源的一個(gè)項(xiàng)目,它也是基于 Google Dapper 實(shí)現(xiàn)的,主要作用便是解決我們上面提到的問(wèn)題:收集服務(wù)的定時(shí)數(shù)據(jù),以解決微服務(wù)架構(gòu)中的延遲問(wèn)題,包括數(shù)據(jù)的收集,存儲(chǔ),查找和展現(xiàn)

我們可以使用它來(lái)收集各個(gè)服務(wù)器上請(qǐng)求鏈路的跟蹤數(shù)據(jù),并通過(guò)它提供的 REST API 接口來(lái)輔助我們查詢跟蹤數(shù)據(jù)以實(shí)現(xiàn)對(duì)分布式系統(tǒng)的監(jiān)控程序,從而及時(shí)地發(fā)現(xiàn)系統(tǒng)中出現(xiàn)的延遲升高問(wèn)題并找出系統(tǒng)性能瓶頸的根源!

我們除了面向開發(fā)的 API 接口之外, ZipKin 也提供了方便的 UI 組件來(lái)幫我們更加直觀的搜索跟蹤信息和分析請(qǐng)求鏈路明細(xì),比如:可以查詢某段時(shí)間內(nèi)各用戶請(qǐng)求的處理時(shí)間等。

聽到 UI 組件是不是感到眼前一亮,說(shuō)明我們可以通過(guò)控制臺(tái)更好的管理鏈路跟蹤

不僅如此,ZipKin 還提供了可插拔式的數(shù)據(jù)存儲(chǔ)方式,例如:In-Memory、MySQL、Cassandra以及Elasticsearch。支持方式不算少,總有一種你喜歡的!

我們來(lái)看看 ZipKin 的基礎(chǔ)架構(gòu)圖:

可以看出 ZipKin 結(jié)構(gòu)并不復(fù)雜,有四個(gè)核心組件構(gòu)成:

  • Collector:收集器組件。主要用于處理外部系統(tǒng)發(fā)現(xiàn)過(guò)來(lái)的跟蹤信息,然后將這些信息轉(zhuǎn)換為 ZipKin 內(nèi)部處理的 Span 格式,以便支持后續(xù)的存儲(chǔ)、分析、展示等功能
  • Storage: 存儲(chǔ)組件。主要用于對(duì)處理收集器接收到的跟蹤信息,默認(rèn)會(huì)將這些信息存儲(chǔ)到內(nèi)存中,我們可以修改存儲(chǔ)策略,將其存儲(chǔ)到我們的其他存儲(chǔ)倉(cāng)庫(kù)中
  • RestFul API:API 組件。用于提供外部訪問(wèn)的接口,比如客戶端的跟蹤信息,或外接系統(tǒng)的訪問(wèn)信息
  • WebUI:UI 組件。基于 API 組件實(shí)現(xiàn)的上層應(yīng)用,通過(guò) UI 組件用戶可以方便而直觀地查詢和分析跟蹤信息

因此 ZiPKin 使用起來(lái)有些類似我們上篇說(shuō)到的 Sentinel ,它分為 服務(wù)端 和 客戶端。

客戶端就是指微服務(wù)中的應(yīng)用,在客戶端中配置服務(wù)端的 URL 地址,一旦發(fā)生服務(wù)間的調(diào)用的時(shí)候,會(huì)被配置在微服務(wù)中的 Sleuth 的監(jiān)聽器監(jiān)聽,并生相應(yīng)的 Trace 和 Span 信息發(fā)送給服務(wù)端。

1. ZipKin 服務(wù)端

服務(wù)端是一個(gè)現(xiàn)成的 SpringBoot 服務(wù),我們只需要下載 jar 包 ,便可以直接運(yùn)行!下載地址

然后我們通過(guò)命令行的方式啟動(dòng)即可:

  1. java -jar zipkin-server-2.12.9-exec.jar 

成功啟動(dòng)后通過(guò)訪問(wèn) http://localhost:9411 可以看到以下頁(yè)面:

到這步為止,我們服務(wù)端就已經(jīng)成功安裝。然后回到我們的客戶端集成上去

2. ZipKin 客戶端

我們需要在每個(gè)服務(wù)中引入 ZipKin 的依賴

  1. <dependency> 
  2.     <groupId>org.springframework.cloud</groupId> 
  3.     <artifactId>spring-cloud-starter-zipkin</artifactId> 
  4. </dependency> 

然后在配置文件中進(jìn)行配置:

  1. spring: 
  2.   zipkin: 
  3.     base-url: http://127.0.0.1:9411/  #zipkin 服務(wù)端地址 
  4.     discoveryClientEnabled: false   #讓nacos把它當(dāng)成一個(gè)URL,而不要當(dāng)做服務(wù)名 
  5.   sleuth: 
  6.     sampler: 
  7.       probability: 1.0 #采樣的百分比 

然后我們回到項(xiàng)目中,啟動(dòng)項(xiàng)目通過(guò)訪問(wèn)我們上面已經(jīng)定義好的接口訪問(wèn)微服務(wù),之后在 ZipKin 的UI界面進(jìn)行觀察

可以看到已經(jīng)出現(xiàn)了我們剛剛訪問(wèn)微服務(wù)的請(qǐng)求鏈路了,點(diǎn)擊其中一條記錄可以查看具體的訪問(wèn)路線。

通過(guò)對(duì)請(qǐng)求鏈路進(jìn)行追蹤,就可以確定服務(wù)的哪一個(gè)模塊更耗時(shí),進(jìn)而可以進(jìn)行優(yōu)化或者排查 Bug。

3. ZipKin 持久化

在 ZipKin 中默認(rèn)會(huì)將鏈路跟蹤的數(shù)據(jù)保存到內(nèi)存中,但是這種方式明顯不適合于生產(chǎn)環(huán)境。因此在 ZipKin 中支持將追蹤鏈路的數(shù)據(jù)持久化到 mysql 數(shù)據(jù)庫(kù)中或 elasticsearch 中。

MySQL

  • 首先我們需要配置數(shù)據(jù)庫(kù)信息
  1. CREATE TABLE IF NOT EXISTS zipkin_spans ( 
  2.     `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit'
  3.     `trace_id` BIGINT NOT NULL
  4.     `id` BIGINT NOT NULL
  5.     `nameVARCHAR(255) NOT NULL
  6.     `parent_id` BIGINT
  7.     `debug` BIT(1), 
  8.     `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL'
  9.     `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query' 
  10. ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; 
  11.  
  12. ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate'
  13. ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations'
  14. ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds'
  15. ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames'
  16. ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range'
  17. CREATE TABLE IF NOT EXISTS zipkin_annotations ( 
  18.     `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit'
  19.     `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id'
  20.     `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id'
  21.     `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1'
  22.     `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB'
  23.     `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation'
  24.     `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp'
  25.     `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null'
  26.     `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address'
  27.     `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null'
  28.     `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null' 
  29. ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; 
  30.  
  31. ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate'
  32. ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans'
  33. ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds'
  34. ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames'
  35. ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces'
  36. ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces'
  37. ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job'
  38. CREATE TABLE IF NOT EXISTS zipkin_dependencies ( 
  39.     `dayDATE NOT NULL
  40.     `parent` VARCHAR(255) NOT NULL
  41.     `child` VARCHAR(255) NOT NULL
  42.     `call_count` BIGINT 
  43. ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; 
  44. ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`); 

  • 啟動(dòng)時(shí)指定 mysql 信息
  1. java -DSTORAGE_TYPE=mysql -DMYSQL_HOST=127.0.0.1 -DMYSQL_TCP_PORT=3306 -DMYSQL_DB=zipkin -DMYSQL_USER=root -DMYSQL_PASS=root -jar zipkin-server-2.12.9-exec.jar  

ElasticSearch

  • 啟動(dòng) ES
  • 啟動(dòng)時(shí)指定 ES 信息
  1. java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ES-HOST=localhost:9200 

END

到這里我們就完成了分布式系統(tǒng)中服務(wù)鏈路跟蹤的解決!那為我們解決了問(wèn)題呢?

  • 跨微服務(wù)的API調(diào)用發(fā)生異常,快速定位出問(wèn)題出在哪里。
  • 跨微服務(wù)的API調(diào)用發(fā)生性能瓶頸,迅速定位出性能瓶頸。

 

責(zé)任編輯:武曉燕 來(lái)源: 小菜良記
相關(guān)推薦

2024-07-02 10:58:53

2018-08-01 14:20:11

微服務(wù)架構(gòu)人工智能

2022-05-25 08:23:32

ZipKinTwitter開源項(xiàng)目

2022-06-17 12:05:25

微服務(wù)注冊(cè)

2022-05-23 08:23:24

鏈路追蹤SleuthSpring

2024-08-05 10:03:53

2019-07-11 15:25:02

架構(gòu)運(yùn)維技術(shù)

2021-03-09 09:33:42

網(wǎng)關(guān)授權(quán)微服務(wù)

2020-09-11 09:44:04

微服務(wù)分布式鏈路

2021-01-25 15:00:44

微服務(wù)分布式日志

2022-01-26 10:29:24

微服務(wù)循環(huán)依賴代碼

2024-11-06 16:27:12

2021-12-29 08:30:48

微服務(wù)架構(gòu)開發(fā)

2022-03-31 08:15:38

微服務(wù)服務(wù)拆分架構(gòu)

2023-07-28 09:23:24

微服務(wù)架構(gòu)

2020-08-18 07:00:00

微服務(wù)開發(fā)架構(gòu)

2021-11-08 14:10:37

分布式Spring鏈路

2018-12-12 09:59:47

微服務(wù)架構(gòu)分布式系統(tǒng)

2020-12-10 10:04:45

微服務(wù)Kubernetes容器

2021-07-02 06:54:45

軟件架構(gòu)模式
點(diǎn)贊
收藏

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

亚洲午夜福利在线观看| 国产网站免费在线观看| 国产美女三级无套内谢| 欧美另类综合| 亚洲精品一区二区久| jizz18女人| 国产探花视频在线观看| 久久综合久久久久88| 成人免费观看网址| 制服.丝袜.亚洲.中文.综合懂色| 成人3d动漫在线观看| 精品国产一区二区亚洲人成毛片 | 国产精品日韩欧美综合| 破处女黄色一级片| 国产精品一区二区99| 91精品一区二区三区在线观看| 久艹视频在线免费观看| 日本视频不卡| 99久久综合国产精品| 91精品久久久久久久| 日韩精品乱码久久久久久| 久久中文字幕av一区二区不卡| 亚洲国产精品yw在线观看 | 国产精品二区一区二区aⅴ| 猛男gaygay欧美视频| 欧美一区二区三区四区视频| 国产视频在线视频| 99热99re6国产在线播放| 国产精品久久影院| 欧美三日本三级少妇三99| 亚洲av无码国产综合专区| 欧美bbbbb| 欧美在线视频观看| 精品无码人妻一区二区三区| 91综合久久一区二区| 亚洲人成网站999久久久综合| 图片区偷拍区小说区| 性欧美video另类hd尤物| 日韩欧美极品在线观看| 久久av综合网| 免费影视亚洲| 成人欧美一区二区三区1314| 日韩妆和欧美的一区二区| 五月激情婷婷综合| 成人免费视频一区| 成人免费看片网站| www.亚洲欧美| 国产成人av在线影院| 91精品美女在线| 国产又黄又粗又硬| 狠狠色丁香九九婷婷综合五月| 国产精品第一第二| 黄色污污视频软件| 日韩精品一区第一页| 奇门遁甲1982国语版免费观看高清 | 国产精品国产精品国产专区| 日韩精品福利网| 国产成人精品国内自产拍免费看| 久久夜色精品国产噜噜亚洲av| 亚洲经典自拍| 81精品国产乱码久久久久久| 一区二区三区视频免费看| 伊人成人在线视频| 57pao精品| aaa在线视频| 人禽交欧美网站| 国产精品丝袜视频| 91在线精品入口| 国产伦精品一区二区三区在线观看| 成人写真视频福利网| 国产高中女学生第一次| 国产不卡视频在线观看| 国内一区二区三区在线视频| 日本私人网站在线观看| 国产喂奶挤奶一区二区三区| 亚洲精品第一区二区三区| 色综合久久久久综合一本到桃花网| 国产精品久久久久久久久免费丝袜| 亚洲在线观看一区| www.久久ai| 午夜精品久久久久久久久久久| 日本久久久精品视频| 视频在线日韩| 日韩一级黄色大片| 99久久国产精| 久久久久国产| 久久久亚洲精选| 在线观看日本网站| 国产综合久久久久久鬼色 | 一区二区三区四区高清精品免费观看 | 少妇精品无码一区二区三区| 国产成人1区| 久久久国产精品免费| 久青草视频在线观看| 久久高清免费观看| 91中文字幕一区| 午夜视频免费在线| 中文字幕在线视频一区| 青草视频在线观看视频| 亚洲欧美在线成人| 精品欧美一区二区三区精品久久 | 欧美 日韩 国产 精品| 久久青草国产手机看片福利盒子| 欧美爱爱视频网站| 天堂а√在线最新版中文在线| 欧美三级中文字| 国产精九九网站漫画| 精品国产中文字幕第一页| 欧美日韩成人黄色| 做爰无遮挡三级| av在线播放成人| 中日韩在线视频| 蜜桃视频m3u8在线观看| 67194成人在线观看| 亚洲自拍偷拍一区二区| 亚洲一区色图| 国产精品xxxxx| 午夜视频免费看| 伊人色综合久久天天| 超碰av在线免费观看| 岛国精品一区| 久久综合88中文色鬼| 亚洲自拍一区在线观看| 成人午夜短视频| 免费看污污视频| 国产成人福利夜色影视| 亚洲精品中文字| 日本熟女一区二区| 国产一区美女在线| 影音先锋欧美在线| 亚洲电影有码| 亚洲欧美另类国产| 午夜影院在线看| 国产91精品免费| 亚洲免费视频播放| 电影中文字幕一区二区| 国产一区二区三区在线视频 | 中文字幕成人动漫| 国产亚洲成人一区| 国产美女精品在线观看| 欧洲在线视频| 日韩欧美色综合网站| 久草视频手机在线| 精品一区二区精品| 一区在线电影| 久久91超碰青草在哪里看| 国产亚洲成精品久久| 国产高清中文字幕| 久久久久国色av免费看影院| 国模无码视频一区二区三区| 久久久精品国产**网站| 久久久免费电影| 韩国av在线免费观看| 夜夜爽夜夜爽精品视频| 亚洲少妇中文字幕| 亚洲乱码视频| 免费国产在线精品一区二区三区| 国产在线天堂www网在线观看| 亚洲第一级黄色片| 91浏览器在线观看| 久久久综合视频| 激情五月俺来也| 国产精品99久久精品| 亚洲自拍偷拍色片视频| 97caopor国产在线视频| 精品国产a毛片| 国产精品美女久久久久av爽| 91欧美激情一区二区三区成人| 国产肥臀一区二区福利视频| 国产成人高清| 国产欧美日韩视频| 综合久久2o19| 亚洲精美色品网站| 成人小视频在线播放| 国产精品你懂的在线欣赏| 肉色超薄丝袜脚交| 亚洲精品少妇| 日韩国产一区久久| 久久三级中文| 日本亚洲欧洲色α| 国产调教视频在线观看| 欧美精品一区二区蜜臀亚洲| 日本视频在线观看免费| 亚洲欧洲精品一区二区精品久久久| aaaaa黄色片| 久久不射中文字幕| www.黄色网址.com| 亚洲动漫在线观看| 91丝袜美腿美女视频网站| 国产精品25p| 中文字幕日韩在线观看| 亚洲欧美黄色片| 91久久久免费一区二区| 在线免费观看亚洲视频| 久久免费看少妇高潮| 亚洲女人在线观看| 亚洲欧美久久| 超碰97免费观看| 亚洲调教一区| 北条麻妃高清一区| 韩国三级一区| 欧美激情亚洲精品| 91这里只有精品| 亚洲国产古装精品网站| 亚洲综合精品视频| 色久优优欧美色久优优| 欧美三级 欧美一级| 国产视频一区不卡| 最新中文字幕日本| 久久91精品久久久久久秒播| 无码精品a∨在线观看中文| 亚洲国产一区二区三区在线播放| 欧美高清视频一区| 国产精品网址| 91网在线免费观看| 精品久久99| 日韩免费黄色av| aa国产成人| 九九精品视频在线| 欧美性猛交xxx乱大交3蜜桃| 精品亚洲一区二区三区在线播放 | 国产91对白在线观看九色| 99热手机在线| 久久久噜噜噜久久狠狠50岁| 成人av在线不卡| 欧美一区在线看| 亚洲欧洲一区二区在线观看| 亚洲精品推荐| 精品中文字幕一区| 精品自拍偷拍| 粉嫩精品一区二区三区在线观看| www.欧美| 成人深夜直播免费观看| 91在线亚洲| 国产精品99久久久久久久久| 亚洲妇女成熟| 91av视频导航| 韩国精品一区| 性色av一区二区三区免费| 日本aa在线| 久久久亚洲国产| av中文字幕在线看| 欧美激情在线观看| 欧美xxxx视频| 欧美激情按摩在线| 日韩另类在线| 高清视频欧美一级| а√在线中文在线新版| 久久99视频精品| 人人澡人人添人人爽一区二区| 久久国产精品久久久久| 成人ww免费完整版在线观看| 欧美成人久久久| 日本在线视频中文有码| 色在人av网站天堂精品| 日本伦理一区二区| 久久久久国产视频| 日本黄色免费在线| 秋霞av国产精品一区| 欧美成人黑人| 国产精品久久久久久久一区探花| 日韩一区二区三区免费视频| 国产精品久久久久秋霞鲁丝| 四虎国产精品免费久久5151| 91精品在线观看视频| 日韩一级淫片| 久久精品人成| 日本一区二区在线看| 国产美女视频免费| 亚洲无线一线二线三线区别av| 黄色大片中文字幕| 久久99伊人| 爱爱爱爱免费视频| 国产成人在线看| 久久久久久久无码| 日本一区二区高清| 国产精品丝袜一区二区| 亚洲成人午夜影院| 国产成人无码专区| 91精品国模一区二区三区| 人妻一区二区三区四区| 亚洲视频欧洲视频| 免费黄色在线看| 97免费中文视频在线观看| 久久久久久久| 91精品综合久久久久久五月天| 都市激情亚洲欧美| 亚欧精品在线| 一区三区视频| 性欧美videossex精品| 成人综合婷婷国产精品久久| 乐播av一区二区三区| 亚洲欧洲中文日韩久久av乱码| 日韩久久久久久久久| 欧美午夜影院一区| 天天色综合av| 久久国产精品久久精品| 综合另类专区| 亚洲自拍偷拍色图| 国产一区二区三区四区五区| 法国空姐在线观看免费| 丝瓜av网站精品一区二区| 黄色a级三级三级三级| 国产欧美日韩在线视频| 精品无码久久久久久久| 欧美久久一二区| 欧美一区二区三区少妇| 欧美成人精品xxx| 本网站久久精品| 久久久综合香蕉尹人综合网| 这里只有精品在线| 在线观看av日韩| 91免费小视频| 精品一区在线视频| 制服丝袜亚洲色图| av在线收看| 国产99视频在线观看| 欧美精品中文字幕亚洲专区| 大桥未久一区二区三区| 青青草成人在线观看| 美女久久久久久久久久| 亚洲国产精品天堂| a网站在线观看| 日韩亚洲欧美中文在线| 456成人影院在线观看| 久久资源亚洲| 亚洲精品社区| 在线xxxxx| 一区二区欧美在线观看| 99久久久国产精品无码免费| 正在播放欧美视频| 日本精品网站| 日韩美女一区| 丝袜亚洲另类欧美综合| 18禁裸乳无遮挡啪啪无码免费| 亚洲一区二区三区四区在线观看 | 日韩黄色a级片| 精品国产成人系列| 激情在线视频播放| 9a蜜桃久久久久久免费| 女生裸体视频一区二区三区| 日韩在线一区视频| 中文字幕一区二区三区色视频| 中文在线免费看视频| 中文字幕精品在线视频| 日韩天堂在线| 一区二区三区|亚洲午夜| 麻豆91小视频| 亚洲 欧美 变态 另类 综合| 91精品在线观看入口| 亚洲综合伊人久久大杳蕉| 91pron在线| 狠久久av成人天堂| 国产伦精品一区三区精东| 午夜视黄欧洲亚洲| 欧美在线一卡| 国产一区二区在线免费视频| 欧美mv日韩| 伊人影院在线观看视频| 亚洲午夜在线视频| 日韩av免费观影| 国产精品高潮呻吟久久av黑人| 日韩国产一区二区三区| 国产在线观看中文字幕| 亚洲一级片在线观看| 亚洲三级黄色片| 国产成人亚洲综合91| 97在线精品| 性活交片大全免费看| 欧美性20hd另类| 欧美成人高清在线| 97久久夜色精品国产九色 | 一区二区三区高清不卡| 欧美熟妇交换久久久久久分类| 456国产精品| 欧美综合久久| 苍井空张开腿实干12次| 欧美色videos| 久久黄色美女电影| 国产精品视频免费观看| 日韩高清欧美激情| 日韩福利小视频| 亚洲大胆人体视频| 日本免费一区二区三区等视频| 一级性生活视频| 久久综合久久综合久久| 97精品人妻一区二区三区香蕉| 久久久久久久久国产精品| 国产亚洲欧美日韩在线观看一区二区 | 亚洲熟妇av一区二区三区| 国产精品萝li| 污污视频在线免费看| 国产精品香蕉在线观看| 国内自拍一区| 一二三四国产精品| 亚洲激情中文字幕| 成人av在线播放| 日本wwww视频| 亚洲激情av在线| 成人在线视频成人|