欧美亚洲韩国_av电影院在线看_久久久久97_台湾佬中文娱乐网欧美电影

站長資訊網
最全最豐富的資訊網站

淺談Node.js多進程模型中如何實現共享內存(代碼詳解)

本篇文章和大家探討一下Node.js利用多個核心的方法–worker_threads模塊提供的多線程模型,介紹一下Node.js多進程模型中實現共享內存的方法。

淺談Node.js多進程模型中如何實現共享內存(代碼詳解)

Node.js 由于其單線程模型的設計,導致一個Node進程(的主線程)只能利用一個CPU核心,然而現在的機器基本上都是多核的,這造成了嚴重的性能浪費。通常來說,想要利用到多個核心一般有以下的方法:

  • 編寫Node的C++插件擴充線程池,并在JS代碼中將CPU耗時任務委托給其它線程處理。

  • 使用worker_threads模塊提供的多線程模型(尚在實驗階段)。

  • 使用child_process 或者 cluster模塊提供的多進程模型,每個進程都是一個獨立的Node.js進程。

從易用、代碼入侵性、穩定性的角度來說,多進程模型通常是首要的選擇。【推薦學習:《nodejs 教程》】

Node.js cluster 多進程模型存在的問題

在cluster模塊提供的多進程模型中,每個Node進程都是一個獨立且完整的應用進程,有自己的內存空間,其它進程無法訪問。因此雖然在項目啟動時,所有Worker進程具有一致的狀態和行為,但在之后的運行中無法保證其狀態維持一致

例如,項目啟動時有兩個Worker進程,進程A和進程B,兩個進程都聲明了變量a=1。但之后項目接收到一個請求,Master進程將其分派給進程A來處理,這個請求將a的值變更為了2,那么此時進程A的內存空間中a=2,但是進程B的內存空間中a依舊是1。此時如果有個請求讀取a的值,Master進程將這個請求分派給進程A和進程B時讀取到的結果是不一致的,這就出現了一致性問題。

cluster模塊在設計時并沒有給出解決方案,而是要求Worker進程是無狀態的,即程序員在寫代碼時不應該允許在處理請求時修改內存中的值,以此來保障所有Worker進程的一致性。然而在實踐中總會有各種各樣的情況需要寫內存,比如記錄用戶的登錄狀態等,在許多企業的實踐中,通常會把這些狀態數據記錄在外部,例如數據庫、redis、消息隊列、文件系統等,每次處理有狀態請求時會讀寫外部存儲空間。

這不失為一種有效的做法,然而這需要額外引入一個外部存儲空間,同時還要自行處理多進程并發訪問下的一致性問題,自行維護數據的生命周期(因為Node進程和維護在外部的數據并不是同步創建和銷毀的),以及在高并發訪問情況下的IO性能瓶頸(如果是存儲在數據庫等非內存環境中)。其實本質上來說,我們只是需要一個可供多個進程共享訪問的空間罷了,并不需要持久化存儲,這段空間的生命周期最好與Node進程強綁定,這樣在使用時能省去不少麻煩。因此跨進程的共享內存就成了最適合在這種場景使用的方式。

Node.js 的共享內存

很遺憾Node本身并未提供共享內存的實現,因此我們可以看看npm倉庫中第三方庫的實現。這些庫有些是通過C++插件擴充Node的函數實現的,有些是通過Node提供的IPC機制實現的,但很遺憾它們的實現都很簡單,并未提供互斥訪問、對象監聽等功能,這使得使用者必須自己小心維護這段共享內存,否則就會導致時序問題。

轉了一圈下來沒找到我想要的。。。那就算了,我自己寫一個。

共享內存的設計

首先我們必須理清楚到底需要個什么樣的共享內存,我是根據我自身的需求出發(為了在項目中用它來存儲跨進程訪問的狀態數據),同時兼顧通用性,因此會首先考慮以下幾點:

  • 以JS對象為基本單位進行讀寫訪問。

  • 能夠進程間互斥訪問,一個進程訪問時,其它進程被阻塞。

  • 能夠監聽共享內存中的對象,當對象發生變化的時候監聽的進程能被通知到。

  • 在滿足上述條件的前提下,實現方式盡可能簡單。

可以發現,其實我們并不需要操作系統層面的共享內存,只需要能夠多個Node進程能訪問同一個對象就行了,那么就可以在Node本身提供的機制上實現。可以使用Master進程的一段內存空間作為共享內存空間,Worker進程通過IPC將讀寫請求委托給Master進程,由Master進程進行讀寫,然后再通過IPC將結果返回給Worker進程。

為了讓共享內存的使用方式在Master進程和Worker進程中一致,我們可以將對共享內存的操作抽離成一個接口,在Master進程和Worker進程中各自實現這個接口。類圖如下圖所示,用一個SharedMemory類作為抽象接口,在server.js入口文件中聲明該對象。其在Master進程中實例化為Manager對象,在Worker進程中實例化為Worker對象。Manager對象來維護共享內存,并處理對共享內存的讀寫請求,而Worker對象則將讀寫請求發送到Master進程。

淺談Node.js多進程模型中如何實現共享內存(代碼詳解)

可以使用Manager類中的一個屬性作為共享內存對象,訪問該對象的方式與訪問普通JS對象的方式一致,然后再做一層封裝,只暴露getsetremove等基本操作,避免該屬性直接被修改。

由于Master進程會優先于所有Worker進程創建,因此,可以在Master進程中聲明共享內存空間之后再創建Worker進程,以此來保證每個Worker進程創建后都可以立即訪問共享內存。

為了使用簡單,我們可以將SharedMemory設計成單例,這樣每個進程中就只有一個實例,并可以在importSharedMemory之后直接使用。

代碼實現

讀寫控制與IPC通信

首先實現對外接口SharedMemory類,這里沒有使用讓ManagerWorker繼承SharedMemory的方式,而是讓SharedMemory在實例化的時候返回一個ManagerWorker的實例,從而實現自動選擇子類。

在Node 16中isPrimary替代了isMaster,這里為了兼容使用了兩種寫法。

// shared-memory.js class SharedMemory {   constructor() {     if (cluster.isMaster || cluster.isPrimary) {       return new Manager();     } else {       return new Worker();     }   } }

Manager負責管理共享內存空間,我們直接在Manager對象中增加__sharedMemory__屬性,由于其本身也是JS對象,會被納入JS的垃圾回收管理中,因此我們不需要進行內存清理、數據遷移等操作,使得實現上非常簡潔。之后在__sharedMemory__之中定義setgetremove等標準操作來提供訪問方式。

