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

事務系統實現模式很簡單?你確定沒忽視這些差異?

開發 架構
本文旨在闡述Fault-Tolerant Transaction的幾種實現模式。雖然乍一看它們可能都是Raft+KVEngine +Concurrency Control,容易被認為是同一類方法,但實際上的差異很大,在討論時不應該忽視它們之間的差異。

 本文試圖討論這幾個問題:

  • MySQL的redo log和binlog為什么要用XA?
  • MongoDB的oplog是按照什么順序復制?
  • Raft真的只能串行Apply嗎?
  • 數據庫的復制和事務是完全獨立的兩回事?
  • 為什么MySQL不早點做一個Raft插件,直接用Raft實現高可用?

本文旨在闡述Fault-Tolerant Transaction的幾種實現模式。雖然乍一看它們可能都是Raft+KVEngine +Concurrency Control,容易被認為是同一類方法,但實際上的差異很大,在討論時不應該忽視它們之間的差異。

一、基本概念

討論的Fault-Tolerance,指的是通過網絡通信的多個計算機節點,在部分節點發生Stop Failure的情況下,仍然盡力保證可用性;

不討論具體的Fault-Tolerance方法,默認讀者對Raft等算法有基本理解;

也不討論具體的Concurrency Control方法,默認讀者對其有基本的理解;

會涉及到Spanner、TiKV、MongoDB等具體的數據庫。

1、基于RSM的Fault-Tolerant KV

Replicated State Machine最早應該是在『Implementing fault-tolerant services using the state machine approach』提出。它是一種很簡單實用的實現容錯的方法,核心思想是:幾個狀態機具有相同的初始狀態,并且按照同樣的順序執行了同樣的命令序列,那么它們的最終狀態也是一樣的。由于狀態一樣,那么任意一個狀態機宕機,都可以被其他的代替,因此實現了Fault Tolerant。

 

這里提到了幾個概念,命令、執行順序、狀態機,它們都是抽象概念,對應到具體的應用場景才有實際意義。在KVEngine的場景下,命令就是Put/Get等操作,狀態機就是KVEngine本身,而執行序列,則由Replication Log決定。

既然提到了RSM和KV,那么基于RSM的KV也就呼之欲出了。把發到KVEngine的操作先用Raft復制一遍,在Apply的時候扔回到KVEngine執行,于是我們就得到了一個Fault-Tolerant的KVEngine。

看起來很簡單,但我在這里顯然忽略了很多細節:

  • 串行還是并行Apply:Raft被人詬病的一點是串行Commit、串行Apply,但這并不是Raft的鍋;
  • 兩條Log:Raft復制需要一個Log,KVEngine也會有一個WAL,會帶來IO放大,能不能合并成一個呢?
  • Checkpoint:為了加速Recovery,需要做Checkpoint;
  • 只讀操作需要復制嗎?
  • 命令可以是復合操作嗎:單行的CAS操作可以嗎,多行的事務操作可以作為一個命令嗎?

2、基于RSM的事務

我們來考慮***一個問題,RSM中的命令,可以直接是一個事務嗎?

既然Raft都是串行Apply了,那么看起來把事務的所有操作作為一個命令扔到狀態機執行并沒有什么問題。

但問題在于,實際中的事務是交互式的,也就是包含了if-else等邏輯的,并且邏輯還可能依賴了數據庫系統外部的狀態,所以不能簡單地用Write Batch + Snapshot來實現一個事務,還是要有Concurrency Control的邏輯。

 

為了解決Concurrency Control的問題,我們在Raft Leader上,實現一個Lock Table和Transaction Manager。拿S2PL方法舉例:

  • 讀數據之前加讀鎖,寫數據之前加寫鎖;讀操作通過Raft讀數據,寫操作Buffer在本地;
  • 在用戶決定事務提交時,即可釋放讀鎖;通過Raft寫一條事務日志,包含所有寫操作;
  • 在Raft Apply事務日志時,把寫操作應用到KVEngine,并且釋放寫鎖。

