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

消息冪等(去重)通用解決方案,寫得真好!

開發(fā) 后端
消息中間件是分布式系統(tǒng)常用的組件,無論是異步化、解耦、削峰等都有廣泛的應(yīng)用價值。

[[415420]]

消息中間件是分布式系統(tǒng)常用的組件,無論是異步化、解耦、削峰等都有廣泛的應(yīng)用價值。我們通常會認為,消息中間件是一個可靠的組件——這里所謂的可靠是指,只要我把消息成功投遞到了消息中間件,消息就不會丟失,即消息肯定會至少保證消息能被消費者成功消費一次,這是消息中間件最基本的特性之一,也就是我們常說的“AT LEAST ONCE”,即消息至少會被“成功消費一遍”。

舉個例子,一個消息M發(fā)送到了消息中間件,消息投遞到了消費程序A,A接受到了消息,然后進行消費,但在消費到一半的時候程序重啟了,這時候這個消息并沒有標記為消費成功,這個消息還會繼續(xù)投遞給這個消費者,直到其消費成功了,消息中間件才會停止投遞。

然而這種可靠的特性導(dǎo)致,消息可能被多次地投遞。舉個例子,還是剛剛這個例子,程序A接受到這個消息M并完成消費邏輯之后,正想通知消息中間件“我已經(jīng)消費成功了”的時候,程序就重啟了,那么對于消息中間件來說,這個消息并沒有成功消費過,所以他還會繼續(xù)投遞。這時候?qū)τ趹?yīng)用程序A來說,看起來就是這個消息明明消費成功了,但是消息中間件還在重復(fù)投遞。

這在RockectMQ的場景來看,就是同一個messageId的消息重復(fù)投遞下來了。

基于消息的投遞可靠(消息不丟)是優(yōu)先級更高的,所以消息不重的任務(wù)就會轉(zhuǎn)移到應(yīng)用程序自我實現(xiàn),這也是為什么RocketMQ的文檔里強調(diào)的,消費邏輯需要自我實現(xiàn)冪等。背后的邏輯其實就是:不丟和不重是矛盾的(在分布式場景下),但消息重復(fù)是有解決方案的,而消息丟失是很麻煩的。

簡單的消息去重解決方案

例如:假設(shè)我們業(yè)務(wù)的消息消費邏輯是:插入某張訂單表的數(shù)據(jù),然后更新庫存: 

  1. insert into t_order values .....   
  2. update t_inv set countcount = count-1 where good_id = 'good123'