我們通過cluster.on('online', callback)來監聽worker進程的創建事件,并在創建后立即用worker.on('message', callback)來監聽來自worker進程的IPC通信,并把通信消息交給handle函數處理。

handle函數的職責是區分worker進程是想進行哪種操作,并取出操作的參數委托給對應的setgetremove函數(注意不是__sharedMemory__中的setgetremove)進行處理,并將處理后的結果返還給worker進程。

// manager.js const cluster = require('cluster');  class Manager {   constructor() {     this.__sharedMemory__ = {       set(key, value) {         this.memory[key] = value;       },       get(key) {         return this.memory[key];       },       remove(key) {         delete this.memory[key];       },       memory: {},     };      // Listen the messages from worker processes.     cluster.on('online', (worker) => {       worker.on('message', (data) => {         this.handle(data, worker);         return false;       });     });   }    handle(data, target) {     const args = data.value ? [data.key, data.value] : [data.key];     this[data.method](...args).then((value) => {       const msg = {         id: data.id, // workerId         uuid: data.uuid, // communicationID         value,       };       target.send(msg);     });   }    set(key, value) {     return new Promise((resolve) => {       this.__sharedMemory__.set(key, value);       resolve('OK');     });   }    get(key) {     return new Promise((resolve) => {       resolve(this.__sharedMemory__.get(key));     });   }    remove(key) {     return new Promise((resolve) => {       this.__sharedMemory__.remove(key);       resolve('OK');     });   } }

Worker自對象創建開始就使用process.on監聽來自Master進程的返回消息(畢竟不能等消息發送出去以后再監聽吧,那就來不及了)。至于__getCallbacks__對象的作用一會兒再說。此時Worker對象便創建完成。

之后項目運行到某個地方的時候,如果要訪問共享內存,就會調用Workersetgetremove函數,它們又會調用handle函數將消息通過process.send發送到master進程,同時,將得到返回結果時要進行的操作記錄在__getCallbacks__中。當結果返回時,會被之前在process.on中的函數監聽到,并從__getCallbacks__中取出對應的回調函數,并執行。

因為訪問共享內存的過程中會經過IPC,所以必定是異步操作,所以需要記錄回調函數,不能實現成同步的方式,不然會阻塞原本的任務。

// worker.js const cluster = require('cluster'); const { v4: uuid4 } = require('uuid');  class Worker {   constructor() {     this.__getCallbacks__ = {};      process.on('message', (data) => {       const callback = this.__getCallbacks__[data.uuid];       if (callback && typeof callback === 'function') {         callback(data.value);       }       delete this.__getCallbacks__[data.uuid];     });   }    set(key, value) {     return new Promise((resolve) => {       this.handle('set', key, value, () => {         resolve();       });     });   }    get(key) {     return new Promise((resolve) => {       this.handle('get', key, null, (value) => {         resolve(value);       });     });   }    remove(key) {     return new Promise((resolve) => {       this.handle('remove', key, null, () => {         resolve();       });     });   }    handle(method, key, value, callback) {     const uuid = uuid4(); // 每次通信的uuid     process.send({       id: cluster.worker.id,       method,       uuid,       key,       value,     });     this.__getCallbacks__[uuid] = callback;   } }

一次共享內存訪問的完整流程是:調用Workerset/get/remove函數 -> 調用Workerhandle函數,向master進程通信并將回調函數記錄在__getCallbacks__ -> master進程監聽到來自worker進程的消息 -> 調用Managerhandle函數 -> 調用Managerset/get/remove函數 -> 調用__sharedMemory__set/get/remove函數 -> 操作完成返回Managerset/get/remove函數 -> 操作完成返回handle函數 -> 向worker進程發送通信消息 -> worker進程監聽到來自master進程的消息 -> 從__getCallbacks__中取出回調函數并執行。

互斥訪問

到目前為止,我們已經實現了讀寫共享內存,但還沒有結束,目前的共享內存是存在嚴重安全問題的。因為這個共享內存是可以所有進程同時訪問的,然而我們并沒有考慮并發訪問時的時序問題。我們來看下面這個例子:

時間 進程A 進程B 共享內存中變量x的值
t0 0
t1 讀取x(x=0) 0
t2 x1=x+1(x1=1) 讀取x(x=0) 0
t3 將x1的值寫回x x2=x+1(x2=1) 1
t4 將x2的值寫回x 1

進程A和進程B的目的都是將x的值加1,理想情況下最后x的值應該是2,可是最后的結果卻是1。這是因為進程B在t3時刻給x的值加1的時候,使用的是t2時刻讀取出來的x的值,但此時從全局角度來看,這個值已經過期了,因為t3時刻x最新的值已經被進程A寫為了1,可是進程B無法知道進程外部的變化,所以導致了t4時刻最后寫回的值又覆蓋掉了進程A寫回的值,等于是進程A的行為被覆蓋掉了。

在多線程、多進程和分布式中并發情況下的數據一致性問題是老大難問題了,這里不再展開討論。

為了解決上述問題,我們必須實現進程間互斥訪問某個對象,來避免同時操作一個對象,從而使進程可以進行原子操作,所謂原子操作就是不可被打斷的一小段連續操作,為此需要引入鎖的概念。由于讀寫均以對象為基本單位,因此鎖的粒度設置為對象級別。在某一個進程(的某一任務)獲取了某個對象的鎖之后,其它要獲取鎖的進程(的任務)會被阻塞,直到鎖被歸還。而要進行寫操作,則必須要先獲取對象的鎖。這樣在獲取到鎖直到鎖被釋放的這段時間里,該對象在共享內存中的值不會被其它進程修改,從而導致錯誤。

Manager__sharedMemory__中加入locks屬性,用來記錄哪個對象的鎖被拿走了,lockRequestQueues屬性用來記錄被阻塞的任務(正在等待鎖的任務)。并增加getLock函數和releaseLock函數,用來申請和歸還鎖,以及handleLockRequest函數,用來使被阻塞的任務獲得鎖。在申請鎖時,會先將回調函數記錄到lockRequestQueues隊尾(因為此時該對象的鎖可能已被拿走),然后再調用handleLockRequest檢查當前鎖是否被拿走,若鎖還在,則讓隊首的任務獲得鎖。歸還鎖時,先將__sharedMemory__.locks中對應的記錄刪掉,然后再調用handleLockRequest讓隊首的任務獲得鎖。