這里舉的例子是S2PL,但對于其他的并發控制方法也基本通用。例如Snapshot Isolation,事務開始時獲得KV的Snapshot,讀操作都走Snapshot,寫操作獲得寫鎖,數據Buffer在本地,事務提交時檢查[begin, end]之間有沒有寫沖突,沒有的話則通過Raft寫事務日志,在Apply事務日志之后,把寫操作應用到KVEngine,***釋放寫鎖。

 

這種方法接近Spanner的做法,它具有幾個特點:

  • 只有Leader需要維護Lock Table、Transaction Manager,事務并發控制基本在Leader節點完成;
  • 從RSM的角度來看,這里的Lock Table起到了命令定序的作用,保證所有State Machine按照同樣的順序執行命令;
  • 加鎖操作不走復制協議,解鎖操作在復制協議Apply之后完成,鎖會在復制的開始到Commit一直持有:也就意味著,復制協議的Commit即是事務的Commit,在Commit之前發生Failover,事務都會Abort;
  • Raft所復制的,即是事務的REDO。

3、基于共享存儲的事務

重新看一下上面這個模型,復制協議所做的事情非常簡單,和其他模塊的耦合也很小,僅僅是維護一個有序的Log,因此,我們可以把它從share-nothing推廣到share-storage的模型中。

 

也就是說,我們把普通的單機事務引擎,放到一個高可用的存儲上,就得到了基本可用的Fault-Tolerant 事務引擎了,連復制協議也不需要實現的。

不過事情顯然不會這么簡單:

  • 如何實現只讀節點,提供讀擴展的能力;
  • 計算節點如何更快地Failover;
  • 如何把更多的操作下推到存儲節點。

4、基于高可用KV的事務

 

回到一開始的***種方案,在一個節點實現了KV、Raft、Lock Table、Transaction Manager,看起來耦合度比較大了,我們能不能對其進行分層,進一步簡化呢?例如Google的經典做法,基于GFS實現Bigtable,基于Bigtable實現Percolator,Layered設計易于迭代、易于開發、易于調試。

因此我們可以考慮把KV層單獨抽離出來,基于KV去實現Lock Table、Txn Manager:

  • Lock Table:在原本的KV中增加一列,變成Key => {Value, Lock};
  • Txn Manager: 從事務修改的所有Key中選出一個Primary Key,用來記錄事務狀態,因此KV進一步變成 Key => {Value, Lock, TxnStatus};
  • MVCC:甚至我們不甘心于Single Version,還想用Multi Version的并發控制,那么KV就變成{Key, Version} => {Value, Lock, TxnStatus}。

看過Percolator、TiKV設計的應該會比較熟悉,它們就是基于一個高可用的KV,把事務的狀態都下沉到KV中。這種設計很容易拓展到分布式事務的場景,如果KV能夠scale,那么上層的事務也能夠scale了。

5、基于單機事務引擎實現高可用事務

上面的方案看起來都比較簡單,不過有一個細節不容忽視:鎖基本都是在復制協議提交之后才會釋放,換句話說事務持有的鎖會從事務開始直到多個節點寫完日志,經歷多次網絡延遲、IO延遲,并且在擁塞情況下會面臨排隊延遲的風險。而鎖意味著互斥,互斥意味著事務吞吐降低。

翻譯一下:

  • 并發且有沖突的事務,其提交順序由Lock Table決定,并且和復制協議的Log順序一致;
  • 事務的Serialization Order,和RSM 中的Order一致。

不過這里存在一個問題:

  • 鎖一定要在復制協議提交之后才能釋放嗎?
  • 提前釋放會破壞Order的一致性嗎?
  • RSM的Order一定要和事務的Serialization Order一致嗎?

暫且不做回答,我們再看***一種方案,基于單機事務引擎的高可用事務。

 

