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

Sentry 監控 - 面向全棧開發人員的分布式跟蹤

安全 應用安全 分布式
在 Web 的早期,編寫 Web 應用程序很簡單。開發人員使用 PHP 等語言在服務器上生成 HTML,與 MySQL 等單一關系數據庫進行通信,大多數交互性由靜態 HTML 表單組件驅動。雖然調試工具很原始,但理解代碼的執行流程很簡單。

[[427214]]

歡迎來到我們關于全棧開發人員分布式跟蹤(Distributed Tracing)的系列的第 1 部分。在本系列中,我們將學習分布式跟蹤的細節,以及它如何幫助您監控全棧應用程序日益復雜的需求。

在 Web 的早期,編寫 Web 應用程序很簡單。開發人員使用 PHP 等語言在服務器上生成 HTML,與 MySQL 等單一關系數據庫進行通信,大多數交互性由靜態 HTML 表單組件驅動。雖然調試工具很原始,但理解代碼的執行流程很簡單。

在今天的現代 web 棧中,它什么都不是。全棧開發人員需要編寫在瀏覽器中執行的 JavaScript,與多種數據庫技術互操作,并在不同的服務器架構(例如:serverless)上部署服務器端代碼。如果沒有合適的工具,了解瀏覽器中的用戶交互如何關聯到服務器堆棧深處的 500 server error 幾乎是不可能的。Enter:分布式跟蹤。

我試圖解釋 2021 年我的 web 堆棧中的瓶頸。

分布式跟蹤(Distributed tracing)是一種監控技術,它將多個服務之間發生的操作和請求聯系起來。這允許開發人員在端到端請求從一個服務移動到另一個服務時“跟蹤(trace)”它的路徑,讓他們能夠查明對整個系統產生負面影響的單個服務中的錯誤或性能瓶頸。

在這篇文章中,我們將了解有關分布式跟蹤概念的更多信息,在代碼中查看端到端(end-to-end)跟蹤示例,并了解如何使用跟蹤元數據為您的日志記錄和監控工具添加有價值的上下文。完成后,您不僅會了解分布式跟蹤的基礎知識,還會了解如何應用跟蹤技術來更有效地調試全棧 Web 應用程序。

但首先,讓我們回到開頭:什么是分布式追蹤?

分布式追蹤基礎

分布式跟蹤是一種記錄多個服務的連接操作的方法。通常,這些操作是由從一個服務到另一個服務的請求發起的,其中“請求(request)”可以是實際的 HTTP 請求,也可以是通過任務隊列或其他一些異步方式調用的工作。

跟蹤由兩個基本組件組成:

  • Span 描述發生在服務上的操作或 “work”。Span 可以描述廣泛的操作——例如,響應 HTTP 請求的 web 服務器的操作——也可以描述單個函數的調用。
  • trace 描述了一個或多個連接 span 的端到端(end-to-end)旅程。如果 trace 連接在多個服務上執行的 span(“work”),則該 trace 被認為是分布式跟蹤。

讓我們看一個假設的分布式跟蹤示例。

上圖說明了 trace 如何從一個服務(一個在瀏覽器上運行的 React 應用程序)開始,并通過調用 API Web Server 繼續,甚至進一步調用后臺任務 worker。此圖中的 span 是在每個服務中執行的 work,每個 span 都可以“追溯到(traced)”由瀏覽器應用程序啟動的初始工作(initial work)。最后,由于這些操作發生在不同的服務上,因此該跟蹤被認為是分布式的。

描述廣泛操作的跨度(例如:響應 HTTP request 的 Web server 的完整生命周期)有時被稱為事務跨度(transaction spans),甚至只是事務。我們將在本系列的第 2 部分中更多地討論事務與跨度(transactions vs. spans)。

跟蹤和跨度標識符

到目前為止,我們已經確定了跟蹤的組件,但我們還沒有描述這些組件是如何鏈接在一起的。

首先,每個跟蹤都用跟蹤標識符(trace identifier)唯一標識。這是通過在根跨度(root span)中創建一個唯一的隨機生成值(即 UUID)來完成的——這是啟動整個跟蹤的初始操作。在我們上面的示例中,根跨度出現在瀏覽器應用程序中。

其次,每個 span 首先需要被唯一標識。這通過在跨度開始其操作時創建唯一的跨度標識符(或 span_id)來完成。這個 span_id 創建應該發生在 trace 內發生的每個 span(或操作)處進行。