要實現(xiàn)消息的冪等,我們可能會采取這樣的方案: 

  1. select * from t_order where order_no = 'order123'   
  2. if(order  != null) {       
  3.  return ;//消息重復(fù),直接返回   

這對于很多情況下,的確能起到不錯的效果,但是在并發(fā)場景下,還是會有問題。

并發(fā)重復(fù)消息

假設(shè)這個消費的所有代碼加起來需要1秒,有重復(fù)的消息在這1秒內(nèi)(假設(shè)100毫秒)內(nèi)到達(例如生產(chǎn)者快速重發(fā),Broker重啟等),那么很可能,上面去重代碼里面會發(fā)現(xiàn),數(shù)據(jù)依然是空的(因為上一條消息還沒消費完,還沒成功更新訂單狀態(tài)),

那么就會穿透掉檢查的擋板,最后導(dǎo)致重復(fù)的消息消費邏輯進入到非冪等安全的業(yè)務(wù)代碼中,從而引發(fā)重復(fù)消費的問題(如主鍵沖突拋出異常、庫存被重復(fù)扣減而沒釋放等)

并發(fā)去重的解決方案之一

要解決上面并發(fā)場景下的消息冪等問題,一個可取的方案是開啟事務(wù)把select 改成 select for update語句,把記錄進行鎖定。 

  1. select * from t_order where order_no = 'THIS_ORDER_NO' for update  //開啟事務(wù) if(order.status != null) {      
  2.  return ;//消息重復(fù),直接返回   

但這樣消費的邏輯會因為引入了事務(wù)包裹而導(dǎo)致整個消息消費可能變長,并發(fā)度下降。

當然還有其他更高級的解決方案,例如更新訂單狀態(tài)采取樂觀鎖,更新失敗則消息重新消費之類的。但這需要針對具體業(yè)務(wù)場景做更復(fù)雜和細致的代碼開發(fā)、庫表設(shè)計,不在本文討論的范圍。

但無論是select for update, 還是樂觀鎖這種解決方案,實際上都是基于業(yè)務(wù)表本身做去重,這無疑增加了業(yè)務(wù)開發(fā)的復(fù)雜度, 一個業(yè)務(wù)系統(tǒng)里面很大部分的請求處理都是依賴MQ的,如果每個消費邏輯本身都需要基于業(yè)務(wù)本身而做去重/冪等的開發(fā)的話,這是繁瑣的工作量。本文希望探索出一個通用的消息冪等處理的方法,從而抽象出一定的工具類用以適用各個業(yè)務(wù)場景。

Exactly Once

在消息中間件里,有一個投遞語義的概念,而這個語義里有一個叫”Exactly Once”,即消息肯定會被成功消費,并且只會被消費一次。以下是阿里云里對Exactly Once的解釋:

Exactly-Once 是指發(fā)送到消息系統(tǒng)的消息只能被消費端處理且僅處理一次,即使生產(chǎn)端重試消息發(fā)送導(dǎo)致某消息重復(fù)投遞,該消息在消費端也只被消費一次。

在我們業(yè)務(wù)消息冪等處理的領(lǐng)域內(nèi),可以認為業(yè)務(wù)消息的代碼肯定會被執(zhí)行,并且只被執(zhí)行一次,那么我們可以認為是Exactly Once。

但這在分布式的場景下想找一個通用的方案幾乎是不可能的。不過如果是針對基于數(shù)據(jù)庫事務(wù)的消費邏輯,實際上是可行的。

基于關(guān)系數(shù)據(jù)庫事務(wù)插入消息表

假設(shè)我們業(yè)務(wù)的消息消費邏輯是:更新MySQL數(shù)據(jù)庫的某張訂單表的狀態(tài): 

  1. update t_order set status = 'SUCCESS' where order_no'order123'

要實現(xiàn)Exaclty Once即這個消息只被消費一次(并且肯定要保證能消費一次),我們可以這樣做:在這個數(shù)據(jù)庫中增加一個消息消費記錄表,把消息插入到這個表,并且把原來的訂單更新和這個插入的動作放到同一個事務(wù)中一起提交,就能保證消息只會被消費一遍了。

  1.  開啟事務(wù)
  2.  插入消息表(處理好主鍵沖突的問題)
  3.  更新訂單表(原消費邏輯)
  4.  提交事務(wù)

說明:

    1. 這時候如果消息消費成功并且事務(wù)提交了,那么消息表就插入成功了,這時候就算RocketMQ還沒有收到消費位點的更新再次投遞,也會插入消息失敗而視為已經(jīng)消費過,后續(xù)就直接更新消費位點了。這保證我們消費代碼只會執(zhí)行一次。

    2. 如果事務(wù)提交之前服務(wù)掛了(例如重啟),對于本地事務(wù)并沒有執(zhí)行所以訂單沒有更新,消息表也沒插入成功;而對于RocketMQ服務(wù)端來說,消費位點也沒更新,所以消息還會繼續(xù)投遞下來,投遞下來發(fā)現(xiàn)這個消息插入消息表也是成功的,所以可以繼續(xù)消費。這保證了消息不丟失。

事實上,阿里云ONS的EXACTLY-ONCE語義的實現(xiàn)上,就是類似這個方案基于數(shù)據(jù)庫的事務(wù)特性實現(xiàn)的。

基于這種方式,的確這是有能力拓展到不同的應(yīng)用場景,因為他的實現(xiàn)方案與具體業(yè)務(wù)本身無關(guān)——而是依賴一個消息表。

但是這里有它的局限性

  1.  消息的消費邏輯必須是依賴于關(guān)系型數(shù)據(jù)庫事務(wù)。如果消費的消費過程中還涉及其他數(shù)據(jù)的修改,例如Redis這種不支持事務(wù)特性的數(shù)據(jù)源,則這些數(shù)據(jù)是不可回滾的。
  2.  數(shù)據(jù)庫的數(shù)據(jù)必須是在一個庫,跨庫無法解決

注:業(yè)務(wù)上,消息表的設(shè)計不應(yīng)該以消息ID作為標識,而應(yīng)該以業(yè)務(wù)的業(yè)務(wù)主鍵作為標識更為合理,以應(yīng)對生產(chǎn)者的重發(fā)。阿里云上的消息去重只是RocketMQ的messageId,在生產(chǎn)者因為某些原因手動重發(fā)(例如上游針對一個交易重復(fù)請求了)的場景下起不到去重/冪等的效果(因消息id不同)。

更復(fù)雜的業(yè)務(wù)場景

如上所述,這種方式Exactly Once語義的實現(xiàn),實際上有很多局限性,這種局限性使得這個方案基本不具備廣泛應(yīng)用的價值。并且由于基于事務(wù),可能導(dǎo)致鎖表時間過長等性能問題。

例如我們以一個比較常見的一個訂單申請的消息來舉例,可能有以下幾步(以下統(tǒng)稱為步驟X):

  1.  檢查庫存(RPC)
  2.  鎖庫存(RPC)
  3.  開啟事務(wù),插入訂單表(MySQL)
  4.  調(diào)用某些其他下游服務(wù)(RPC)
  5.  更新訂單狀態(tài)
  6.  commit 事務(wù)(MySQL)

這種情況下,我們?nèi)绻扇∠⒈?本地事務(wù)的實現(xiàn)方式,消息消費過程中很多子過程是不支持回滾的,也就是說就算我們加了事務(wù),實際上這背后的操作并不是原子性的。怎么說呢,就是說有可能第一條小在經(jīng)歷了第二步鎖庫存的時候,服務(wù)重啟了,這時候?qū)嶋H上庫存是已經(jīng)在另外的服務(wù)里被鎖定了,這并不能被回滾。當然消息還會再次投遞下來,要保證消息能至少消費一遍,換句話說,鎖庫存的這個RPC接口本身依舊要支持“冪等”。

