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

Storm入門教程 第五章 一致性事務

開發 前端
Storm是一個分布式的流處理系統,利用anchor和ack機制保證所有tuple都被成功處理。如果tuple出錯,則可以被重傳,但是如何 保證出錯的tuple只被處理一次呢?Storm提供了一套事務性組件Transaction Topology,用來解決這個問題。

Storm是一個分布式的流處理系統,利用anchor和ack機制保證所有tuple都被成功處理。如果tuple出錯,則可以被重傳,但是如何 保證出錯的tuple只被處理一次呢?Storm提供了一套事務性組件Transaction Topology,用來解決這個問題。

 Transactional Topology目前已經不再維護,由Trident來實現事務性topology,但是原理相同。

5.1一致性事務的設計

Storm如何實現即對tuple并行處理,又保證事務性。本節從簡單的事務性實現方法入手,逐步引出Transactional Topology的原理。

5.1.1 簡單設計一:強順序流

保證tuple只被處理一次,最簡單的方法就是將tuple流變成強順序的,并且每次只處理一個tuple。從1開始,給每個tuple都順序加上 一個id。在處理tuple的時候,將處理成功的tuple id和計算結果存在數據庫中。下一個tuple到來的時候,將其id與數據庫中的id做比較。如果相同,則說明這個tuple已經被成功處理過了,忽略 它;如果不同,根據強順序性,說明這個tuple沒有被處理過,將它的id及計算結果更新到數據庫中。

以統計消息總數為例。每來一個tuple,如果數據庫中存儲的id 與當前tuple id不同,則數據庫中的消息總數加1,同時更新數據庫中的當前tuple id值。如圖:

強順序流

         但是這種機制使得系統一次只能處理一個tuple,無法實現分布式計算。

5.1.2 簡單設計二:強順序batch流

為了實現分布式,我們可以每次處理一批tuple,稱為一個batch。一個batch中的tuple可以被并行處理。

我們要保證一個batch只被處理一次,機制和上一節類似。只不過數據庫中存儲的是batch id。batch的中間計算結果先存在局部變量中,當一個batch中的所有tuple都被處理完之后,判斷batch id,如果跟數據庫中的id不同,則將中間計算結果更新到數據庫中。

如何確保一個batch里面的所有tuple都被處理完了呢?可以利用Storm提供的CoordinateBolt。如圖:

順序batches

但是強順序batch流也有局限,每次只能處理一個batch,batch之間無法并行。要想實現真正的分布式事務處理,可以使用storm提供的Transactional Topology。在此之前,我們先詳細介紹一下CoordinateBolt的原理。

5.1.3 CoordinateBolt原理

CoordinateBolt具體原理如下:

  • 真正執行計算的bolt外面封裝了一個CoordinateBolt。真正執行任務的bolt我們稱為real bolt。
  • 每個CoordinateBolt記錄兩個值:有哪些task給我發送了tuple(根據topology的grouping信息);我要給哪些tuple發送信息(同樣根據groping信息)
  •  Real bolt發出一個tuple后,其外層的CoordinateBolt會記錄下這個tuple發送給哪個task了。
  • 等所有的tuple都發送完了之后,CoordinateBolt通過另外一個特殊的stream以emitDirect的方式告訴所有它發送過 tuple的task,它發送了多少tuple給這個task。下游task會將這個數字和自己已經接收到的tuple數量做對比,如果相等,則說明處理 完了所有的tuple。
  • 下游CoordinateBolt會重復上面的步驟,通知其下游。

整個過程如圖所示:

coordinateBolt

CoordinateBolt主要用于兩個場景:

  • DRPC
  • Transactional Topology

CoordinatedBolt對于業務是有侵入的,要使用CoordinatedBolt提供的功能,你必須要保證你的每個bolt發送的每個 tuple的***個field是request-id。 所謂的“我已經處理完我的上游”的意思是說當前這個bolt對于當前這個request-id所需要做的工作做完了。這個request-id在DRPC 里面代表一個DRPC請求;在Transactional Topology里面代表一個batch。

#p#

5.1.4 Trasactional Topology

Storm提供的Transactional Topology將batch計算分為process和commit兩個階段。Process階段可以同時處理多個batch,不用保證順序 性;commit階段保證batch的強順序性,并且一次只能處理一個batch,第1個batch成功提交之前,第2個batch不能被提交。