讓我們重新審視我們假設的跟蹤示例。在上圖中,您會注意到跟蹤標識符唯一地標識了跟蹤,并且該跟蹤中的每個跨度也擁有一個唯一的跨度標識符。

然而,生成 trace_id 和 span_id 是不夠的。要實際連接這些服務,您的應用程序必須在從一個服務向另一個服務發出請求時傳播所謂的跟蹤上下文(trace context)。

跟蹤上下文

跟蹤上下文(trace context)通常僅由兩個值組成:

  • 跟蹤標識符(或 trace_id):在根跨度中生成的唯一標識符,用于標識整個跟蹤。這與我們在上一節中介紹的跟蹤標識符相同;它以不變的方式傳播到每個下游服務。
  • 父標識符(或 parent_id):產生當前操作的“父”跨度的 span_id。

下圖顯示了在一個服務中啟動的請求如何將跟蹤上下文傳播到下游的下一個服務。您會注意到 trace_id 保持不變,而 parent_id 在請求之間發生變化,指向啟動最新操作的父跨度。

有了這兩個值,對于任何給定的操作,就可以確定原始(root)服務,并按照導致當前操作的順序重建所有父/祖先(parent/ancestor)服務。

工作示例(代碼演示)

示例源碼:

  • https://github.com/getsentry/distributed-tracing-examples

為了更好地理解這一點,讓我們實際實現一個基本的跟蹤實現,其中瀏覽器應用程序是由跟蹤上下文連接的一系列分布式操作的發起者。

首先,瀏覽器應用程序呈現一個表單:就本示例而言,是一個“邀請用戶(invite user)”表單。表單有一個提交事件處理程序,它在表單提交時觸發。讓我們將此提交處理程序視為我們的根跨度(root span),這意味著當調用處理程序時,會生成 trace_id 和 span_id。

接下來,完成一些工作以從表單中收集用戶輸入的值,然后最后向我們的 Web 服務器發出一個到 /inviteUser API 端點的 fetch 請求。作為此 fetch 請求的一部分,跟蹤上下文作為兩個自定義 HTTP header 傳遞:trace-id 和 parent-id(即當前 span 的 span_id)。

  1. // browser app (JavaScript) 
  2. import uuid from 'uuid'
  3.  
  4. const traceId = uuid.v4(); 
  5. const spanId = uuid.v4(); 
  6.  
  7. console.log('Initiate inviteUser POST request', `traceId: ${traceId}`); 
  8.  
  9. fetch('/api/v1/inviteUser?email=' + encodeURIComponent(email), { 
  10.    method: 'POST'
  11.    headers: { 
  12.        'trace-id': traceId, 
  13.        'parent-id': spanId, 
  14.    } 
  15. }).then((data) => { 
  16.    console.log('Success!'); 
  17. }).catch((err) => { 
  18.    console.log('Something bad happened', `traceId: ${traceId}`); 
  19. }); 

請注意,這些是用于說明目的的非標準 HTTP header。作為 W3C traceparent 規范的一部分,正在積極努力標準化 tracing HTTP header,該規范仍處于 “Recommendation” 階段。

  • https://www.w3.org/TR/trace-context/

在接收端,API web server 處理請求并從 HTTP 請求中提取跟蹤元數據(tracing metadata)。然后它會排隊一個 job 以向用戶發送電子郵件,并將跟蹤上下文作為 job 描述中“meta”字段的一部分附加。最后,它返回一個帶有 200 狀態 code 的響應,表明該方法成功。

請注意,雖然服務器返回了成功的響應,但實際的“工作”直到后臺任務 worker 拿起新排隊的 job 并實際發送電子郵件后才完成。