在正常的單機事務流程中,增加一個復制的環節:本地事務提交之后不是立即返回用戶,而是寫binlog,等待binlog復制到其他節點之后再返回用戶。

這種方式的事務延遲,看起來還是本地事務的延遲,加上復制日志的延遲;但相比于之前的方案,本地事務可以先提交,鎖可以提交釋放,總體的事務吞吐相比之下會有所提升。

看起來甚至比之前的方案更加簡單,事務和復制模塊得到了***的分離,但這里忽略了一個復雜的問題:

  • 基于哪個日志來復制,基于數據庫的Journal,還是再寫一個binlog?
  • 基于什么順序進行復制,如果是基于Journal復制可以用Journal順序,如果基于binlog,順序又是什么?
  • 如果有兩個日志,兩個日志其實意味著Transaction Serialization Order和RSM的State Machine Order不一樣,會不會產生事務的并發異常,或者導致State Machine不一致?

由于直接復制Journal會引起一系列復雜的耦合問題,大部分數據庫都選擇單獨寫一個binlog/oplog來實現復制,不過在實現時可以做優化,因為如果真的寫兩個log會有原子性的問題(一個寫成功了另一個沒寫成功)以及IO放大的問題。

這里的設計空間比較龐大,不做詳細討論,僅僅考慮在簡化的模型下復制順序的問題。

 

對于并發執行的事務,為了確定復制順序,這里維護一個稱之為OpTime的自增ID。后續的復制會按照OpTime的順序,OpTime小的先復制。如果OpTime僅僅是在事務的開始和結束之間分配,會帶來問題:

  • 有沖突且并發的事務T1先Commit,具有較大的OpTime,也就意味會被后復制;
  • 后Commit的事務T2先Replication Commit,而先Commit的事務T1可能因為復制失敗而Rollback;
  • 對于事務來說,這種場景下出現的異常類似Read-Uncommitted,事務T2讀到了未Commit的數據。

因此,OpTime的分配需要有更強的限制:對于并發且有沖突的事務,OpTime的順序要和事務的Serialization Order一樣:

 

在S2PL的場景中,我們把OpTime分配放到Lock之后Commit之前,即可滿足這個要求。因為按照S2PL的調度,事務的Commit-Point就是Lock完成和Unlock之間。對照上面的例子,事務T2的OpTime被推遲到T1之后,復制的順序也會相應改變,不會發生先前的異常了。

 

推廣到其他的并發控制方法也是類似,例如上面的Snapshot Isolation。提交之前會檢查[begin, end]是否有沖突,有沖突直接重啟事務。相當于在[begin, end]區間內分配OpTime即可。

這種方法通過OpTime,保留了Transaction Serialization Order和RSM的Order之間的關系:

  • 并發且有沖突的事務,其OpTime的順序和事務Serialization Order一樣;
  • 并發但沒有沖突的事務,其OpTime順序不確定,因為誰先提交都不會影響正確性;
  • 有先于關系的事務,OpTime也一定滿足這個先于關系。

不過這里留下了一個問題,留待讀者思考:

如何按照OpTime復制,因為有事務Abort的情況,OpTime做不到連續自增,僅僅是單調自增。

二、對比

***種其實是Spanner,第二種是TiKV、Percolator,第三種是MySQL、MongoDB。

它們在復制上的區別:

  • ***種方案,復制了事務的REDO,事務的提交順序由Raft Log的順序確定,Failover等機制完全按照RSM的模型來即可;
  • 第二種方案,Raft僅僅用于復制KV,事務的順序和Raft Log的順序沒有關系,KV層的Failover和事務的Recovery完全獨立;
  • 第三種方案,已經區別于傳統的RSM模型,因為它其實是先Apply,再Replication、Commit,可以實現并發Apply。