再者,如果在這個比較耗時的長鏈條場景下加入事務(wù)的包裹,將大大的降低系統(tǒng)的并發(fā)。所以通常情況下,我們處理這種場景的消息去重的方法還是會使用一開始說的業(yè)務(wù)自己實現(xiàn)去重邏輯的方式,如前面加select for update,或者使用樂觀鎖。

那我們有沒有方法抽取出一個公共的解決方案,能兼顧去重、通用、高性能呢?Java 核心技術(shù)教程和示例源碼:https://github.com/javastacks/javastack

拆解消息執(zhí)行過程

其中一個思路是把上面的幾步,拆解成幾個不同的子消息,例如:

  1.  庫存系統(tǒng)消費A:檢查庫存并做鎖庫存,發(fā)送消息B給訂單服務(wù)
  2.  訂單系統(tǒng)消費消息B:插入訂單表(MySQL),發(fā)送消息C給自己(下游系統(tǒng))消費
  3.  下游系統(tǒng)消費消息C:處理部分邏輯,發(fā)送消息D給訂單系統(tǒng)
  4.  訂單系統(tǒng)消費消息D:更新訂單狀態(tài)

注:上述步驟需要保證本地事務(wù)和消息是一個事務(wù)的(至少是最終一致性的),這其中涉及到分布式事務(wù)消息相關(guān)的話題,不在本文論述。

可以看到這樣的處理方法會使得每一步的操作都比較原子,而原子則意味著是小事務(wù),小事務(wù)則意味著使用消息表+事務(wù)的方案顯得可行。

分享給你:Spring Boot 學習筆記,這個太全了!

然而,這太復(fù)雜了!這把一個本來連續(xù)的代碼邏輯割裂成多個系統(tǒng)多次消息交互!那還不如業(yè)務(wù)代碼層面上加鎖實現(xiàn)呢。另外,多線程系列面試題和答案全部整理好了,微信搜索Java技術(shù)棧,在后臺發(fā)送:面試,可以在線閱讀。

更通用的解決方案

上面消息表+本地事務(wù)的方案之所以有其局限性和并發(fā)的短板,究其根本是因為它依賴于關(guān)系型數(shù)據(jù)庫的事務(wù),且必須要把事務(wù)包裹于整個消息消費的環(huán)節(jié)。

如果我們能不依賴事務(wù)而實現(xiàn)消息的去重,那么方案就能推廣到更復(fù)雜的場景例如:RPC、跨庫等。

例如,我們依舊使用消息表,但是不依賴事務(wù),而是針對消息表增加消費狀態(tài),是否可以解決問題呢?

基于消息冪等表的非事務(wù)方案

以上是去事務(wù)化后的消息冪等方案的流程,可以看到,此方案是無事務(wù)的,而是針對消息表本身做了狀態(tài)的區(qū)分:消費中、消費完成。只有消費完成的消息才會被冪等處理掉。