還是以統計消息總數為例,以下代碼來自storm-starter里面的TransactionalGlobalCount。

MemoryTransactionalSpout spout = new MemoryTransactionalSpout(DATA,new Fields(“word“), PARTITION_TAKE_PER_BATCH);

TransactionalTopologyBuilder builder = new TransactionalTopologyBuilder(“global-count“, “spout“, spout, 3);

builder.setBolt(“partial-count“, new BatchCount(), 5).noneGrouping(“spout“);

builder.setBolt(“sum“, new UpdateGlobalCount()).globalGrouping(“partial-count“);

TransactionalTopologyBuilder共接收四個參數。

  • 這個Transactional Topology的id。Id用來在Zookeeper中保存當前topology的進度,如果這個topology重啟,可以繼續之前的進度執行。
  •  Spout在這個topology中的id
  • 一個TransactionalSpout。一個Trasactional Topology中只能有一個TrasactionalSpout.在本例中是一個MemoryTransactionalSpout,從一個內存變量(DATA)中讀取數據。
  • TransactionalSpout的并行度(可選)。

下面是BatchCount的定義:

  1. public static class BatchCount extends BaseBatchBolt { 
  2.  
  3.         Object _id; 
  4.  
  5.         BatchOutputCollector _collector; 
  6.  
  7.         int _count = 0
  8.  
  9.         @Override 
  10.  
  11.         public void prepare(Map conf, TopologyContext context, 
  12.  
  13.               BatchOutputCollector collector, Object id) { 
  14.  
  15.             _collector = collector; 
  16.  
  17.             _id = id; 
  18.  
  19.         } 
  20.  
  21.         @Override 
  22.  
  23.         public void execute(Tuple tuple) { 
  24.  
  25.             _count++; 
  26.  
  27.         } 
  28.  
  29.         @Override 
  30.  
  31.         public void finishBatch() { 
  32.  
  33.             _collector.emit(new Values(_id, _count)); 
  34.  
  35.         } 
  36.  
  37.         @Override 
  38.  
  39.         public void declareOutputFields(OutputFieldsDeclarer declarer) { 
  40.  
  41.             declarer.declare(new Fields(“id“, “count“)); 
  42.  
  43.         } 
  44.  

 BatchCount的prepare方法的***一個參數是batch id,在Transactional Tolpoloyg里面這id是一個TransactionAttempt對象。

Transactional Topology里發送的tuple都必須以TransactionAttempt作為***個field,storm根據這個field來判斷tuple屬于哪一個batch。

TransactionAttempt包含兩個值:一個transaction id,一個attempt id。transaction id的作用就是我們上面介紹的對于每個batch中的tuple是唯一的,而且不管這個batch replay多少次都是一樣的。attempt id是對于每個batch唯一的一個id, 但是對于同一個batch,它replay之后的attempt id跟replay之前就不一樣了, 我們可以把attempt id理解成replay-times, storm利用這個id來區別一個batch發射的tuple的不同版本。

execute方法會為batch里面的每個tuple執行一次,你應該把這個batch里面的計算狀態保持在一個本地變量里面。對于這個例子來說, 它在execute方法里面遞增tuple的個數。

***, 當這個bolt接收到某個batch的所有的tuple之后, finishBatch方法會被調用。這個例子里面的BatchCount類會在這個時候發射它的局部數量到它的輸出流里面去。

#p#

下面是UpdateGlobalCount類的定義:

  1. public static class UpdateGlobalCount extends BaseTransactionalBolt 
  2.  
  3. implements ICommitter { 
  4.  
  5.         TransactionAttempt _attempt; 
  6.  
  7.         BatchOutputCollector _collector; 
  8.  
  9.         int _sum = 0
  10.  
  11.         @Override 
  12.  
  13.         public void prepare(Map conf, TopologyContext context, 
  14.  
  15. BatchOutputCollector collector, TransactionAttempt attempt) { 
  16.  
  17.             _collector = collector; 
  18.  
  19.             _attempt = attempt; 
  20.  
  21.         } 
  22.  
  23.         @Override 
  24.  
  25.         public void execute(Tuple tuple) { 
  26.  
  27.             _sum+=tuple.getInteger(1); 
  28.  
  29.         } 
  30.  
  31.         @Override 
  32.  
  33.         public void finishBatch() { 
  34.  
  35.             Value val = DATABASE.get(GLOBAL_COUNT_KEY); 
  36.  
  37.             Value newval; 
  38.  
  39.             if(val == null || !val.txid.equals(_attempt.getTransactionId())) { 
  40.  
  41.                 newval = new Value(); 
  42.  
  43.                 newval.txid = _attempt.getTransactionId(); 
  44.  
  45.                 if(val==null) { 
  46.  
  47.                     newval.count = _sum; 
  48.  
  49.                 } else { 
  50.  
  51.                     newval.count = _sum + val.count; 
  52.  
  53.                 } 
  54.  
  55.                 DATABASE.put(GLOBAL_COUNT_KEY, newval); 
  56.  
  57.             } else { 
  58.  
  59.                 newval = val; 
  60.  
  61.             } 
  62.  
  63.             _collector.emit(new Values(_attempt, newval.count)); 
  64.  
  65.         } 
  66.  
  67.         @Override 
  68.  
  69.         public void declareOutputFields(OutputFieldsDeclarer declarer) { 
  70.  
  71.             declarer.declare(new Fields(“id“, “sum“)); 
  72.  
  73.         } 
  74.  

UpdateGlobalCount實現了ICommitter接口,所以storm只會在commit階段執行finishBatch方法。而execute方法可以在任何階段完成。

在UpdateGlobalCount的finishBatch方法中,將當前的transaction id與數據庫中存儲的id做比較。如果相同,則忽略這個batch;如果不同,則把這個batch的計算結果加到總結果中,并更新數據庫。

Transactional Topolgy運行示意圖如下:

transactional topology

下面總結一下Transactional Topology的一些特性

  •  Transactional Topology將事務性機制都封裝好了,其內部使用CoordinateBolt來保證一個batch中的tuple被處理完。
  •  TransactionalSpout只能有一個,它將所有tuple分為一個一個的batch,而且保證同一個batch的transaction id始終一樣。
  •  BatchBolt處理batch在一起的tuples。對于每一個tuple調用execute方法,而在整個batch處理完成的時候調用finishBatch方法。
  •  如果BatchBolt被標記成Committer,則只能在commit階段調用finishBolt方法。一個batch的commit階 段由storm保證只在前一個batch成功提交之后才會執行。并且它會重試直到topology里面的所有bolt在commit完成提交。
  •  Transactional Topology隱藏了anchor/ack框架,它提供一個不同的機制來fail一個batch,從而使得這個batch被replay。

5.2 Trident介紹

Trident是Storm之上的高級抽象,提供了joins,grouping,aggregations,fuctions和filters等接口。如果你使用過Pig或Cascading,對這些接口就不會陌生。

Trident將stream中的tuples分成batches進行處理,API封裝了對這些batches的處理過程,保證tuple只被處理一次。處理batches中間結果存儲在TridentState對象中。

Trident事務性原理這里不詳細介紹,有興趣的讀者請自行查閱資料。

參考:http://xumingming.sinaapp.com/736/twitter-storm-transactional-topolgoy/

http://xumingming.sinaapp.com/811/twitter-storm-code-analysis-coordinated-bolt/

https://github.com/nathanmarz/storm/wiki/Trident-tutorial

原文鏈接:http://blog.linezing.com/2013/01/storm%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B-%E7%AC%AC%E4%BA%94%E7%AB%A0-%E4%B8

責任編輯:陳四芳 來源: blog.linezing.com
相關推薦

2013-12-12 16:37:45

Storm入門教程一致性事務

2014-01-13 11:22:28

storm

2013-08-29 14:12:52

Storm分布式實時計算

2014-01-16 11:14:37

StormTopology

2014-01-16 14:30:43

storm安裝部署

2013-08-29 14:28:09

StormHadoop

2022-08-29 08:38:00

事務一致性

2021-08-13 07:56:13

Raft算法日志

2022-08-11 07:55:05

數據庫Mysql

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2013-09-18 14:46:32

StormStorm集群

2013-12-12 16:14:21

storm入門教程storm消息處理

2019-09-18 08:41:53

并發扣減一致性redis

2021-03-04 06:49:53

RocketMQ事務

2014-01-16 15:48:49

storm

2023-12-01 13:51:21

數據一致性數據庫

2009-06-18 09:18:08

Oracle檢索數據數據一致性事務恢復

2022-12-14 08:23:30

2023-12-12 08:00:50

節點哈希算法
點贊
收藏

51CTO技術棧公眾號

国产日韩欧美电影在线观看| 在线电影av不卡网址| 国产真人做爰毛片视频直播 | 成人av三级| 国产欧美日韩不卡免费| 91在线观看欧美日韩| 国产精选第一页| 精品一区av| 精品免费日韩av| 一本久道中文无码字幕av| 久久综合网导航| 成人国产精品免费观看视频| 国产精品91视频| 日韩视频中文字幕在线观看| 亚州精品视频| 欧美一级午夜免费电影| 成人小视频在线看| 羞羞网站在线免费观看| 国产欧美日产一区| 国产精品一区视频网站| 亚洲天堂狠狠干| 国产一区91| 欧美激情啊啊啊| 国产美女福利视频| 久久99国产成人小视频| 精品久久人人做人人爽| 亚洲 国产 图片| 在线免费av资源| 亚洲午夜久久久久中文字幕久| 亚洲激情啪啪| 欧美女子与性| 91亚洲精品久久久蜜桃网站| 91精品国产91久久久久青草| 欧美性受xxx黑人xyx性爽| 99av国产精品欲麻豆| 欧美乱大交xxxxx另类电影| 日本美女黄色一级片| 久久不见久久见免费视频7| 精品久久久三级丝袜| 国产乱叫456| 青娱乐极品盛宴一区二区| 欧洲视频一区二区| 无遮挡又爽又刺激的视频| 爱啪啪综合导航| 亚洲自拍欧美精品| 青青草影院在线观看| 欧美激情午夜| 国产精品高潮呻吟久久| 亚洲精品永久www嫩草| 成人综合影院| 中文字幕精品综合| 亚洲不卡1区| 欧美理论在线观看| 久久久久免费观看| 欧日韩一区二区三区| 噜噜噜在线观看播放视频| 91日韩精品一区| 日本高清不卡三区| 国产三级在线免费观看| 国产午夜亚洲精品不卡| 鲁片一区二区三区| 久久天堂电影| 欧美激情一区二区三区四区 | 欧美黄色一区| 欧美激情精品久久久| 麻豆成人在线视频| 黄色精品网站| 欧美在线一区二区三区四| 天堂а√在线中文在线新版| 久久久一二三| 成人h视频在线观看播放| 国产又粗又猛又爽又黄视频| 国产乱码字幕精品高清av| 91嫩草免费看| 日韩大胆人体| 国产精品久久久久久久久搜平片 | 日本免费高清一区| 亚洲成人三级| 一区二区欧美视频| 91九色在线观看视频| 成人免费看视频网站| 欧美中文字幕久久| 亚洲国产综合av| 露出调教综合另类| 在线观看久久久久久| 91视频青青草| 亚洲欧洲一级| 国产乱人伦真实精品视频| 国产精品玖玖玖| 99久久精品免费看国产免费软件| 欧美日韩一区二区视频在线观看| 川上优的av在线一区二区| 一区二区三区在线视频观看58| 欧美 日本 亚洲| 亚洲精品自拍| 日韩电影中文 亚洲精品乱码| 国产精品无码无卡无需播放器| 伊人情人综合网| 国产成人久久久| 国产福利第一页| 久久免费午夜影院| 日本丰满大乳奶| 91精品xxx在线观看| 欧美日韩成人在线一区| 秘密基地免费观看完整版中文| heyzo久久| 午夜精品久久久久久久男人的天堂 | 色噜噜狠狠狠综合欧洲色8| 欧美午夜电影在线| 麻豆网站免费观看| 成人综合专区| 欧美一级高清免费播放| av免费观看网址| 欧美国产成人精品| 1024av视频| 日韩激情综合| 日韩在线观看免费全| 永久免费无码av网站在线观看| 国产福利一区二区| 亚洲欧洲日夜超级视频| www.com.cn成人| 欧美精品一区二区三区一线天视频| 日本 欧美 国产| 视频一区国产视频| 狠狠色伊人亚洲综合网站色| 国产一二区在线| 欧美日韩在线观看一区二区 | 亚洲色图 在线视频| 开心激情综合| 欧美激情一区二区久久久| 一区二区三区精彩视频| 久久五月婷婷丁香社区| 国产xxxx振车| 伊色综合久久之综合久久| 久久精品国产96久久久香蕉| 一级一级黄色片| 久久久不卡网国产精品一区| 无码人妻精品一区二区三区在线 | 九九**精品视频免费播放| 欧美日韩一区二区三区在线视频 | 久久99国产精品成人| 日本高清视频一区二区三区| 国产夫妻在线播放| 欧美精品一区二区三区蜜桃视频| 久草免费在线视频观看| 国产精品一品二品| 日韩激情视频一区二区| 在线一区二区三区视频| 欧美成人午夜激情| 国产不卡av在线播放| 亚洲精品国产成人久久av盗摄 | 国产视频一区二| 久久精品视频免费播放| 97精品人妻一区二区三区在线| 国产拍欧美日韩视频二区| 日本激情视频在线| 成人情趣视频网站| 成人国产精品av| 二区三区四区高清视频在线观看| 欧美高清视频不卡网| 中国毛片直接看| 国产精品一区二区你懂的| 精品一区二区成人免费视频| 日韩高清一区| 2018日韩中文字幕| 免费在线黄色网址| 欧美羞羞免费网站| www.com.av| 粉嫩嫩av羞羞动漫久久久 | 欧美爱爱小视频| 成人黄色小视频在线观看| 日日碰狠狠添天天爽超碰97| 国产精品一区2区3区| 成人黄色在线观看| 国产第一页在线视频| 国产丝袜一区二区三区| 中文字幕在线观看高清| 亚洲理论在线观看| 亚洲av成人片无码| 老牛嫩草一区二区三区日本| 正在播放91九色| 国产精品色在线网站| 日本精品视频在线| 成人av福利| 日韩精品免费在线| 一本色道久久综合熟妇| 亚洲一区二区精品视频| 人妻一区二区视频| 国产一区二区三区国产| 久久综合色视频| 久久久久久久久99精品大| 国内精品视频免费| 国产欧美自拍| 午夜精品福利在线观看| 思思99re6国产在线播放| 亚洲精品一区在线观看| 中文字幕一区2区3区| 亚洲午夜在线视频| 妺妺窝人体色WWW精品| 国产成人精品亚洲日本在线桃色 | 福利视频网站一区二区三区| 久久精品免费网站| 亚洲精品影院在线观看| 中日韩在线视频| 日韩精品丝袜美腿| 成人性教育视频在线观看| 午夜影院在线播放| 欧美国产精品日韩| 国产高清免费在线播放| 亚洲第一色在线| 国产精品视频一二区| 福利一区福利二区微拍刺激| 久久久久亚洲av片无码| 久久噜噜亚洲综合| 又黄又爽的网站| 国产精品一区二区在线看| 欧美婷婷精品激情| 久久九九精品| 男人日女人视频网站| 欧美一区二区三区久久精品| 亚洲国产另类久久久精品极度| 日韩在线影视| 岛国视频一区| 蜜桃精品一区二区三区| 91精品国产一区二区| 欧美丰满美乳xxx高潮www| 亚洲av无码一区二区三区网址| 激情另类小说区图片区视频区| 欧洲av无码放荡人妇网站| 亚洲天堂偷拍| 男人日女人的bb| 婷婷另类小说| 亚洲欧洲日夜超级视频| 欧美午夜精品一区二区三区电影| 久久精品二区| 四虎884aa成人精品最新| 国产精选在线观看91| 亚洲网址在线观看| 2022国产精品| 91精品国产自产精品男人的天堂| 成人久久精品视频| 亚洲伦理一区二区| 91网站免费观看| 精品国产亚洲一区二区三区大结局| 国产在线观看91精品一区| 国产精品伊人| 国产在线精品播放| 亚洲欧洲一二区| 亚洲va欧美va在线观看| 日韩精品视频中文字幕| 亚洲影视中文字幕| jizz久久精品永久免费| 国产伦精品一区二区三区视频免费 | 亚洲天堂男人| 亚洲熟妇国产熟妇肥婆| 亚洲一区二区动漫| 黄色一级大片在线观看| 日韩1区2区3区| 尤物国产在线观看| 国产乱子轮精品视频| av电影中文字幕| av午夜一区麻豆| 国产中年熟女高潮大集合| 日本一区二区三区四区| 开心激情五月网| 亚洲国产日韩av| 在线观看国产亚洲| 91国偷自产一区二区开放时间 | 国产精品无码久久久久| 91在线免费观看网站| 超碰成人在线免费| 蜜桃av色综合| 99精品视频在线观看免费播放 | 视频一区欧美精品| 国产色视频在线播放| 国产999精品久久| 国产精品九九九九九| 国产精品久久久久久久久久久免费看| 国精品无码一区二区三区| 亚洲国产精品一区二区尤物区| 中日韩精品视频在线观看| 欧美熟乱第一页| 亚洲精品一区二区三区区别| 亚洲女成人图区| 97影院秋霞午夜在线观看| 97在线看福利| 日韩久久一区| 九色91在线视频| 亚洲国产一区二区三区在线播放| 久久国产精品视频在线观看| 老司机免费视频一区二区三区| 一级黄色电影片| www国产成人免费观看视频 深夜成人网| 国产精品久久久久久久av| 亚洲一区中文日韩| 中文在线免费观看| 亚洲国产精品福利| 麻豆网站在线看| 青青草原成人在线视频| 日韩精品视频在线看| 天天综合狠狠精品| 亚洲二区精品| 亚洲天堂av一区二区三区| 26uuu亚洲婷婷狠狠天堂| 可以直接看的黄色网址| 欧美在线综合视频| 亚洲色图欧美视频| 美女999久久久精品视频| 日韩一区二区三区在线免费观看| 成人免费视频网站入口| 日韩成人精品一区| 成人免费aaa| 国产超碰在线一区| 黄色精品视频在线观看| 91福利小视频| 亚洲av电影一区| 久久免费高清视频| 国产中文欧美日韩在线| 亚洲高清视频一区二区| 亚洲综合99| 男女性杂交内射妇女bbwxz| 亚洲素人一区二区| 中文字幕理论片| 亚洲天堂影视av| 国产免费不卡| 精品日韩美女| 一本不卡影院| 国产a级片视频| 亚洲一区在线视频| 午夜久久久久久久久久| 久久久精品影院| 亚洲综合资源| 在线综合视频网站| 韩国成人精品a∨在线观看| 美国一级黄色录像| 欧美视频在线播放| 91xxx在线观看| 国产欧美亚洲精品| 91亚洲国产成人久久精品| 艹b视频在线观看| 亚洲欧洲另类国产综合| 国产精品久久免费| 久久夜色撩人精品| 麻豆国产一区二区三区四区| 午夜啪啪福利视频| 国产成人综合网站| 久久久久久久久久久久久久免费看| 日韩天堂在线观看| 欧美性爽视频| 精品国产aⅴ麻豆| 中日韩视频在线观看| 蜜桃精品成人影片| 在线看国产日韩| 日本激情在线观看| 51成人做爰www免费看网站| 欧美日韩午夜| xxxx黄色片| 色综合视频一区二区三区高清| 国产小视频在线播放| 国产精品美女久久| 五月开心六月丁香综合色啪| 国产伦精品一区二区三区妓女下载| 一区二区三区高清| 天堂成人在线| 国产精品亚洲综合天堂夜夜| 亚洲不卡av不卡一区二区| 无套白嫩进入乌克兰美女| 亚洲午夜精品久久久久久久久| 亚洲色图欧美视频| 国产精品丝袜高跟| 午夜精彩国产免费不卡不顿大片| 影音先锋黄色资源| 91极品视觉盛宴| 看黄网站在线观看| 国内外成人免费视频| 日韩国产高清影视| www.超碰在线观看| 亚洲精品wwww| 亚洲成人a级片| 成人午夜视频在线观看免费| 久久久精品黄色| 99久久精品国产一区二区成人| 午夜精品理论片| 水蜜桃久久夜色精品一区| 涩视频在线观看| 欧美亚洲国产bt| 国产丝袜在线播放| 亚洲国产另类久久久精品极度| 国产成人无遮挡在线视频| 波多野结衣黄色| 久久久久久噜噜噜久久久精品| 国产91精品对白在线播放| 久久精品一二三四| 色综合久久久网| 天堂av中文在线| 天堂va久久久噜噜噜久久va| 成人免费视频caoporn| 中文字幕视频一区二区| 韩日欧美一区二区| 综合亚洲视频|