// manager.js const { v4: uuid4 } = require('uuid');  class Manager {   constructor() {     this.__sharedMemory__ = {       ...       locks: {},       lockRequestQueues: {},     };   }    getLock(key) {     return new Promise((resolve) => {       this.__sharedMemory__.lockRequestQueues[key] =         this.__sharedMemory__.lockRequestQueues[key] ?? [];       this.__sharedMemory__.lockRequestQueues[key].push(resolve);       this.handleLockRequest(key);     });   }    releaseLock(key, lockId) {     return new Promise((resolve) => {       if (lockId === this.__sharedMemory__.locks[key]) {         delete this.__sharedMemory__.locks[key];         this.handleLockRequest(key);       }       resolve('OK');     });   }    handleLockRequest(key) {     return new Promise((resolve) => {       if (         !this.__sharedMemory__.locks[key] &&         this.__sharedMemory__.lockRequestQueues[key]?.length > 0       ) {         const callback = this.__sharedMemory__.lockRequestQueues[key].shift();         const lockId = uuid4();         this.__sharedMemory__.locks[key] = lockId;         callback(lockId);       }       resolve();     });   }   ... }

Worker中,則是增加getLockreleaseLock兩個函數,行為與getset類似,都是調用handle函數。

// worker.js class Worker {   getLock(key) {     return new Promise((resolve) => {       this.handle('getLock', key, null, (value) => {         resolve(value);       });     });   }    releaseLock(key, lockId) {     return new Promise((resolve) => {       this.handle('releaseLock', key, lockId, (value) => {         resolve(value);       });     });   }   ... }

監聽對象

有時候我們需要監聽某個對象值的變化,在單進程Node應用中這很容易做到,只需要重寫對象的set屬性就可以了,然而在多進程共享內存中,對象和監聽者都不在一個進程中,這只能依賴Manager的實現。這里,我們選擇了經典的觀察者模式來實現監聽共享內存中的對象。

淺談Node.js多進程模型中如何實現共享內存(代碼詳解)

為此,我們先在__sharedMemory__中加入listeners屬性,用來記錄在對象值發生變化時監聽者注冊的回調函數。然后增加listen函數,其將監聽回調函數記錄到__sharedMemory__.listeners中,這個監聽回調函數會將變化的值發送給對應的worker進程。最后,在setremove函數返回前調用notifyListener,將所有記錄在__sharedMemory__.listeners中監聽該對象的所有函數取出并調用。

// manager.js class Manager {   constructor() {     this.__sharedMemory__ = {       ...       listeners: {},     };   }    handle(data, target) {     if (data.method === 'listen') {       this.listen(data.key, (value) => {         const msg = {           isNotified: true,           id: data.id,           uuid: data.uuid,           value,         };         target.send(msg);       });     } else {       ...     }   }    notifyListener(key) {     const listeners = this.__sharedMemory__.listeners[key];     if (listeners?.length > 0) {       Promise.all(         listeners.map(           (callback) =>             new Promise((resolve) => {               callback(this.__sharedMemory__.get(key));               resolve();             })         )       );     }   }    set(key, value) {     return new Promise((resolve) => {       this.__sharedMemory__.set(key, value);       this.notifyListener(key);       resolve('OK');     });   }    remove(key) {     return new Promise((resolve) => {       this.__sharedMemory__.remove(key);       this.notifyListener(key);       resolve('OK');     });   }    listen(key, callback) {     if (typeof callback === 'function') {       this.__sharedMemory__.listeners[key] =         this.__sharedMemory__.listeners[key] ?? [];       this.__sharedMemory__.listeners[key].push(callback);     } else {       throw new Error('a listener must have a callback.');     }   }   ... }

Worker中由于監聽操作與其它操作不一樣,它是一次注冊監聽回調函數之后對象的值每次變化都會被通知,因此需要在增加一個__getListenerCallbacks__屬性用來記錄監聽操作的回調函數,與__getCallbacks__不同,它里面的函數在收到master的回信之后不會刪除。

// worker.js class Worker {   constructor() {     ...     this.__getListenerCallbacks__ = {};      process.on('message', (data) => {       if (data.isNotified) {         const callback = this.__getListenerCallbacks__[data.uuid];         if (callback && typeof callback === 'function') {           callback(data.value);         }       } else {         ...       }     });   }    handle(method, key, value, callback) {     ...     if (method === 'listen') {       this.__getListenerCallbacks__[uuid] = callback;     } else {       this.__getCallbacks__[uuid] = callback;     }   }    listen(key, callback) {     if (typeof callback === 'function') {       this.handle('listen', key, null, callback);     } else {       throw new Error('a listener must have a callback.');     }   }   ... }

LRU緩存

有時候我們需要用用內存作為緩存,但多進程中各進程的內存空間獨立,不能共享,因此也需要用到共享內存。但是如果用共享內存中的一個對象作為緩存的話,由于每次IPC都需要傳輸整個緩存對象,會導致緩存對象不能太大(否則序列化和反序列化耗時太長),而且由于寫緩存對象的操作需要加鎖,進一步影響了性能,而原本我們使用緩存就是為了加快訪問速度。其實在使用緩存的時候通常不會做復雜操作,大多數時候也不需要保障一致性,因此我們可以在Manager再增加一個共享內存__sharedLRUMemory__,其為一個lru-cache實例,并增加getLRUsetLRUremoveLRU函數,與setgetremove函數類似。

// manager.js const LRU = require('lru-cache');  class Manager {   constructor() {     ...     this.defaultLRUOptions = { max: 10000, maxAge: 1000 * 60 * 5 };     this.__sharedLRUMemory__ = new LRU(this.defaultLRUOptions);   }    getLRU(key) {     return new Promise((resolve) => {       resolve(this.__sharedLRUMemory__.get(key));     });   }    setLRU(key, value) {     return new Promise((resolve) => {       this.__sharedLRUMemory__.set(key, value);       resolve('OK');     });   }    removeLRU(key) {     return new Promise((resolve) => {       this.__sharedLRUMemory__.del(key);       resolve('OK');     });   }   ... }

Worker中也增加getLRUsetLRUremoveLRU函數。

// worker.js class Worker {   getLRU(key) {     return new Promise((resolve) => {       this.handle('getLRU', key, null, (value) => {         resolve(value);       });     });   }    setLRU(key, value) {     return new Promise((resolve) => {       this.handle('setLRU', key, value, () => {         resolve();       });     });   }    removeLRU(key) {     return new Promise((resolve) => {       this.handle('removeLRU', key, null, () => {         resolve();       });     });   }   ... }