從復雜度來看:

  • 第二種最簡單清晰,從Raft,到Raft KV,再到Transactional KV,分層良好;
  • 其次是***種,在Leader節點會額外實現Lock Table、Transaction Manager,這個和Raft是緊密結合的,但是事務提交的順序就是Raft Log的提交順序,不會造成混淆;
  • 最復雜的是第三種,由于事務提交順序和Optime順序不一致,對復制、讀寫等各種流程都會造成影響,看似簡單但實則耦合。

從事務并發的角度來看:

  • 第三種方案可以***支持并發,且持有鎖的時間較短,僅僅是寫一次本地日志;
  • ***二種方案持有鎖的時間更長,***在Apply時理論上可以做到并發,如果沒有其他約束。

從讀寫開銷的角度來看:

  • ***種***,Replication Log和Engine Log可以合并,每條事務只要復制一次Raft Log;
  • 其次是第二種,通常會把binlog和存儲引擎的journal獨立,需要寫兩遍;不過oplog可以寫到存儲引擎里,一次IO即可提交(MongoDB的做法);
  • ***是第二種,在KV中增加了更多的數據,放大較多。

不過這僅僅是理論上的分析,實際的復雜度、性能,很大程度上取決于實現而非理論。

三、總結

如果我們從很粗的層面來看,會覺得這些系統不過都是幾個技術點的組合,而每一個技術點看起來都很簡單,進而覺得事務系統不過是如此。

但實際上事務系統絕非簡單的KV+Raft+Snapshot Isolation,它們之間不同的組合方式,會最終造就不同的系統。

本文留下了很多問題,RSM的Order往往認為是全序的,而Transaction 的Serialization Order是偏序的(偏序關系由事務沖突定義),它們之間如何統一?

RSM的Checkpoint和Transaction Checkpoint的統一?RSM的Recovery和Transaction Recovery的關系?寫兩條日志的系統(journal和binlog)兩條日志之間的關系是什么?

責任編輯:武曉燕 來源: 知乎
相關推薦

2022-11-07 09:02:13

Python編程位置

2010-05-19 16:45:26

MySQL自動啟動

2021-08-31 10:52:30

容量背包物品

2021-06-04 10:11:07

鴻蒙安卓操作系統

2010-07-08 14:53:38

SQLServer實現

2009-07-27 13:46:27

網絡參數切換

2010-06-04 09:58:03

MySQL數據庫備份

2010-06-09 11:32:51

MySQL數據庫備份

2010-06-10 13:19:15

2023-09-11 08:30:30

Creator工廠方法

2010-09-13 13:03:49

2021-08-13 07:56:13

Python虛擬環境

2010-05-07 15:23:52

Oracle系統性能

2010-06-12 10:10:55

2022-10-26 07:26:38

2011-04-26 09:22:05

SQLite

2010-10-09 16:51:47

2019-09-24 21:00:59

SQL數據庫基礎數據庫

2011-05-06 16:02:54

打印機共享

2014-05-29 17:03:05

UnixLinux管理員
點贊
收藏

51CTO技術棧公眾號