而對于已有消費中的消息,后面重復(fù)的消息會觸發(fā)延遲消費(在RocketMQ的場景下即發(fā)送到RETRY TOPIC),之所以觸發(fā)延遲消費是為了控制并發(fā)場景下,第二條消息在第一條消息沒完成的過程中,去控制消息不丟(如果直接冪等,那么會丟失消息(同一個消息id的話),因為上一條消息如果沒有消費完成的時候,第二條消息你已經(jīng)告訴broker成功了,那么第一條消息這時候失敗broker也不會重新投遞了)

上面的流程不再細說,后文有g(shù)ithub源碼的地址,讀者可以參考源碼的實現(xiàn),這里我們回頭看看我們一開始想解決的問題是否解決了:

  1.  消息已經(jīng)消費成功了,第二條消息將被直接冪等處理掉(消費成功)。
  2.  并發(fā)場景下的消息,依舊能滿足不會出現(xiàn)消息重復(fù),即穿透冪等擋板的問題。
  3.  支持上游業(yè)務(wù)生產(chǎn)者重發(fā)的業(yè)務(wù)重復(fù)的消息冪等問題。

關(guān)于第一個問題已經(jīng)很明顯已經(jīng)解決了,在此就不討論了。

關(guān)于第二個問題是如何解決的?主要是依靠插入消息表的這個動作做控制的,假設(shè)我們用MySQL作為消息表的存儲媒介(設(shè)置消息的唯一ID為主鍵),那么插入的動作只有一條消息會成功,后面的消息插入會由于主鍵沖突而失敗,走向延遲消費的分支,然后后面延遲消費的時候就會變成上面第一個場景的問題。

關(guān)于第三個問題,只要我們設(shè)計去重的消息鍵讓其支持業(yè)務(wù)的主鍵(例如訂單號、請求流水號等),而不僅僅是messageId即可。所以也不是問題。另外,MySQL 系列面試題和答案全部整理好了,微信搜索Java技術(shù)棧,在后臺發(fā)送:面試,可以在線閱讀。

此方案是否有消息丟失的風險?

如果細心的讀者可能會發(fā)現(xiàn)這里實際上是有邏輯漏洞的,問題出在上面聊到的個三問題中的第2個問題(并發(fā)場景),在并發(fā)場景下我們依賴于消息狀態(tài)是做并發(fā)控制使得第2條消息重復(fù)的消息會不斷延遲消費(重試)。但如果這時候第1條消息也由于一些異常原因(例如機器重啟了、外部異常導(dǎo)致消費失敗)沒有成功消費成功呢?也就是說這時候延遲消費實際上每次下來看到的都是消費中的狀態(tài),最后消費就會被視為消費失敗而被投遞到死信Topic中(RocketMQ默認可以重復(fù)消費16次)。

有這種顧慮是正確的!對于此,我們解決的方法是,插入的消息表必須要帶一個最長消費過期時間,例如10分鐘,意思是如果一個消息處于消費中超過10分鐘,就需要從消息表中刪除(需要程序自行實現(xiàn))。所以最后這個消息的流程會是這樣的:

更靈活的消息表存儲媒介

我們這個方案實際上沒有事務(wù)的,只需要一個存儲的中心媒介,那么自然我們可以選擇更靈活的存儲媒介,例如Redis。另外,Redis 系列面試題和答案全部整理好了,微信搜索Java技術(shù)棧,在后臺發(fā)送:面試,可以在線閱讀。

使用Redis有兩個好處:

  1.  性能上損耗更低
  2. 上面我們講到的超時時間可以直接利用Redis本身的ttl實現(xiàn)

當然Redis存儲的數(shù)據(jù)可靠性、一致性等方面是不如MySQL的,需要用戶自己取舍。 

 

責任編輯:龐桂玉 來源: Java技術(shù)棧
相關(guān)推薦

2022-02-18 09:20:43

消息中間件分布式MQ 冪等

2025-06-05 00:00:00

向量數(shù)據(jù)庫線程安全Redis

2025-04-24 11:09:13

2017-04-03 21:23:44

消息總線冪等性消息

2020-10-18 07:25:55

MQ消息冪等架構(gòu)

2025-04-29 04:00:00

分布式事務(wù)事務(wù)消息

2014-03-25 10:57:42