在某個點上,隊列處理器開始處理排隊的電子郵件作業。再一次,跟蹤(trace)和父標識符(parent identifier)被提取出來,就像它們在 web server 中的早些時候一樣。

  1. // API Web Server 
  2. const Queue = require('bull'); 
  3. const emailQueue = new Queue('email'); 
  4. const uuid = require('uuid'); 
  5.  
  6. app.post("/api/v1/inviteUser", (req, res) => { 
  7.   const spanId = uuid.v4(), 
  8.     traceId = req.headers["trace-id"], 
  9.     parentId = req.headers["parent-id"]; 
  10.  
  11.   console.log( 
  12.     "Adding job to email queue"
  13.     `[traceId: ${traceId},`, 
  14.     `parentId: ${parentId},`, 
  15.     `spanId: ${spanId}]` 
  16.   ); 
  17.  
  18.   emailQueue.add({ 
  19.     title: "Welcome to our product"
  20.     to: req.params.email, 
  21.     meta: { 
  22.       traceId: traceId, 
  23.  
  24.       // the downstream span's parent_id is this span's span_id 
  25.       parentId: spanId, 
  26.     }, 
  27.   }); 
  28.  
  29.   res.status(200).send("ok"); 
  30. }); 
  31.  
  32. // Background Task Worker 
  33. emailQueue.process((job, done) => { 
  34.   const spanId = uuid.v4(); 
  35.   const { traceId, parentId } = job.data.meta; 
  36.  
  37.   console.log( 
  38.     "Sending email"
  39.     `[traceId: ${traceId},`, 
  40.     `parentId: ${parentId},`, 
  41.     `spanId: ${spanId}]` 
  42.   ); 
  43.  
  44.   // actually send the email 
  45.   // ... 
  46.  
  47.   done(); 
  48. }); 

分布式系統 Logging

您會注意到,在我們示例的每個階段,都會使用 console.log 進行 logging 調用,該調用還發出當前 trace、span 和 parent 標識符。在完美的同步世界中——每個服務都可以登錄到同一個集中式 logging 工具——這些日志語句中的每一個都會依次出現:

如果在這些操作過程中發生異常或錯誤行為,使用這些或額外的日志語句來查明來源將相對簡單。但不幸的現實是,這些都是分布式服務,這意味著:

Web 服務器通常處理許多并發請求。Web 服務器可能正在執行歸因于其他請求的工作(并發出日志記錄語句)。

網絡延遲會影響操作順序。從上游服務發出的請求可能不會按照它們被觸發的順序到達目的地。

后臺 worker 可能有排隊的 job。在到達此跟蹤中排隊的確切 job 之前,worker 可能必須先完成先前排隊的 job。

在一個更現實的例子中,我們的日志調用可能看起來像這樣,它反映了同時發生的多個操作:

如果不跟蹤 metadata,就不可能了解哪個動作調用哪個動作的拓撲結構。但是通過在每次 logging 調用時發出跟蹤 meta 信息,可以通過過濾 traceId 快速過濾跟蹤中的所有 logging 調用,并通過檢查 spanId 和 parentId 關系重建確切的順序。

這就是分布式跟蹤的威力:通過附加描述當前操作(span id)、產生它的父操作(parent id)和跟蹤標識符(trace id)的元數據,我們可以增加日志記錄和遙測數據以更好地理解 分布式服務中發生的事件的確切順序。

在真實的分布式跟蹤環境中

在本文的過程中,我們一直在使用一個有點人為的示例。在真正的分布式跟蹤環境中,您不會手動生成和傳遞所有的跨度和跟蹤標識符。您也不會依賴 console.log(或其他日志記錄)調用來自己發出跟蹤元數據。您將使用適當的跟蹤庫來為您處理檢測和發送跟蹤數據。

OpenTelemetry

OpenTelemetry 是一組開源工具、API 和 SDK,用于檢測、生成和導出正在運行的軟件中的遙測數據。它為大多數流行的編程語言提供了特定于語言的實現,包括瀏覽器 JavaScript 和 Node.js。

  • https://opentelemetry.io/
  • https://github.com/open-telemetry/opentelemetry-js

Sentry

Sentry 以多種方式使用這種遙測。例如,Sentry 的性能監控功能集使用跟蹤數據生成瀑布圖,說明跟蹤中分布式服務操作的端到端延遲。

 

Sentry 還使用跟蹤元數據來增強它的錯誤監控功能,以了解在一個服務(如服務器后端)中觸發的錯誤如何傳播到另一個服務(如前端)中的錯誤。

 

責任編輯:武曉燕 來源: 黑客下午茶
相關推薦

2021-09-30 23:12:52

監控分布式跟蹤

2019-09-05 19:56:23

開發編程程序

2022-01-13 23:15:29

Docker開發嵌入式

2022-11-02 14:43:29

2022-04-20 10:56:06

JavaJVM參數

2022-03-05 23:09:52

開發軟件工程師前端

2024-02-21 08:00:00

機器學習Java大語言模型

2022-06-06 10:30:23