777777国产7777777| 亚洲自拍偷拍视频| 亚洲图片综合网| 欧美少妇精品| 国产日韩高清在线| 成人免费观看网址| 天堂网视频在线| 精品视频亚洲| 欧美一区二区三区免费大片| 131美女爱做视频| porn亚洲| 国产精品66部| 国产mv久久久| 国产探花在线播放| 蜜臀久久99精品久久一区二区| 欧美日韩在线亚洲一区蜜芽| 国产成人一区二区三区别| 国产精品二区三区| 日本888xxxx| 视频在线观看入口黄最新永久免费国产| 不卡视频一二三四| 国产精品网站大全| 亚洲欧美在线视频免费| 国产韩日影视精品| 亚洲精品自拍视频| 美女又黄又免费的视频| 日本在线视频一区二区| 婷婷综合五月天| 第九区2中文字幕| av在线免费观看网站| gogo大胆日本视频一区| 成人中心免费视频| 一级久久久久久| 国产欧美日韩一级| 欧美激情视频一区二区| 小向美奈子av| 精品一区二区三区在线| 日韩精品免费视频| 99久久久无码国产精品性波多 | 俺要去色综合狠狠| 亚洲制服丝袜av| 亚洲砖区区免费| 国产资源在线观看| 久久综合九色综合久久久精品综合| 91九色蝌蚪成人| 国产精品高潮呻吟AV无码| 秋霞国产午夜精品免费视频| 78m国产成人精品视频| 九九久久免费视频| 欧美日本二区| 欧美激情综合亚洲一二区| 国产一区二区精彩视频| 国产精品久久久久久麻豆一区软件| 国产香蕉一区二区三区在线视频| 少妇毛片一区二区三区| 天海翼精品一区二区三区| 亚洲精品wwww| 欧美性xxxx图片| 亚洲国产国产| 亚洲色图色老头| 最新中文字幕av| 精品国产91久久久久久浪潮蜜月| 亚洲欧洲高清在线| 99久久久无码国产精品衣服| 精品国产精品国产偷麻豆| 亚洲色图五月天| 亚洲一区 欧美| 久久精品国产亚洲夜色av网站| 中文字幕日韩有码| 欧美激情久久久久久| 手机在线视频一区| 国产不卡精品在线| 日韩西西人体444www| 女同性αv亚洲女同志| 久久精品凹凸全集| 亚洲欧美日韩成人| 欧美性生给视频| 欧美在线高清| 91国内在线视频| 国产免费一级视频| 老色鬼精品视频在线观看播放| 国产日韩精品在线播放| www.国产欧美| 99免费精品视频| 日本高清一区| 国产女主播在线播放| 久草福利资源在线观看| 无码精品人妻一区二区| 成人毛片老司机大片| 国产精品视频免费观看| 日韩av免费观影| 亚洲国产精品精华液ab| 最新国产精品久久| 波多野在线观看| 91精品办公室少妇高潮对白| 啊啊啊国产视频| 亚洲不卡视频| 国产视频欧美视频| 精品国产国产综合精品| 亚洲国产婷婷| 国产精品视频永久免费播放 | 国产三级视频在线看| 国产精品久久久久一区二区三区| 69精品丰满人妻无码视频a片| 中文字幕在线视频久| 欧美精品v日韩精品v韩国精品v| 国产白袜脚足j棉袜在线观看| 欧美日韩一二三四| 欧美精品www| 亚洲视频在线观看免费视频| 成人性色生活片免费看爆迷你毛片| 亚洲尤物视频在线| 国产成人精品一区二区在线| 国产jzjzjz丝袜老师水多| 久久综合狠狠综合久久综合88| 在线综合视频网站| 免费成人直播| 亚洲大胆人体在线| 久久久久人妻一区精品色| 久久精品国产清高在天天线| 97人人澡人人爽| 香蕉视频国产在线观看| 欧美性猛交视频| 黑森林av导航| 在线成人直播| 国产欧美中文字幕| 久草在线免费福利资源| 五月激情综合网| 国产乱国产乱老熟300部视频| 欧美电影《轻佻寡妇》| 国产成人精品电影| 天堂中文在线资| 亚洲国产日韩一级| 三上悠亚 电影| 国产精品国产一区| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 日韩欧美中文字幕一区二区| 国产一区二区三区免费观看| 亚洲午夜久久久影院伊人| 久久久人成影片一区二区三区在哪下载 | 国产v亚洲v天堂无码久久久| 国产精品乱战久久久| 色综合久久88| 国产精品自产拍| 中文字幕一区视频| 天天干天天色天天干| 久久国产亚洲精品| 成人黄色av网| 国内精品久久久久国产| 欧美精品一级二级三级| 91麻豆制片厂| 久久福利资源站| 亚洲欧美丝袜| 国产精品一区免费在线| 久久伊人91精品综合网站| 91精品人妻一区二区三区果冻| 狼人综合视频| 亚洲精品视频自拍| 一级全黄裸体片| 黄色成人精品网站| 国产日韩一区二区| 国产精品25p| 亚洲嫩模很污视频| 国产情侣小视频| 国产精品欧美综合在线| 日本高清久久久| 欧美在线三区| 国产一区二区不卡视频在线观看| 两个人看的在线视频www| 日韩精品在线视频观看| 日本中文字幕在线观看视频| 中文字幕不卡在线观看| 一区二区久久精品| 黄页网站一区| 美女视频久久| 日韩专区视频| 久久久在线观看| 久久精品a一级国产免视看成人 | 国产精品极品在线观看| 91精品国产高清自在线| 国产区在线视频| 91精品婷婷国产综合久久竹菊| 久草视频免费在线播放| 99re这里都是精品| 五月婷婷丁香色| 国内一区二区三区| 欧美午夜精品久久久久免费视 | 精品视频在线看| 劲爆欧美第一页| 久久久久久一级片| 亚洲图片 自拍偷拍| 99精品国产福利在线观看免费| 欧洲在线视频一区| 香港久久久电影| 国产精品va在线播放我和闺蜜| 黄色在线观看网站| 日韩av一区二区在线| ,一级淫片a看免费| 舔着乳尖日韩一区| 911国产在线| 久久先锋影音av鲁色资源| 天堂av在线8| 国产精品综合色区在线观看| 中文字幕日韩一区二区三区| 精品精品国产毛片在线看| 国产有码在线一区二区视频| 欧美日韩国产观看视频| 九九热这里只有精品免费看| 亚洲最大免费| 色网在线观看| 国产一区二区三区日韩欧美| 亚洲高清视频在线播放| 欧美三级三级三级| 欧美三日本三级少妇99| 秋霞无码一区二区| 亚洲国产91视频| 久久久久日韩精品久久久男男| 黄色在线视频观看网站| 欧美sm极限捆绑bd| 夜夜狠狠擅视频| 狠狠久久五月精品中文字幕| 全程偷拍露脸中年夫妇| 中文子幕无线码一区tr| 最近中文字幕无免费| 国产精品综合在线视频| 日韩av片网站| 久久裸体视频| 欧美啪啪免费视频| 国模 一区 二区 三区| 91香蕉视频网址| 日韩精品dvd| 欧洲精品久久| 久草成人资源| 久久精品人成| 青青一区二区| 国产乱码精品一区二区三区卡| 91精品国产色综合久久不卡粉嫩| 国产精品久久久久久亚洲影视| 精精国产xxxx视频在线野外| 欧美精品18videosex性欧美| av网站大全在线| 久久影院免费观看| 黄色一级片在线观看| xxxx性欧美| 五月香视频在线观看| 中文字幕亚洲情99在线| 阿v免费在线观看| 亚洲欧美中文日韩v在线观看| 爽爽视频在线观看| 日韩大片免费观看视频播放| 免费观看黄一级视频| 亚洲国产精品热久久| 人妻视频一区二区三区| 亚洲国产欧美自拍| 亚洲三级中文字幕| 亚洲视频999| 国产专区在线播放| 色婷婷综合成人av| 黄色成年人视频在线观看| 久久国产精品电影| 免费男女羞羞的视频网站在线观看| 欧美激情在线观看| gay欧美网站| 国产精品久久久久秋霞鲁丝 | 久久365资源| 91国在线精品国内播放| 国产精品av一区二区三区| 国产91色在线播放| 国产在视频一区二区三区吞精| 国产专区精品视频| 日韩在线观看中文字幕| 国产精品免费在线| 天海翼亚洲一区二区三区| 日韩黄色影视| 中文字幕一区二区三区乱码图片| 欧美 亚洲 视频| 夜夜嗨网站十八久久| 亚洲中文字幕久久精品无码喷水| 免费不卡在线观看| 日本一二三区在线| 99久久婷婷国产| 91精品久久久久久久久久久久| 综合自拍亚洲综合图不卡区| 国产一级二级毛片| 欧美在线免费观看亚洲| 国产裸体永久免费无遮挡| 亚洲成人xxx| av资源网站在线观看| 欧美激情久久久| 91国内外精品自在线播放| 97se亚洲综合| 国产欧美日韩精品一区二区免费| 在线观看亚洲视频啊啊啊啊| 亚洲特色特黄| 亚洲 欧美 日韩系列| 国产99久久久久久免费看农村| 尤物视频最新网址| 亚洲精品久久久蜜桃| 国产伦精品一区二区三区视频我| 91精品国产一区二区三区蜜臀 | 亚洲欧洲在线观看| 黄色av电影在线播放| 91高清免费在线观看| 婷婷精品久久久久久久久久不卡| 国产日韩一区二区| 亚洲影视一区| 久久精品免费网站| 成人黄色777网| 少妇高潮在线观看| 日本高清不卡在线观看| 亚洲高清精品视频| xx视频.9999.com| 久九九久频精品短视频| 国产高清精品一区二区三区| 999国产精品视频| 日批视频在线免费看| 国产白丝精品91爽爽久久 | 亚洲综合免费观看高清在线观看| 亚洲天堂男人av| 亚洲第一视频在线观看| 国产三区在线观看| 国产精品入口福利| 九九久久婷婷| 久久久一本二本三本| 国产福利一区在线观看| 亚洲熟女少妇一区二区| 欧美 日韩 国产一区二区在线视频| 国产精品视频导航| 国产91精品对白在线播放| 精品人妻少妇一区二区| 国产经典欧美精品| 小嫩苞一区二区三区| 欧美色欧美亚洲另类二区| 可以免费看污视频的网站在线| 久久久视频精品| 亚洲日本va中文字幕| 大陆极品少妇内射aaaaaa| 国产麻豆视频精品| 一区二区三区影视| 3d动漫精品啪啪| 好吊日视频在线观看| 成人黄在线观看| 91综合在线| 老司机久久精品| 亚洲欧美在线另类| 国产精品久久久久久69| 日韩在线免费视频观看| 九七影院97影院理论片久久 | 国产日韩在线观看av| av资源久久| 天堂中文视频在线| 国产精品久久久久久亚洲毛片| 亚洲综合成人av| 永久555www成人免费| 日本中文字幕一区二区| 亚洲成人第一| 久草中文综合在线| 99久久99久久精品国产| 日韩一区二区三区电影在线观看 | 91精品1区| 久久成年人网站| 一片黄亚洲嫩模| 色婷婷av一区二区三区之红樱桃| 羞羞色国产精品| 国产va免费精品观看精品视频 | 丰满白嫩尤物一区二区| 国产亚洲精品久久久久久无几年桃| 亚洲成av人片在线观看香蕉| 蜜桃视频www网站在线观看| 欧美日韩综合精品| 久久99精品国产.久久久久| 亚洲二区在线播放| 亚洲国产精品嫩草影院久久| 国精产品一区一区三区四川| 性欧美18一19内谢| 成人性生交大片免费看中文网站| 国产免费av一区| www.日本久久久久com.| 亚洲精品一区二区三区在线| 亚洲 欧美 日韩 国产综合 在线 | 极品颜值美女露脸啪啪| 亚洲电影在线观看| 日韩经典一区| 男女裸体影院高潮| 久久久久88色偷偷免费| 国产精品国产三级国产普通话对白 | 国内精品久久久久久久影视麻豆 | 国产女主播喷水视频在线观看 | 黄色小说综合网站| 久久久无码一区二区三区| 亚洲欧美日韩精品久久| 亚洲伦理网站| 青青视频在线播放| 亚洲色图一区二区三区| 天天射天天色天天干| 国产日韩在线免费| 亚洲深夜影院| 一区二区国产精品精华液| 亚洲欧洲高清在线| 成人线上播放|