Android消息推送方案

2025-11-17 02:00:00

2023-10-30 08:00:00

區(qū)塊鏈去中心化

2021-12-03 16:53:22

移動云等保2.0

2012-01-12 10:18:04

2021-04-29 17:58:21

戴爾

2024-11-01 09:28:02

2021-06-25 10:35:58

分布式代碼Java

2023-05-19 13:58:12

2012-05-27 16:21:31

IDC華為

2018-12-03 12:17:27

Semptian解決方案

2018-12-03 12:26:30

YADRO解決方案

2018-12-03 12:13:21

Mellanox解決方案

2018-12-03 11:59:42

Inventec解決方案
點贊
收藏

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

草草草视频在线观看| 91色在线视频| 国产一区二区三区四区在线| 亚洲精品555| 欧美三级视频| 日韩电视剧在线观看免费网站| 国产xxxxx在线观看| 婷婷激情在线| 久久国产欧美| 久久久999精品| 老熟妇精品一区二区三区| 欧亚一区二区| 亚洲一区二区3| 91日本在线观看| 六月丁香婷婷综合| 91精品国产成人观看| 亚洲国产欧美久久| 五月六月丁香婷婷| 男人最爱成人网| 亚洲精选视频在线| 日韩成人在线资源| 日韩一区二区三区不卡| 六月丁香婷婷久久| 456亚洲影院| 黄色一级免费视频| 欧美电影《睫毛膏》| 亚洲另类激情图| aaa黄色大片| 在线视频成人| 欧美午夜精品电影| 色一情一区二区三区四区 | 成人妇女免费播放久久久| 日本熟妇乱子伦xxxx| 永久亚洲成a人片777777| 国产香蕉一区二区三区在线视频| 欧美日韩二三区| 国产剧情在线| 国产黄色91视频| 欧美放荡办公室videos4k| 波多野在线播放| 日韩欧美影院| 日韩av在线网页| www.美色吧.com| 视频一区视频二区欧美| 69久久99精品久久久久婷婷| 正在播放亚洲| 99视频在线观看地址| 久久久三级国产网站| 国严精品久久久久久亚洲影视| 精品国产av一区二区三区| 久久成人羞羞网站| 国产一区二中文字幕在线看| 一区二区视频网| 免费成人美女在线观看| 国产精品视频专区| 国产91av在线播放| 秋霞国产午夜精品免费视频| 国产97在线亚洲| 中文在线第一页| 另类国产ts人妖高潮视频| 欧美主播福利视频| 波多野结衣mp4| 日韩高清不卡一区二区| 国产精品成人观看视频国产奇米| 成人毛片一区二区三区| 秋霞电影一区二区| 成人午夜小视频| 国产成人av免费看| 成人在线视频首页| 久久亚洲高清| av福利精品| 亚洲日本乱码在线观看| 肉大捧一出免费观看网站在线播放 | 国产高清久久久久| 高清不卡一区二区三区| 色综合视频在线| 久久五月婷婷丁香社区| 午夜精品电影在线观看| 免费av网站在线观看| 亚洲图片激情小说| av在线观看地址| 日韩视频网站在线观看| 欧美日韩国产综合久久 | 亚洲黑丝一区二区| 国产99久久精品一区二区 夜夜躁日日躁 | 91精品国产综合久久男男| aaa一区二区| 91视频一区二区三区| 青青草原亚洲| 黄色av网址在线| 99久久er热在这里只有精品66| 欧美一级片免费观看| 精品美女在线观看视频在线观看| 一个色妞综合视频在线观看| 男人日女人bb视频| 99久热在线精品视频观看| 日韩av中文字幕在线| 99在线视频免费| 韩日视频一区| 国产精品视频导航| 色屁屁草草影院ccyycom| 欧美韩国日本综合| 热99这里只有精品| 国产高清日韩| 亚洲天堂网站在线观看视频| 国产色无码精品视频国产| 亚洲乱码视频| 92裸体在线视频网站| 色综合888| 亚洲自拍偷拍综合| jizz欧美性11| 五月国产精品| 欧美激情一区二区三区久久久 | 激情国产在线| 欧美一级国产精品| 夫妇露脸对白88av| 亚洲伊人观看| 国产精品久久久久免费| 日本在线免费网| 日韩欧美精品中文字幕| 亚洲乱妇老熟女爽到高潮的片| 九九在线精品| 亚洲 日韩 国产第一| 国产人妖一区二区| 国精产品一区一区三区mba视频 | 91精品国产自产在线老师啪| 青青青草原在线| 亚洲一二三四在线| 91人妻一区二区三区| 日韩精品中文字幕第1页| 68精品久久久久久欧美| 国产成人精品a视频| 中文字幕视频一区| 无需播放器的av| 免费毛片在线不卡| 国产91精品青草社区| 国产1区在线观看| 一区二区在线观看免费| www.久久av.com| 不卡一区2区| 1769国产精品| 视频一区二区免费| 亚洲va在线va天堂| aaaaaa亚洲| 日韩动漫一区| 欧美亚洲国产视频| 天天操天天干天天爽| 亚洲一线二线三线久久久| 99久久99精品| 亚洲欧美色图| 97人人干人人| 人人澡人人添人人爽一区二区| 538prom精品视频线放| 97精品在线播放| 国产在线视频一区二区| 日本三日本三级少妇三级66| 日韩成人免费av| 久久久国产视频| 国产日韩精品suv| 亚洲精品一卡二卡| 国产人妖在线观看| 激情综合激情| 免费观看成人高| 欧美性理论片在线观看片免费| 亚洲日韩中文字幕| 影音先锋国产资源| 亚洲欧美日韩国产一区二区三区| 韩国三级丰满少妇高潮| 黄色亚洲在线| 久久综合一区| 欧美系列精品| 欧美久久精品一级黑人c片| 黄色av网站免费在线观看| 欧美日韩国产中文精品字幕自在自线| 无码精品一区二区三区在线播放| 国产精品久久久久9999高清| 日本午夜精品一区二区| 中文成人在线| 国内精品久久久久影院优 | 中日韩美女免费视频网址在线观看 | 国产欧美久久久久久久久| 欧美电影免费观看完整版| 日韩欧美一区二区一幕| 麻豆视频观看网址久久| 超碰免费在线公开| 国产精品丝袜在线播放| 国产成人激情小视频| 激情视频在线观看| 亚洲国产另类久久精品| 中文字幕一区二区免费| 一区二区三区四区高清精品免费观看| 久久福利小视频| 日本aⅴ精品一区二区三区| 伊人再见免费在线观看高清版| 日韩最新在线| 91免费国产视频| 在线观看爽视频| 久久天天躁狠狠躁夜夜av| 四虎免费在线观看| 在线一区二区观看| 91精品人妻一区二区| 另类专区欧美蜜桃臀第一页| heyzo国产| 一区二区三区四区电影| 欧美日韩在线观看一区二区三区| 超碰在线资源| 原创国产精品91| 日本黄色一区二区三区| 欧美日韩国产三级| 精品成人av一区二区在线播放| 国产精品18久久久久久vr| 女人扒开屁股爽桶30分钟| 亚洲欧美综合国产精品一区| 欧美人xxxxx| 亚洲国产高清在线观看| 国产精品视频一| 成人女同在线观看| 成人97在线观看视频| yjizz视频网站在线播放| 亚洲精品98久久久久久中文字幕| 国产免费黄色网址| 欧美在线视频日韩| 日本特级黄色片| 亚洲妇女屁股眼交7| 欧美大片xxxx| 国产精品网友自拍| 女人又爽又黄免费女仆| 日韩一区欧美二区| 日韩伦理在线免费观看| 综合激情网站| 亚洲一区二区三区乱码| 精品国产一区二区三区噜噜噜 | 91国内在线播放| 久久裸体视频| 国产又大又硬又粗| 99精品国产99久久久久久福利| www.99riav| 亚洲综合自拍| 中文字幕乱码免费| 国产精品毛片一区二区在线看| 成人免费网站在线观看| 韩国女主播一区二区| 日本高清视频一区| 亚洲校园激情春色| 欧美亚洲免费电影| 亚洲天堂av在线| 欧美一区二三区| 亚洲精品福利电影| 日韩av手机在线| 偷拍中文亚洲欧美动漫| 国产97在线视频| xxxxx.日韩| 国产精品一区久久| 不卡一区视频| 亚洲最大成人在线| 伊人久久大香线蕉av超碰| av在线不卡一区| 北条麻妃一区二区三区在线观看| 国产91av在线| 97久久香蕉国产线看观看| 国产成人aa精品一区在线播放| 国产精品迅雷| 国产精品久久久久久久久久三级| 51一区二区三区| 成人乱人伦精品视频在线观看| 欧美成人家庭影院| 18成人在线| 美女av一区| 日韩欧美手机在线| 久久久久久久久久久久久久久久久久 | 亚洲第一天堂久久| 国产精品538一区二区在线| 亚洲成人精品在线播放| 91影院在线观看| 免费看裸体网站| 亚洲码国产岛国毛片在线| 久久久美女视频| 日韩欧美在线网址 | 国产精品v日韩精品v欧美精品网站| 国产欧美综合一区| 亚洲人体偷拍| 午夜免费一区二区| 国产精品一区在线| 国产精品一二三在线观看| 激情婷婷欧美| 午夜国产一区二区三区| 国产一区久久久| 懂色av粉嫩av蜜乳av| 国产精品欧美一区二区三区| 国产一二三四区| 欧美日韩中国免费专区在线看| 五月婷婷丁香在线| 精品欧美一区二区在线观看| 免费在线性爱视频| 精品少妇v888av| 欧美成人ⅴideosxxxxx| 99re视频| jiujiure精品视频播放| 国产爆乳无码一区二区麻豆| 日韩成人一级大片| 国产性猛交96| 国产人成亚洲第一网站在线播放| 精品国产乱码久久久久久鸭王1 | 欧美成人全部免费| 中文字幕在线直播| 97人人模人人爽人人喊38tv| 成人91在线| 国产午夜福利100集发布| 久久99精品视频| 成都免费高清电影| 亚洲成人动漫精品| 国产视频www| 国产亚洲精品美女| 咪咪网在线视频| 91久久久一线二线三线品牌| 日韩理论电影| av片中文字幕| 成人国产精品免费网站| 亚洲 欧美 变态 另类 综合| 在线精品视频免费播放| 色噜噜一区二区三区| 欧美第一黄网免费网站| 91丨精品丨国产| 亚洲人成影视在线观看| 久久永久免费| 中文人妻一区二区三区| 亚洲国产一区二区在线播放| av资源免费看| 久久精品国产2020观看福利| 国产精品亚洲一区二区三区在线观看| 国产三区二区一区久久| 欧美日韩午夜| 免费黄视频在线观看| 亚洲免费伊人电影| 国产精品高潮呻吟AV无码| 一区二区三区www| 欧美色网一区| 欧美午夜欧美| 久久久夜夜夜| 谁有免费的黄色网址| 一本一道久久a久久精品综合蜜臀| 黑人操亚洲女人| 欧美激情欧美激情| 嗯用力啊快一点好舒服小柔久久| 菠萝蜜视频在线观看入口| 国产激情精品久久久第一区二区| 波多野结衣在线网址| 日韩一级视频免费观看在线| caopo在线| 操一操视频一区| 伊人成人在线视频| 波多野结衣有码| 高跟丝袜一区二区三区| 色播色播色播色播色播在线| 欧美亚洲伦理www| av在线不卡顿| 亚洲精品成人在线播放| **欧美大码日韩| 精品国产亚洲AV| 欧美一区三区三区高中清蜜桃| 久久av免费看| 污污网站免费看| 亚洲欧美日本在线| 亚洲AV无码一区二区三区少妇| 亚洲第一偷拍网| 麻豆视频在线观看免费网站黄| 精品1区2区| 久久婷婷丁香| 色婷婷粉嫩av| 欧美mv日韩mv国产| 亚洲精品mv| 亚洲一区三区视频在线观看 | 国产在线视频一区| 91精品国产自产在线观看永久∴| 日本少妇一区二区三区| 性欧美疯狂xxxxbbbb| 日韩私人影院| 成人写真福利网| 日韩视频三区| 亚洲av熟女国产一区二区性色 | 成年人网站av| 亚洲国产精品久久人人爱蜜臀| 视频二区在线| 久久久久久国产三级电影| 丝袜连裤袜欧美激情日韩| 最近中文字幕一区二区| 一区二区三区在线视频免费观看| 天天干天天摸天天操| 国产乱肥老妇国产一区二| 欧美特黄视频| 色欲AV无码精品一区二区久久| 91精品国产综合久久久蜜臀粉嫩 | 在线观看日本www| 精品福利在线视频| √天堂资源地址在线官网| 国产福利一区二区三区在线观看| 日韩一区欧美二区| 国产在线观看成人| 色综合亚洲精品激情狠狠| 国产另类在线|