容器鏡像

2023-03-02 17:44:30

DevOps開發

2016-10-18 10:45:00

開發開源

2019-08-27 14:21:44

Python 開發程序員

2015-02-10 09:24:04

Web開發JavaScript工具

2010-08-09 16:09:25

2009-11-23 20:07:51

ibmdw開發

2021-02-19 09:33:01

kubernetesJAVA服務

2009-12-11 14:50:14

Visual Basi

2012-05-30 15:15:42

ibmdw

2023-03-15 07:12:53

企業開發人員提供商

2021-11-02 08:54:10

開發編程測試

2023-01-11 19:50:35

點贊
收藏

51CTO技術棧公眾號

精品日韩一区二区| 亚洲精品乱码久久久久久日本蜜臀| 91av免费观看91av精品在线| 性久久久久久久久久| 欧洲成人一区| 亚洲人成小说网站色在线 | av电影在线观看不卡| 国产91精品最新在线播放| 在线观看黄网址| 色婷婷精品视频| 91精品国产综合久久久蜜臀粉嫩 | 视频一区二区不卡| 亚洲天堂男人天堂女人天堂| 污免费在线观看| 韩国成人在线| 午夜精品影院在线观看| 亚洲一区二区三区色| 神马一区二区三区| 久久99久久精品欧美| 韩国美女主播一区| 成人免费黄色小视频| 精品国产91| 亚洲精品国产成人| 亚洲国产欧美日韩在线| 激情开心成人网| 婷婷激情综合网| 国产免费xxx| av在线之家电影网站| 99精品欧美一区二区三区小说| 国产啪精品视频| 免费观看日批视频| 亚洲毛片在线| 欧美精品999| 久久免费看少妇高潮v片特黄| 国产一区二区在线| 日韩电影在线观看中文字幕 | 五月天中文字幕| 香蕉久久夜色精品| 久久久久在线观看| 麻豆亚洲av熟女国产一区二| 婷婷另类小说| 亚洲视频在线免费观看| 日韩 中文字幕| 国产毛片久久久| 欧美va亚洲va| 免费观看一区二区三区| 久久伦理中文字幕| 欧美一区二区免费视频| 久久久久久久久久一区二区| 你懂得影院夜精品a| 色视频成人在线观看免| 激情五月开心婷婷| 香蕉伊大人中文在线观看| 亚洲国产欧美日韩另类综合| 日韩精品在线中文字幕| 久久五月精品中文字幕| 亚洲尤物在线视频观看| 成人免费a级片| 91禁在线看| 天天综合天天综合色| 日韩精品―中文字幕| av手机在线观看| 精品久久久视频| 91av在线免费播放| 日本精品网站| 欧美日韩亚洲另类| 伊人成人免费视频| 91成人精品在线| 亚洲精品www久久久| 右手影院亚洲欧美| 久久99国产精品视频| 一区二区三区视频免费在线观看| 欧美日韩国产黄色| 午夜精品一区二区三区国产 | 欧美性猛交xxxxx少妇| 红桃视频国产精品| 4438全国成人免费| 波多野结衣电车痴汉| 久久福利视频一区二区| 99免费在线视频观看| 少妇高潮一区二区三区99小说| 91视频在线看| 一本久道久久综合| 波多野结衣中文字幕久久| 精品国产电影一区| the porn av| 麻豆一区在线| 亚洲毛片在线观看.| 日本黄区免费视频观看| 国产精品99一区二区| 欧洲成人免费视频| 国产绿帽一区二区三区| 99久久久精品| 色呦呦网站入口| 日本不卡1234视频| 欧美绝品在线观看成人午夜影视| www.17c.com喷水少妇| jvid福利在线一区二区| 欧美激情视频网| 久久久999久久久| 国产成人啪免费观看软件| 久久涩涩网站| 韩国av网站在线| 欧美午夜精品伦理| 国产大学生av| 日韩久久精品| 91精品国产91久久久久福利| 一级特黄录像免费看| 91捆绑美女网站| mm131午夜| 成人mm视频在线观看| 亚洲第一av网站| 日韩国产第一页| 久久国产欧美| 国产伦精品一区二区三区| 一广人看www在线观看免费视频| 亚洲成人av福利| 一二三av在线| 日韩欧美高清在线播放| 国产91精品青草社区| 国产wwwwwww| 国产精品久线在线观看| 国产精品va无码一区二区| 久久在线观看| 精品国产一区二区三区四区在线观看 | 伊人久久综合影院| 国模精品系列视频| www.97超碰| 亚洲欧美日韩精品久久久久| 日本888xxxx| 久久99精品久久久久久园产越南| 久久免费精品视频| 国产不卡av在线播放| 一区在线播放视频| 蜜臀av免费观看| 欧美欧美黄在线二区| 91精品成人久久| 性xxxxbbbb| 午夜成人免费电影| 成人免费看片载| 国内精品久久久久久久影视麻豆| 91中文在线观看| 国产黄大片在线观看画质优化| 欧美视频日韩视频在线观看| 成年人免费观看视频网站| 亚洲一区久久| 久久久影院一区二区三区| 僵尸再翻生在线观看| 亚洲成人免费网站| 日韩 欧美 精品| av电影一区二区| 国产一区二区在线视频播放| 日韩av网址大全| 2021国产精品视频| 国产玉足榨精视频在线观看| 91福利国产精品| 色撸撸在线视频| 美女网站在线免费欧美精品| 亚洲精品二区| 中文成人在线| 欧美夫妻性生活视频| 丰满熟妇人妻中文字幕| 香蕉加勒比综合久久 | 国产精品欧美经典| 日本精品一区在线| 欧美日韩国产探花| 国产原创精品| 三级成人黄色影院| 日韩在线精品视频| www.色视频| 精品国产乱码久久久久久天美| 瑟瑟视频在线观看| 久久精品国产亚洲高清剧情介绍| 在线观看视频黄色| 成人线上播放| 日本最新高清不卡中文字幕| 自拍视频在线免费观看| 91精品国模一区二区三区| 久久午夜无码鲁丝片午夜精品| 99re这里都是精品| 日本在线观看免费视频| 亚洲女同另类| 久久精品国产第一区二区三区最新章节| 日本欧美不卡| 欧美黑人一区二区三区| 九色视频成人自拍| 欧美一级二级三级蜜桃| 亚洲黄色免费观看| 亚洲天堂2016| 成年人在线观看av| 久久精品国产精品亚洲精品 | 日韩在线观看一区二区| 2025韩国大尺度电影| 青青一区二区| 91九色蝌蚪国产| 在线看片福利| 久久在线精品视频| 欧洲视频在线免费观看| 欧美日韩国产小视频在线观看| 久久久久久免费观看| 久久久久成人黄色影片| 欧美体内she精高潮| 久久久久免费| youjizz.com在线观看| 欧美色图在线播放| 国产伦精品一区二区三区四区视频 | 在线观看免费版| 亚洲第一区在线| 97精品人妻一区二区三区在线 | 久久色免费在线视频| 少妇激情av一区二区| 欧美一区二区福利在线| 久久精品视频5| 性感美女极品91精品| 国产十六处破外女视频| 国产精品欧美经典| 国产美女免费无遮挡| 成人99免费视频| 69久久精品无码一区二区 | 国产热re99久久6国产精品| 日韩av一卡| 久久免费国产精品1| av网站免费在线观看| 中文字幕av一区二区三区谷原希美| 外国精品视频在线观看 | 国产在线精品免费av| 蜜臀视频一区二区三区| 国产一区二区三区成人欧美日韩在线观看| 午夜久久久久久久久久久| 999成人精品视频线3| 日韩精品极品视频在线观看免费| 日韩精品免费一区二区夜夜嗨 | 波多野结衣一区二区| 亚洲精品一二区| 四虎永久在线观看| 欧美精品一区二区在线观看| 国产ts人妖调教重口男| 91精品国产91久久久久久一区二区| 在线观看毛片av| 欧美日韩一级片在线观看| 精品国产青草久久久久96| 色猫猫国产区一区二在线视频| www.国产色| 日韩欧美精品免费在线| 二区视频在线观看| 欧美视频免费在线观看| www.国产com| 色综合视频一区二区三区高清| 国产又大又黄又粗| 色综合久久综合网97色综合 | 91精品国产免费| 国产日韩欧美一区二区东京热 | 国产精品高潮粉嫩av| 亚洲高清黄色| 国产精品极品美女在线观看免费| 日韩精品影片| 国产精品视频在线播放| 福利一区二区免费视频| 成人黄在线观看| 欧美不卡在线观看| 国产精品免费一区二区三区观看| 加勒比色综合久久久久久久久| 免费国产在线精品一区二区三区| 亚洲调教一区| 亚洲午夜在线观看| 亚洲欧美网站在线观看| 日韩欧美猛交xxxxx无码| 最新日韩在线| 妺妺窝人体色www在线观看| 免费精品视频最新在线| 天堂av.com| 成人h动漫精品一区二| 公侵犯人妻一区二区三区| 国产日韩欧美不卡| 免费看一级大片| 亚洲电影第三页| 蜜臀精品一区二区三区| 欧美日本一区二区三区| wwwxxxx国产| 亚洲精品日韩丝袜精品| 免费av在线网址| 午夜精品久久久久久久99热 | 中文字幕网站在线观看| 亚洲欧洲一区二区在线播放| 美女毛片在线观看| 在线免费观看一区| 国产情侣av在线| 精品无码久久久久久国产| 国产1区2区3区在线| 欧美另类暴力丝袜| 色豆豆成人网| 国产有色视频色综合| 色综合五月天| 欧美老熟妇喷水| 国产资源在线一区| 欧洲女同同性吃奶| 亚洲一区二区三区四区在线免费观看 | 亚洲精品国产美女| 麻豆系列在线观看| 91高潮在线观看| 日本在线成人| 三级三级久久三级久久18| 国产综合婷婷| 中文字幕第38页| 91在线看国产| 午夜少妇久久久久久久久| 色猫猫国产区一区二在线视频| 性猛交xxxx乱大交孕妇印度| 一区二区三区无码高清视频| 国产99在线| 91精品国产高清久久久久久91裸体 | 国产成人精品网| 精品国产一二三区| 美女隐私在线观看| 人九九综合九九宗合| 波多野结衣欧美| mm131午夜| 韩国三级在线一区| 欧美偷拍一区二区三区| 五月婷婷色综合| www三级免费| 久久精品国产91精品亚洲| 粉嫩一区二区三区| 欧美不卡三区| 国产日韩亚洲欧美精品| 成年人看片网站| 亚洲精品国久久99热| 一区二区三区免费在线| 一本久久综合亚洲鲁鲁| 一区二区三区短视频| 黑人巨大精品欧美一区二区小视频 | 久久精品免费在线观看| 亚洲综合一二三| 欧美精品一区二区三区四区| 在线观看中文| 91一区二区三区| 欧美在线首页| 91aaa精品| 亚洲精品五月天| 国产农村妇女毛片精品久久| 久久这里只有精品视频首页| 成人在线视频国产| 看一级黄色录像| 国产精品一二三区| 久青草免费视频| 日韩手机在线导航| 欧美78videosex性欧美| 99精彩视频在线观看免费| 亚洲天堂黄色| 男人网站在线观看| 欧美日韩美女视频| 欧美成熟毛茸茸| 国产精品爱啪在线线免费观看| 成人毛片在线| 999这里有精品| 依依成人精品视频| 四虎永久在线观看| 国产成人精品久久二区二区| 国内精品久久久久久99蜜桃| 邪恶网站在线观看| 成人免费一区二区三区在线观看| 999av视频| 韩日欧美一区二区| 视频精品在线观看| 小明看看成人免费视频| 亚洲精品国产a久久久久久 | 看黄色一级大片| xxav国产精品美女主播| 激情视频亚洲| 老太脱裤让老头玩ⅹxxxx| 久久色.com| 一级黄色a视频| 欧美极品第一页| 九九亚洲视频| 中文字幕丰满乱码| 亚洲影视在线播放| 免费在线观看污视频| 国产精品色婷婷视频| 综合天堂久久久久久久| 午夜视频在线观看国产| 91成人在线免费观看| 在线播放蜜桃麻豆| 久久精品日产第一区二区三区精品版| 日韩电影免费一区| 青青草激情视频| 亚洲欧美一区二区三区情侣bbw| 国产亚洲欧美日韩精品一区二区三区| 四虎4hu永久免费入口| 91麻豆免费在线观看| 国产又黄又粗又猛又爽| 国内精品国产三级国产在线专| 国产一区二区区别| 久久久久亚洲av片无码v| 一本色道**综合亚洲精品蜜桃冫| 国产日产一区二区| 欧美少妇一区| 国产不卡视频在线观看| 久久国产香蕉视频| 91精品国产高清久久久久久91 | 国产区在线观看成人精品|