共享內存的使用方式

目前共享內存的實現已發到npm倉庫(文檔和源代碼在Github倉庫,歡迎pull request和報bug),可以直接通過npm安裝:

npm i cluster-shared-memory

下面的示例包含了基本使用方法:

const cluster = require('cluster'); // 引入模塊時會根據當前進程 master 進程還是 worker 進程自動創建對應的 SharedMemory 對象 require('cluster-shared-memory');  if (cluster.isMaster) {   // 在 master 進程中 fork 子進程   for (let i = 0; i < 2; i++) {     cluster.fork();   } } else {   const sharedMemoryController = require('./src/shared-memory');   const obj = {     name: 'Tom',     age: 10,   };      // 寫對象   await sharedMemoryController.set('myObj', obj);      // 讀對象   const myObj = await sharedMemoryController.get('myObj');      // 互斥訪問對象,首先獲得對象的鎖   const lockId = await sharedMemoryController.getLock('myObj');   const newObj = await sharedMemoryController.get('myObj');   newObj.age = newObj.age + 1;   await sharedMemoryController.set('myObj', newObj);   // 操作完之后釋放鎖   await sharedMemoryController.releaseLock('requestTimes', lockId);      // 或者使用 mutex 函數自動獲取和釋放鎖   await sharedMemoryController.mutex('myObj', async () => {     const newObjM = await sharedMemoryController.get('myObj');     newObjM.age = newObjM.age + 1;     await sharedMemoryController.set('myObj', newObjM);   });      // 監聽對象   sharedMemoryController.listen('myObj', (value) => {     console.log(`myObj: ${value}`);   });      //寫LRU緩存   await sharedMemoryController.setLRU('cacheItem', {user: 'Tom'});      // 讀對象   const cacheItem = await sharedMemoryController.getLRU('cacheItem'); }

缺點

這種實現目前尚有幾個缺點:

  • 不能使用PM2的自動創建worker進程的功能。

由于PM2會使用自己的cluster模塊的master進程的實現,而我們的共享內存模塊需要在master進程維護一個內存空間,則不能使用PM2的實現,因此不能使用PM2的自動創建worker進程的功能。

  • 傳輸的對象必須可序列化,且不能太大。

  • 如果使用者在獲取鎖之后忘記釋放,會導致其它進程一直被阻塞,這要求程序員有良好的代碼習慣。

原文地址:https://juejin.cn/post/6992091006220894215

作者:FinalZJY

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
主站蜘蛛池模板: 国产香蕉久久精品综合网 | 欧美香蕉视频 | 午夜日韩在线 | 中文字幕福利视频 | 亚洲靠逼| 午夜精品区| 一本色综合亚洲精品 | 一区二区网 | 中国女人毛片 | 久久亚洲网| 亚洲欧美一区在线观看 | 国产一区二区三区四区在线观看 | 日韩中文av| 欧美视频一区在线观看 | 谁有毛片网站 | 91av官网| 尤物视频在线观看国产 | 久久久久久久九九九九 | 第四色成人网 | 国产精品美女av | 久久国内视频 | 久久99精品一区二区蜜桃臀 | 国产免费一区二区三区 | 色黄大色黄女片免费中国 | 中文字幕日本 | 超碰97在线免费 | 久久午夜免费视频 | 欧美视频在线一区 | 韩国美女毛片 | 91成人看片 | 国产精品免费一区二区三区都可以 | 已婚少妇露脸日出白浆 | 99福利| 什么网站可以看毛片 | 久久久久久久久久免费视频 | 激情欧美一区二区 | 一级片在线免费观看 | 在线a网站| 成人av免费在线观看 | 亚洲一区中文字幕在线 | 日本a v网站 | 一区二区三区中文字幕在线观看 | 欧美成人精精品一区二区频 | 夜夜躁狠狠躁日日日躁 | 国产精品成人一区二区网站软件 | 自拍天堂 | 娇小6一8小毛片 | 色婷婷久久一区二区三区麻豆 | 99自拍视频 | 日本黄色精品 | 在线观看免费黄色小视频 | 日操夜操天天操 | 黄色不卡视频 | 亚洲在线一区 | 一区二区三区四区国产精品 | 伊人狠狠 | 亲女禁h啪啪宫交 | 国产99色 | 一级特黄aaa大片在线观看 | 色哟哟在线免费观看 | 黄色二级视频 | 亚洲精品ww久久久久久p站 | 九九九久久久久 | 欧美黑人一区二区三区 | 91天天综合 | 亚洲乱码国产乱码精品 | 欧美精品成人 | 日韩免费一二三区 | 在线亚洲天堂 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 草久视频在线观看 | 四虎精品影视 | 久久久亚洲国产精品麻豆综合天堂 | 欧洲美女与动交ccoo | 91丝袜一区在线观看 | 免费观看黄一级视频 | 99re热这里只有精品视频 | 在线aa| 青青射| 欧洲精品码一区二区三区免费看 | 男女又爽又黄 | 亚洲 视频 一区 | 午夜男人天堂 | 欧美疯狂做受 | 无码少妇一区二区三区 | 欧美性生交xxxxx久久久缅北 | 精品国产乱码久久久久久88av | 波多野吉衣毛片 | 欧美色视 | 中文在线观看视频 | 99热中文 | 成人一级大片 | 男女一区二区三区 | 国内偷拍av | 色.com| av资源在线看 | 免费一级片视频 | 欧美成人一级视频 | 亚洲欧美不卡 | 依人成人网 | 情侣在线视频 | av黄色在线观看 | 在线日韩中文字幕 | 亚欧日韩 | 色亚洲视频 | 这里只有精品在线观看 | 国产视频高清 | 国产人人插 | 日韩中文字幕精品 | 精品久久综合1区2区3区激情 | www.午夜 | 婷婷久久五月 | www,jizz,com | 亚洲精品精华液一区 | 又长又硬又粗一区二区三区 | 精品一区二区三区久久久 | 欧美亚洲精品在线观看 | 天天草夜夜草 | 欧美乱大交 | 天天射夜夜骑 | www.xxx日韩| 那个网站可以看毛片 | 国内久久久久 | 夜夜穞天天穞狠狠穞 | 国产一国产二国产三 | 亚洲精品传媒 | 亚洲国产精品入口 | 鲁丝一区二区三区 | 奇米四色7777 | 国产美女一级视频 | 高级毛片 | 久久九色| 337p日本欧洲亚洲鲁鲁 | 99视频在线播放 | 欧美亚洲国产一区二区三区 | aaaaa一级片 99精品欧美 | 午夜影院在线播放 | 黄色一级片欧美 | 久久99国产精品视频 | 久久久1| 亚洲无马砖区2021 | 午夜激情久久 | 久久久精品视频免费 | 免费观看一级一片 | 欧美va天堂 | 国产精品久久久久久免费播放 | 成人免费三级 | 91视频.com| 99re这里只有精品6 | 伊人青青久久 | 精品国产乱码久久久久久影片 | 中文av在线播放 | 成人免费看片98 | 成人h免费观看视频 | 男女污网站 | 黄色国产网站在线观看 | 日日综合 | 窝窝午夜影院 | 亚洲午夜精品在线观看 | 亚洲一区二区三区久久久 | 九九综合网 | 九九综合久久 | 在线观看成人网 | 91成人影库 | 亚洲精品中文字幕在线观看 | 尤物在线视频 | 美女啪啪无遮挡 | 午夜精品福利在线观看 | 欧美黄色一区二区三区 | 国产私拍| 亚洲精品乱码久久久久久蜜桃图片 | 吻胸摸激情床激烈视频大胸 | 国产偷亚洲偷欧美偷精品 | 欧美大白bbbb与bbbb | 高清欧美性猛交xxxx | 国产精品女同久久久久 | 岛国免费av | 性生活黄色大片 | 久久精品99国产国产精 | 色七七久久| 在线看你懂 | a在线播放 | 日本欧美www | 欧美日韩精品 | 黄色大片免费网站 | 公车痴汉媚药强抹在线观看 | 国产精品免费视频网站 | 黄色一级片在线播放 | 欧美一级性生活视频 | 亚洲视频在线观看免费 | 亚洲精品三区 | 性色福利 | 成人h动漫精品一区二区 | 国产一二三在线观看 | 亚洲福利网 | 在线99 | 国产一区影院 | 久久精品欧美一区二区三区麻豆 | 337p粉嫩大胆噜噜噜亚瑟影院 | 国产做受网站 | 欧美日韩国内 | caoporen超碰 | 成人av动漫在线观看 | 亚洲在线播放 | 成年人国产网站 | 黄色av网站免费 | 久久综合热 | 成人黄色小说视频 | 精品久久a | 国产永久免费视频 | a级在线免费观看 | 最新毛片网站 | 成人午夜视频免费看 | 亚洲另类激情综合偷自拍图 | 国产精品一区二区三区不卡 | 网址在线观看你懂的 | 国产福利不卡 | 中文字幕观看视频 | 欧美日韩免费一区二区三区 | 日批在线播放 | 亚洲国产视 | 一本一道久久a久久 | 亚洲成人a∨ | 久久久精品在线观看 | 插插插干干干 | 色哟哟视频在线 | 午夜av网| 欧美精品一二三 | 日韩爽爽视频 | 天天视频黄 | 一级特色黄色片 | 日本免费在线观看 | 国产欧美日韩在线播放 | 国产精品一二区在线观看 | 超碰人人做 | 夜夜操人人 | 国产又黄又爽视频 | 亚洲热在线观看 | 亚洲欧洲在线视频 | 国产a线| 午夜激情一区 | 亚洲羞羞 | 在线观看午夜视频 | 亚洲精品免费观看 | 欧美二区三区 | 亚洲啪啪网址 | 91免费看片网站 | 夫妻黄色片 | 国产在线激情视频 | av大全免费看 | 99热99色 | av黄色在线观看 | 一级片欧美| av涩涩| 国产成人影视 | 91麻豆精品91久久久久同性 | 国产免费一区二区三区 | 欧美成人一级片 | 欧美日韩免费视频 | 青娱乐国产精品 | 色婷婷综合成人 | www.com欧美| www裸玉足久久久 | 91精选 | 理论片在线观看理伦片 | 免费高清欧美大片在线观看 | 日韩精品网址 | 神马久久香蕉 | 欧美精品一二三区 | 日本a级网站 | 久久精品高清 | 国产三区在线播放 | 看av网站 | 国产黄色视屏 | 国产精品午夜视频 | 国产精品久久久久久一二三四五 | 久久久久久久久久久久久久久久久久 | 一道久久 | 91人人干| 亚洲精品一级 | 麻豆成人91精品二区三区 | 天天天干干干 | 情涩快播 | 欧洲色综合 | 夜夜干夜夜 | 涩涩网址 | 狠狠久久综合 | 久久国产在线观看 | 色视频在线播放 | 可以看毛片的网站 | 欧美日韩理论 | 国产综合视频在线 | 91精品国产aⅴ一区二区 | 网站在线播放 | 香蕉视频国产 | 欧美午夜精品一区二区蜜桃 | 亚洲成人二区 | 伊人黄色网 | 日韩毛片av| 欧美日韩在线视频免费播放 | 国产毛片99 | 黄色av观看 | 一级黄色大片视频 | 精品国产一区二区三区久久狼黑人 | 6080电视影片在线观看 | 中文字幕亚洲欧美日韩在线不卡 | 亚洲h视频在线 | 一级α片免费看刺激高潮视频 | 一区二区三区国产 | 色婷婷激情网 | 久久久国产精品一区二区三区 | 岛国av在线免费观看 | 国产成人三级在线观看 | 欧美乱大交xxxxx | 尤物视频最新网址 | 亚洲一区二区三区在线视频 | 亚洲精品蜜桃 | 亚洲第一黄色网址 | 黄色国产在线观看 | 亚洲欧美第一页 | 免费精品在线 | 日本一级淫片免费放 | 91av视频在线 | 亚洲第二页 | 男人和女人日批视频 | av免费入口 | 国产精品一区二区av日韩在线 | 狠狠婷婷| 中文字幕久久精品 | 色97| 在线欧美不卡 | 性高潮久久久久久久久 | 国av在线 | av在线资源站 | 亚洲久久久久 | 蜜臀久久99静品久久久久久 | 午夜高潮| 国产妞干网 | 激情a| 国产 欧美 在线 | 国语毛片| 日日夜夜欧美 | 中文字幕在线播放视频 | 免费看h网站 | 国产一区二区三区免费播放 | 国产精品国产成人国产三级 | 亚洲国产精品成人久久久麻豆 | 成人黄色在线免费观看 | 亚洲在线精品 | 国内偷拍久久 | 成人av教育| 国产女人呻吟高潮抽搐声 | av国产在线观看 | 青青草免费av | 亚洲成人精品一区 | 福利网站在线 | 五月深爱婷婷 | 午夜黄色小视频 | 色狠狠一区二区三区 | 又黄又色 | 午夜影视在线观看 | 亚洲88av | 国产精品www | 欧美另类专区 | 一级黄色片在线播放 | 国户精品久久久久久久久久久不卡 | 日韩成人av一区二区 | h视频国产| 神马香蕉久久 | 日韩国产欧美一区 | jzzijzzij亚洲成熟少妇 | 第一色综合| 乱色视频| 久久久精品国产sm调教 | 免费成人结看片 | 国产乱码精品一区二区三区五月婷 | 日本黄色免费看 | 国产女人高潮的av毛片 | 免费毛片一区二区三区 | 欧美乱大交 | 欧美顶级黄色大片免费 | 中文字幕精品视频 | 精品九九九九九 | 亚洲国产精品99久久久久久久久 | 在线xxxx| 亚洲三区在线 | 日韩精品视频播放 | 成人综合色站 | 成人午夜影视在线观看 | av桃色| 日本少妇吞精囗交视频 | 欧美成人二区 | 欧美激情视频在线观看 | 九一国产在线观看 | 天天干天天干天天 | 国产超碰av | 公车痴汉媚药强抹在线观看 | 欧美顶级毛片在线播放 | 亚洲精品乱码久久久久久金桔影视 | 国产精品自拍在线 | 男人日女人免费视频 | 婷婷综合五月天 | av av片在线看 | 国产又粗又黄又爽视频 | 久久免费看片 | 亚洲最新视频在线观看 | 免费爱爱网址 | 日美韩av | 亚洲国产成人欧美激情 | 丁香花激情网 | 国产午夜精品一区二区三区嫩草 | 在线看国产视频 | 欧美一区二区三区免费 | 亚洲天堂成人av | 久久人人爽 | a视频在线免费观看 | 久草成人在线 | 华人在线视频 | 色av一区 | 久久久久久少妇 | 神马午夜av| a黄色大片| 国产三级高清 | 成人国产一区二区三区精品麻豆 | 欧美一区二区在线观看 | 国产aaaa视频| 亚洲精品成人久久久998 | 国模私拍在线 | 色婷婷一区二区三区四区 | av在线网址观看 | 国产在线啪 | 国产精品欧美激情 | 天天操夜夜操 | 久久久综合网 | 成人毛片视频免费看 | 91偷拍精品一区二区三区 | 视频在线一区二区 | 男女视频免费 | 天堂在线视频观看 | 免费欧美 | 国产视频一区二区在线观看 | 亚洲欧美成人aⅴ大片 | 视频一区二区三区四区五区 | 亚洲国产精品自在拍在线播放 | 牛牛在线视频 | 国色天香网站 | 亚洲暴爽av天天爽日日碰 | 色老汉av一区二区三区 | 久久久久久久中文字幕 | 一级特黄色大片 | 国产山村乱淫老妇女视频 | 污污视频在线播放 | 亚洲激情三区 | 刘亦菲久久免费一区二区 | 性高跟丝袜xxxxhd | 欧美自拍亚洲 | 国产免费自拍视频 | 免费看av毛片 | 国内成人自拍视频 | 国产在线国偷精品产拍 | 久久精品在线播放 | 久草免费在线观看视频 | 在线免费观看污片 | 成人中文字幕+乱码+中文字幕 | 国产欧美一区二区三区精品酒店 | 国产高清不卡 | 波多野结衣av片 | 欧美xxxⅹ性欧美大片 | 欧美福利视频一区二区 | 亚洲精品日韩在线 | 少妇高潮av久久久久久 | 美女精品网站 | 99久久精品无免国产免费 | 香蕉精品久久 | 视色av| 国产福利视频一区二区 | 免费全黄一级裸体片 | 毛片久久久久 | 亚洲精品一区二区三区区别 | 毛片av网站 | 一本一道久久a久久精品蜜桃 | 天天弄天天干 | 免费亚洲精品 | 一区视频免费在线观看 | 中文字幕亚洲第一 | 99色资源| 国产网站91 | 波多野结衣视频一区 | 羞羞动漫在线观看 | 国产精品久久久久久久岛一牛影视 | 91快色| 国产特黄一级片 | 久久久综合精品 | 青青草原国产视频 | 久久久av免费 | av伊人久久 | 欧美日韩a | 日韩福利在线观看 | gav在线| 国产亚洲精品久久 | 久久福利影院 | 男女激情av| 九九热欧美| 欧美精品福利视频 | 中文字幕 国产精品 | 深夜福利一区二区三区 | 成人亚洲精品 | 国产香蕉视频在线播放 | 美色视频 | 涩五月婷婷 | 一区二区三区在线看 | 国产第56页 | 国产尤物在线视频 | 亚洲最大成人在线视频 | 亚洲欧美v| 在线观看成人黄色 | 三级av在线播放 | 岛国av免费看 | 99re7| 国产乱视频| 国产精选自拍 | 精品久久久久香蕉网 | 亚洲精品国产一区二区 | 九九热视频在线观看 | h片在线观看视频 | 欧美精品国产 | 农村黄色片 | 国产成人免费视频网站高清观看视频 | 顶级嫩模啪啪呻吟不断好爽 | 国产无遮挡又黄又爽又色视频 | 欧美精品一区二区久久婷婷 | 狠狠干狠狠插 | a资源在线 | 尤物毛片| 欧美日韩在线观看一区 | 国产精品黄色在线观看 | 8x国产一区二区三区精品推荐 | 成人h视频在线 | 国产草草| 亚洲精品美女视频 | 激情综合网五月婷婷 | 中国国产黄色片 | 久本草精品 | 一区二区中文字幕 | 亚洲午夜av | 亚洲福利影片在线 | 岛国伊人 | 在线中文字幕网 | 琪琪在线视频 | 日本免费久久 | 一级黄色免费片 | 91久久国产综合久久91精品网站 | 欧美一区二区三区激情啪啪 | 久久影院一区 | xxx综合网 | 日韩特级毛片 | 一级片黄色 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品成人av性教育 | 国产一二三四在线 | 欧美色图亚洲激情 | 先锋资源久久 | 欧美乱码视频 | 天天操欧美| 国产1区| 99热高清 | 开心激情播播 | 337p粉嫩大胆噜噜噜亚瑟影院 | 亚洲国产第一页 | 色综合天天综合网国产成人网 | 欧美在线不卡视频 | 人人人插 | 五月婷婷六月激情 | 视频一区在线免费观看 | 国产不卡一区在线 | 可以免费看毛片的网站 | 成人在线观看网 | 武林美妇肉伦娇喘呻吟 | 午夜亚州 | xxxx国产| 国产欧美一级 | 中文字幕第九页 | 免费av一区二区三区 | 亚洲欧美日韩久久 | 久久久久极品 | 综合色综合 | 久久伊人色 | 欧美区日韩区 | 午夜午夜 | 国产精品午夜影院 | 国产91在线观看丝袜 | 五月婷婷久久久 | 99久久久成人国产精品 | 中文av网站| 在线观看区 | 色臀av| 久久亚洲一区二区 | 国产精品9999久久久久 | 黄色一级视频免费观看 | 亚洲欧美日韩在线看 | 狠狠鲁狠狠干 | 不卡的av网站 | 奇米第四色7777| 成人精品国产 | 欧洲一区在线观看 | 日韩九九九 | 91网站大全 | 九九精品99久久久香蕉 | 男人天堂网在线观看 | 精品在线视频播放 | 欧美日韩综合在线观看 | 姐姐av| 999国产精品视频免费 | 亚洲三级影院 | 色网站免费观看 | 成人婷婷 | 色婷婷成人 | 亚洲精品成人 | 亚洲综合成人av | 毛片a级片 | 亚洲一级片在线观看 | 欧美嘿咻视频 | 久久精品2024 | 国产一国产二国产三 | 另类性姿势bbwbbw | 制服av在线 | 亚洲乱码国产乱码精品精98 | 日韩视频网 | 国产91九色 | 日日狠狠 | 国产亚洲天堂 | 国产精品成人免费看片 | 综合激情av| 国产乡下妇女做爰毛片 | 国产精品中文在线 | 高清av免费 | 中文字幕日韩一区二区 | 国产无人区码熟妇毛片多 | 亚洲一片二片 | 色干网| 日韩国产亚洲欧美 | 成人福利小视频 | a一级黄色片 | 国产一级片久久 | 天堂资源中文在线 | 国产精品成人免费一区二区视频 | 午夜一级在线 | 亚洲最大在线观看 | 亚洲骚图| 永久免费视频网站直接看 | 96精品| 精品对白一区国产伦 | 亚洲综合套图 | 精精国产| 日韩激情一区二区三区 | 日本视频黄色 | 亚洲视频一区在线播放 | 韩国三级中文字幕hd久久精品 | 国产免费a视频 | 99视频国产精品免费观看a | 欧美黄色大片在线观看 | 伊人网综合在线 | 午夜av在线免费观看 | 亚洲一级在线观看 | 香蕉视频在线视频 | 亚洲精品69 | 亚洲欧美日本在线 | 亚洲淫视频 | 亚洲综合社区 | 韩国av一区 | 香蕉污视频在线观看 | 日韩av不卡在线观看 | 亚洲天堂成人网 | 天堂成人| 色噜噜在线播放 | 337p亚洲精品色噜噜噜 | jzzijzzij亚洲成熟少妇 | 高潮毛片7777777毛片 | 日韩精品一二三 | 久久国产91| 伊人久久大香线蕉综合网站 | 国产91在线观看丝袜 | 色婷婷av777 日本三级日本三级日本三级极 | 婷婷综合五月 | 97超在线 | 欧美一区二区人人喊爽 | 国产成人精品综合在线观看 | 欧美日韩中文在线观看 | 亚洲aaaaa特级 | 日本色综合 | www.亚洲 | 色无极在线 | 久久露脸国产精品 | 日本成人免费在线视频 | 午夜激情视频 | 男女啪啪十八 | 少妇高潮一区二区三区99 | 中文字幕在线视频第一页 | 国产激情在线 | 国产精品高潮呻吟av久久4虎 | 精品国产乱码一区二区三 | 在线观看不卡一区 | 在线观看国产黄色 | 伊人av网站 | av一起看香蕉 | 中文字幕一区2区3区 | 久久久中文字幕 | av大片免费看 | 国产69久久精品成人看 | 日韩 欧美 | 97超碰免费在线观看 | 欧美日韩大片在线观看 | 一级性视频| 黄瓜视频在线观看污 | 成人一区二区三区免费视频 | 欧美91| 久久怡春院| 91精品国产91久久久久久黑人 | 99爱爱视频| 亚洲黄色在线看 | 成人做爰69片免费看网站野花 | 天堂色综合 | 在线观看国产日韩 | 久久欲| 成人在线视频一区二区 | 老鸭窝一区二区 | 国产精品女同一区二区 | 污av| 婷婷色网站 | 狠狠a | 星空无限mv国产剧入选 | 黄色小视频在线看 | 欧美亚洲高清 | 奇米网久久 | 黄色网址你懂的 | 亚洲专区免费 | 男女啪啪在线观看 | 色眯眯影视 | 六月婷婷七月丁香 | 葵司在线视频 | 又粗又色又爽一区二区三区 | 91成人在线网站 | 国产激情视频在线 | 97精品视频在线观看 | 色黄视频在线观看 | 久久一级大片 | 四虎伊人 | 黄色动漫免费在线观看 | 97成人资源 | 四虎av| 视频网站在线观看18 | 欧美精品韩国精品 | 亚洲综合天堂 | 久久成人福利 | 偷拍亚洲综合 | 日韩啪啪网 | 亚洲一区二区三区久久久 | 午夜精品久久久久久久91蜜桃 | 天天干视频 | 青青国产 | 亚洲第一成网站 | 激情网久久| 黄色a一级 | 日韩白浆| 亚洲综合小说区 | 欧美精品一区二区三区视频 | 久色婷婷 | 日本在线视频中文字幕 | 成年人看的网站 | 亚洲一级性生活 | 黑人巨大精品欧美一区二区免费 | a黄色大片 | 中文字幕一区二区三区在线播放 | 老司机午夜免费视频 | 免费人成网站 | 免费一级肉体全黄毛片 | 亚洲在线视频观看 | 一区二区三区色 | 一区二区三区高清 | 久久99免费 | 自由成熟xxxx色视频 | 九一国产精品 | 激情欧美一区二区 | 一线毛片| 手机看片1024欧美 | 中文字幕第15页 | 久久99精品久久久水蜜桃 | 小草av在线 | 国产色多传媒网站 | 小柔的淫辱日记(h | 红桃视频国产精品 | 精品一区二区三区免费观看 | 色哟哟网站在线观看 | 狠狠躁夜夜躁人人爽视频 | 91精品国产综合久久福利软件 | 亚洲精久久 | 国产精品视频在线观看免费 | 久久网中文字幕 | 精品久久国产视频 | 成熟女人毛片www免费版在线 | 蜜臀在线观看 | 视频一区二区在线播放 | 九九热视频免费观看 | 黄色av网站网址 | 中文字幕综合在线分类 | 中文在线播放 | 乱h伦h女h在线视频 午夜视频福利 | 日韩精品一级 | 色呦呦网站在线观看 | 狠狠干91 | 亚洲成人毛片 | 国产影片中文字幕 | 一级片免费在线播放 | 久久综合五月 | 放荡闺蜜高h苏桃情事h | 欧美国产日韩在线观看 | 97人人模人人爽人人喊网 | 欧美在线一| 国产一区二区三区在线看 | 成 年人 黄 色 片 | 黄色一级片在线 | 女人18毛片水真多 | а√天堂资源在线 | 久久精品一日日躁夜夜躁 | 91精品免费视频 | 五月天在线播放 | 国产又粗又猛 | 日本学生初尝黑人巨免费视频 | 国产白浆视频 | 色片网站在线观看 | 91最新在线| 黄色小说网站在线观看 | 91精品国产一区二区三区蜜臀 | 精品欧美在线观看 | 亚洲欧美中字 | 自愉自愉亚洲 | 99er8 | 在线视频播放大全 | 免费黄色观看 | 6—12呦国产精品 | 91一区二区三区 | 国产精品xxx视频 | 3344成人网 | 99久久精品国产免费看不卡 | 最新国产网站 | 久久久国产精华液 | 成人高清免费 | 污污av| 麻豆国产一区二区三区四区 | 国产黄色片子 | 色噜噜在线 | 日本中文视频 | 91精品亚洲 | 精品国产一区二区三区久久久久久 | 欧美顶级少妇做爰 | 午夜视频污 | 国产伦精品一区二区三区免费优势 | av免费毛片| 在线视频a| 久久综合99 | 国产午夜久久 | 女同性αv亚洲女同志 | 久久人人澡 | 韩国中文字幕hd久久精品 | 亚洲男人天堂 | aaa在线播放 | a毛片在线 | 日批在线观看 | 92国产精品 | 黄色污污视频 | av免费天堂| 操亚洲女人 | 亚洲一区二区在线看 | 亚洲蜜臀av乱码久久精品 | 在线看片你懂的 | av福利社| 99精品视频免费 | 91免费观看视频 | 超碰在线日韩 | 色黄视频网站 | 久久国产一区二区三区 | av不卡毛片 | 日日夜夜天天干 | 欧美高清视频在线观看 | 99国产精品欧美久久久久久 | 日韩av大片在线观看 | 91久久一区二区 | 日本丰满少妇做爰爽爽 | 国内黄色一级片 | 日日操天天操夜夜操 | 69精品人人人人 | 高潮中文字幕 | 在线播放日韩av | 久久综合伊人 | 粉嫩av渣男av蜜乳av | 夜夜爽88888免费视频4848 | 中文字幕一区二区免费 | 奇米成人网 | 超碰在线9 | 奇米第四色777 | 又色又爽又黄无遮挡的免费视频 | 欧美一区亚洲一区 | 毛片在线看片 | 日本一区二区三区在线观看视频 | 亚洲福利网址 | 久久99精品久久久水蜜桃 | 爆操91| 成人国产一区二区 | 好吊色在线视频 | 一级美女视频 | 成人在线精品视频 | 亚洲不卡网 | 亚洲黄色免费观看 | 婷婷色在线 | 成人日韩在线 | 国产久草视频 | 亚洲影视一区二区三区 | 不卡av影院| www色中色 | 爱爱中文字幕 | 日本国产视频 | 免费观看毛片网站 | 可以免费看毛片的网站 | 久草福利资源在线观看 | 国产综合视频 | 自拍偷拍亚洲欧美 | 亚洲精品一卡二卡 | 操处女逼视频 | 天天av网 | 欧美黄色一区 | 黄色三级网站在线观看 | 国产特级黄色片 | 国产精品对白 | 亚洲v日韩v综合v精品v | 两性午夜视频 | 在线中文视频 | 亚洲专区一区二区三区 | 欧美资源在线观看 | 免费看av在线 | 色在线视频观看 | 国产又粗又长又黄 | wwwxxxxx日本| 午夜亚州| 日大逼| 欧美人成在线 | 99久久婷婷国产精品综合 | 亚洲一区二区视频在线观看 | 日韩一区二区免费看 | 黄视频网站在线观看 | 国产91av视频 | 日韩淫 | 99热官网 | 亚洲视频国产精品 | 韩日一区二区 | 夜夜狠狠| 国产小视频免费在线观看 | 国产a级黄色 | 亚洲性猛交xxxx乱大交 | 亚洲精品18p | 校园春色综合 | 午夜网址| 青青免费在线视频 | 最新久久久 | 中国在线观看片免费 | 成人精品视频在线 | 久久免费片 | 国产色呦呦| 在线天堂av| 超碰青草| 中文字幕第28页 | 伊人啪啪网 | 亚洲经典视频在线观看 | 国产一级在线免费观看 | 国产黄色www| 6699嫩草久久久精品影院竹菊 | 一级黄色网址 | 99热.com | 国内久久精品视频 | 97久久人澡人人添人人爽 | 色婷婷免费 | 99久久精品日本一区二区免费 | 日本a v网站 | 亚洲精品在线视频免费观看 | 婷婷激情视频 | 亚洲一区色图 | 日批在线播放 | 91免费黄色 | 中文字字幕在线中文乱码 | 蜜臀av性久久久久av蜜臀妖精 | 色女仆影院 | 国产精品久久久久久久久久10秀 | 懂色av一区二区在线播放 | 中文av资源| 国产欧美第一页 | 久久va| 国产精品815.cc红桃 | 91精品免费观看 | 日韩精品成人免费观看视频 | 中文字幕精品三区 |