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

面試官:高并發場景下,如何處理消費過程中的重復消息?

開發
本文從一個面試場景出發,層層遞進,探討如何構建一個從基礎到高并發都穩如磐石的消費冪等方案。

大家好,我是秀才,接著聊消息隊列的最后一個高頻問題——消息重復消費。只要是在后端架構中用到了消息中間件,無一例外,都會涉及到消息重復消費問題。

假設有這樣一個場景:“在我們的電商系統中,訂單創建后會發送一條消息,下游的優惠券兌換系統會訂閱這個消息,然后發放優惠券。我們的系統需要確保每一張優惠券,無論網絡如何波動、系統如何異常,都只能被成功兌換一次。你會如何設計呢?”

這個問題看似簡單,但它背后考驗的是工程師對分布式系統復雜性的理解,尤其是對“冪等性”這一核心概念的掌握程度。很多同學的第一反應可能是“消息隊列不是有‘exactly-once’(精確一次)的保證嗎?”。但事實上,絕對的“精確一次”在分布式系統中是一個難以達到的理想狀態,都需要業務方配合于重試和冪等來達成。

下面,我們就從這個面試場景出發,層層遞進,探討如何構建一個從基礎到高并發都穩如磐石的消費冪等方案。

一、為什么消息會重復?

在分布式系統中,組件間的網絡通信本質上是不可靠的,生產端和消費端都有導致重復消費的場景。

  • 生產者重復發送:生產者發送消息后,因為網絡超時等原因沒收到 Broker 的確認,它無法判斷消息是否發送成功,為了保證消息不丟失,通常會選擇重試。這就可能導致同一條消息被發送了多次。

  • 消費者的重復消費:消費者拉取消息,業務邏輯處理完了,正準備提交消費位點(ACK)時,服務突然宕機或重啟。當服務恢復后,它會從未提交的位點重新拉取消息,導致同一條消息被再次消費。

二、面試實戰指南

OK,在上面分析了消息重復的原因之后,下面就正式進入到我們的重頭戲,面試的時候應對消息重復的場景問題,我們應該設計怎樣的方案呢?

依然是老規矩,場景問題的回答從最基礎的方案開始,層層遞進,分析其不足和適用場景,然后再逐步優化,最終給出我們的亮點方案

首先我們要搞清楚,我們在設計方案的時候不是去追求一個完美的、永不重復的環境,而是要讓我們的消費端服務具備冪等處理消息的能力。所謂冪等,就是無論一個請求被重復執行多少次,其對系統狀態產生的影響都和第一次執行時完全相同

那么如何實現冪等操作呢?最好的方式就是,從業務邏輯設計上入手,將消費的業務邏輯設計成具備冪等性的操作。但是,不是所有的業務都能設計成天然冪等的,這里就需要一些方法和技巧來實現冪等

1. 數據庫唯一約束

這是最簡單、最直接,也是最常用的一種方案。其核心思想是,利用數據庫中“唯一索引”或“主鍵”的特性,來阻擋重復數據的插入。

假設我們有一個電商系統,用戶下單后會發送一條消息,觸發給用戶增加積分的操作。消息內容可能包含{ "order_id": "202508310001", "user_id": 58, "points_to_add": 100 }。

這個“增加積分”的操作,天然是非冪等的。我們可以這樣改造:

  • 建立一張積分流水表(points_log)。
  • 表中包含字段:id (自增主鍵), order_id (訂單ID), user_id (用戶ID), points (變更積分), create_time。
  • 關鍵一步: 對 order_id 這個字段建立一個唯一索引。
-- 嘗試插入積分流水記錄
-- 假設 order_id 字段上有唯一索引
INSERT INTO points_log (order_id, user_id, points) VALUES ('202508310001', 58, 100);
  • 第一次消費:該訂單ID首次出現,INSERT操作成功。然后我們可以安全地去更新用戶的總積分。
  • 重復消費:MQ再次投遞相同的消息,消費者嘗試INSERT時,數據庫會因為order_id的唯一索引沖突而直接報錯。我們的代碼捕獲這個異常后,就可以知道這是重復操作,直接忽略并返回ACK即可。

這是一種最簡單的實現情況,面試的時候,為了展現你的思考能力,還可以做一個適當延伸,說明下這種方案的優缺點,以及擴展性

這種方案的優點是: 實現簡單,成本低,效果可靠。 缺點也很明顯: 強依賴數據庫特性,對于非數據庫操作的場景無能為力。

基于這個思路,如果不用關系型數據庫,Redis的SETNX命令(SET if Not eXists)也能達到異曲同工的效果,可以用order_id作為key,實現分布式鎖或狀態記錄。

2. 版本號機制

這個時候面試官可能會問:“上面的方案都是基于數據插入場景的,假設我們的業務操作不是數據插入,而是數據更新呢”

確實,如果我們的業務不是INSERT,而是UPDATE呢?比如,更新訂單狀態。這時,唯一約束就派不上用場了。我們可以引入“前置條件”或“版本號”機制,也就是常說的樂觀鎖。

假設有這樣一個場景,訂單支付成功后,需要將訂單狀態從“待支付”(status=1)更新為“待發貨”(status=2)。消息內容為{ "order_id": "202508310002", "target_status": 2 }。

直接執行UPDATE orders SET status = 2 WHERE order_id = '202508310002'是非冪等的。如果因為某種原因,后續還有一個“取消訂單”的操作把狀態改回了1,這條重復的消息可能會錯誤地再次把訂單改為“待發貨”。

我們可以這樣改造:

  • 在orders表中增加一個version字段,默認為0或1。
  • 消費消息時,我們從消息中(或者先查詢一次數據庫)拿到當前的版本號。
  • 執行UPDATE時,帶上版本號作為條件。
-- 更新訂單狀態,同時檢查版本號
-- 假設當前數據庫中該訂單的 version 是 5
UPDATE orders 
SET status = 2, version = version + 1 
WHERE order_id = '202508310002' AND version = 5;
  • 第一次消費:version為5,條件滿足,UPDATE成功。數據庫中的version變為6。
  • 重復消費:MQ再次投遞消息,消費者執行同樣的SQL,但此時數據庫中的version已經是6了,不滿足AND version = 5的條件。UPDATE語句會執行失敗,影響行數為0。我們就知道這是重復操作了。

同樣在分析完這個方案之后,你可以做一個方案優缺點的補充。優點: 適用范圍比唯一約束更廣,能處理大部分更新操作。 缺點: 需要在業務表中增加額外字段(如version),有一定侵入性。

3. 亮點方案

到這里,面試官還不滿意,接著追問,如果我們的業務邏輯非常復雜,可能涉及多個表的更新,甚至是一些外部RPC調用,這個時候版本號已經不起作用了,此時應該怎么辦呢?

這個時候就到了我們祭出我們第一個亮點方案的時候了:全局唯一ID + 單獨的防重表(或緩存)

(1) 防重表

防重表也叫冪等記錄表,這個方案的核心思想是,為每一次消息處理操作生成一個全局唯一的標識。在執行核心業務邏輯前,先將這個唯一標識插入一張“冪等記錄表”或直接利用業務表中的唯一約束字段。如果插入成功,說明是首次處理,繼續執行業務;如果插入失?。ㄒ驗槲ㄒ绘I沖突),則說明這條消息已經被處理過了,直接丟棄即可。

在面試的時候你可以先介紹下這個方案的基本流程

① 如果業務復雜,可以采用防重表的方案,將業務邏輯和冪等邏輯解耦。單獨建立一張防重表,具體的步驟如下:

② 為每條消息生成一個全局唯一ID(GUID)。這個ID可以在生產者發送時就放入消息體或Header中。

③ 建立一張“消費記錄表”(consumed_log),表結構很簡單,核心就是一個字段message_id,并將其設為主鍵或唯一索引。

消費者處理邏輯變為一個“三段式”:

  • 開啟事務。
  • INSERT消息的GUID到consumed_log表中。
  • 執行真正的業務邏輯(更新數據庫、調用RPC等)。
  • 提交事務。

這樣如果是重復消息的話,就會插入消費記錄表失敗,就不會執行后面的業務邏輯了

這里其實隱藏了一個問題,厲害的面試官可能會繼續深挖

“這里你的方案里提到了用事務,在一個數據庫里確實沒有問題,可以用本地事務來保證防重邏輯和業務邏輯的原子性,但是如果是分布式環境下,跨庫要怎么處理呢?”

(2) 異步校對

這里如果你能把分布式環境下的跨庫冪等性實現也講清楚的話,其實就已經可以跟一般候選人拉開差距了。確實,在微服務架構下,業務操作往往是跨服務的,比如“扣減庫存”和“創建物流單”可能分別由兩個不同的服務實現。這時,本地事務就失效了。

此時,我們需要引入最終一致性的設計思想,并輔以一個異步校對機制。整個流程會演變成三步:

  • 預操作:收到消息后,第一步是在冪等記錄表中插入一條記錄,但狀態標記為“處理中(PROCESSING)”。例如,插入一條記錄 (order_id, 'PROCESSING')。這一步是冪等性的關鍵防線。
  • 執行業務:調用庫存、物流等下游服務,執行核心業務邏輯。
  • 確認操作:所有業務邏輯成功執行后,回來將冪等記錄表中的狀態更新為“已完成(COMPLETED)”。

這里由于沒有事務保證,所以很可能出現第二步執行業務成功了,但第三步更新冪等表對應數據為已完成的時候失敗了(比如網絡問題或服務宕機)。這時,冪等記錄表里會留下一條“處理中”的“記錄。

這個時候就是異步校對機制發揮作用的時候了。它會定期掃描冪等記錄表中那些長時間處于“處理中”狀態的記錄,然后反向查詢各個業務系統(比如查詢物流系統是否存在該訂單的物流單),來判斷業務是否真的執行成功。如果查詢下來業務確實已經成功,校對任務就負責將冪等記錄的狀態更新為“已完成”。

這里面試官可能問一個問題:“如果查詢下來業務也沒有成功,會怎么樣呢?”

這里其實就回到了我們的經典重試問題的處理方案了

你可以這樣回答:“其實這個時候還是一致性的狀態,就說明業務確實是沒有執行成功,所以不會修改狀態為已完成,這個時候可以直接重新再出發一次業務操作就可以了,可以設置一個重試次數,如果超過重試閾值,一致不成功,最后只能由人工介入”

到這里,你已經展示了在復雜分布式場景下的問題解決能力,但面試官可能還想繼續了解你的技術深度,會繼續施壓:

“這個方案很好,但所有請求,無論是首次還是重復的,最終都要訪問數據庫。在每秒幾萬甚至幾十萬請求的場景下,數據庫很快就會成為瓶頸。你有什么優化思路?”

這正是引出我們第二板斧的絕佳時機。

(3) 緩存判重

很容易想到,數據庫有讀瓶頸的話,最好的優化方式就是加緩存,同樣這里我們可以在防重表的上層加一個redis來緩存近期處理過的 key。你可以詳細解釋下這個方案

當一個新的消息進來的時候,我們先通過redis做一次判重校驗,如果這個key存在,那么我們就認為這是重復的key,如果redis不存在,再通過數據庫做一次兜底校驗,如果key存在就認為是重復的消息,如果key不存在,就認為不是重復消息,沒處理過

引入redis后的整個判重校驗邏輯如下圖:

一旦引入緩存,就涉及到緩存和數據庫的一致性問題了,這也是面試的時候,面試官最喜歡問的點,那這里我們每次處理一個新的消息之后,是先更新數據庫(防重表)呢,還是先更新緩存redis呢?

這里一定是先更新數據庫,因為它是最可靠的,也是我們的兜底方案,你可以這樣回答:

處理完業務邏輯之后,先更新數據庫,把這個新的消息寫入到防重表,在更新redis。這里即使redis更新失敗,也沒有關系,下一次這個重復的消息過來的時候,做重復性校驗的時候,無非就是redis這里的攔截不起作用了,但是還會透穿到數據庫層面去做校驗, 還是能把重復消息攔截掉。保證消息冪等消費。

“那這里如何確定redis里key的過期時間呢?”

但凡涉及到redis的緩存問題,過期時間的確定也是一個高頻考點。

關于redis的key過期時間其實沒有一個嚴格的標準,一般是根據業務場景來定的,可以先觀察具體消息隊列接入的業務key的出現頻率來設定,通過測試觀察比如key的過期時間大概是5分鐘出現一次的話,那我們比過期時間稍微設置長一點時間即可,比如六七分鐘都是可以的。但是這里的key過期時間不宜設置過長,比如半小時,一小時。如果設置的太長,如果業務量大,并發量高的話,會造成redis的存儲量暴漲,引起redis瓶頸

那假設這里重復的key出現間隔就是很久,比如一批一批的重復消息大量出現。redis用來做這一層隔離不合適,應該怎么辦呢?這里就要祭出我們的終極亮點方案了

(4) 布隆過濾器

既然數據庫是瓶頸,那么優化的核心思路就是:盡可能地減少對數據庫的直接訪問。redis緩存已訪問的消息,又達不到性能要求,那我們可以就在數據庫前構建一個或多個高性能的過濾層,讓絕大多數的重復請求在到達數據庫之前就被攔截掉。

思考一下,這里我們要的是什么,沒有出現過的直接放行,出現過的攔截掉。這不正是布隆過濾器的用武之地嗎。所以我們可以在數據庫前面加一層布隆過濾器作為攔截層。

這里我們首先來回顧下什么是布隆過濾器。

布隆過濾器是一種高效的概率性數據結構,用于判斷一個元素是否可能在一個集合中。它由一個很長的二進制位數組(位數組)和一組哈希函數組成。工作原理如下:

① 初始化時,布隆過濾器是一個長度為 m 的 位數組(bit array),所有位都置為 0。

② 插入元素時,會用 k 個哈希函數分別計算元素的哈希值,每個哈希函數對應一個數組下標,把對應的 bit 位置為 1。

③ 查詢元素時,再用相同的 k 個哈希函數計算位置:

  • 如果這些位置有任意一個是 0 → 元素一定不存在。
  • 如果這些位置全部是 1 → 元素可能存在。

這里需要注意一點,布隆過濾器不會出現漏判(False Negative),即如果它說不存在,那一定不存在。但是會出現誤判(False Positive),即可能說一個元素存在,但實際上卻不存在。

比如上圖,這里假設進來一個新的元素z,要判定z元素是否存在,對Z做hash映射,這里發現映射到的3個bit位都是1,會認為Z已經存在。但其實這里的bit位為1是前面的X和Y元素存在導致的

解釋完布隆過濾器的原理之后,接下來就可以跟面試官說明下我們的設計方案了。

“為了增加性能,不讓每一次判重邏輯都走數據庫,我們可以在數據庫前面加個布隆過濾器,每一個新的消息過來,先用布隆過濾器判重,如果不存在,我們就正常處理業務邏輯,然后再更新布隆過濾器和防重表。如果布隆過濾器存在這個key的話,由于布隆過濾器存在假陽性的問題,所以這里就可以透穿到數據庫再做一次校驗。就如果是重復消息,直接拒絕就可以了,如果不是重復消息,就正常處理消息”

到這一步其實防重方案已經很完善了。從上面的方案可以知道存在一個數據的一致性問題,面試官可能在這里深挖,如果防重表或者是布隆過濾器失敗該怎么處理,這里其實很好解決了,復用前面版本號機制的思路,雖然用分布式事務可以來保障但是,會給系統帶來很大的復雜性提升。這里我們同樣可以用重試配合人工兜底來處理

(5) 擴展方案

有沒有比布隆過濾器更好的選擇?

在某些特定場景下,確實有。如果你的業務唯一標識本身就是連續或接近連續的整數(例如,訂單系統分庫分表后的數據庫自增ID),那么使用位圖(Bit Array / Bitmap)會是比布隆過濾器更優的選擇。

位圖用每一個比特位來標記一個ID是否存在,1代表存在,0代表不存在。它不僅完全沒有假陽性的問題,判斷絕對精確,而且在數據密集的情況下,內存效率極高。我們甚至可以用一個很小的偏移量來映射業務ID,比如,業務ID從8,800,000開始,那么我們可以讓位圖的第0位對應ID 8,800,000,第1位對應8,800,001,以此類推,極大地節省了存儲空間。

但是這種方案有一個局限性,那就是我們的業務唯一ID必須是數值型的,且最好是自增的,這樣用起來才比較方便。如果滿足這種條件的話,用位圖來替換布隆過濾器是個絕佳選擇

在介紹完上面的布隆過濾器方案的時候,你可以主動引出這個位圖的方案,分析下它的優劣勢,說明其局限性和使用場景。到這里,你基本上已經可以打敗90%的面試候選人了。

三、小結

到這里,我們的消息冪等方案就介紹的差不多了。我們從一個簡單的消息重復消費問題出發,從最基礎的數據庫唯一鍵約束,一路升級打怪,共同構建了一套由 Redis、布隆過濾器乃至位圖組成的完整技術方案。

這些方案的設計思路其實都遵循著同一個核心原則:讓系統具備冪等處理能力。無論是通過數據庫約束阻擋重復數據,還是通過緩存和過濾器提升性能,本質上都是在解決"如何讓重復的操作產生相同的結果"這個根本問題。

可以看到,在應對面試官關于消息重復消費的層層追問時,關鍵并不僅僅在于給出一個單一的“最優解”,而在于展現我們作為工程師解決問題的完整思考框架:從識別問題、到設計基礎方案、再到分析瓶頸并層層優化。

最后,技術方案永遠沒有標準答案,關鍵是要能夠根據具體的業務場景、并發量級、團隊技術棧等因素,選擇最合適的解決方案。這才是一個成熟工程師應該具備的核心素養。

責任編輯:趙寧寧 來源: IT楊秀才
相關推薦

2025-09-18 08:53:20

2025-09-22 08:26:37

2020-10-15 06:26:24

高并發場景冰河

2024-06-18 14:08:22

2025-09-19 11:30:23

2021-01-18 05:13:04

TomcatHttp

2022-08-08 13:45:12

Redis面試Hash

2021-03-01 07:31:53

消息支付高可用

2025-09-23 02:15:00

2025-11-11 09:05:09

2024-05-29 14:34:07

2020-09-30 06:49:25

MySQL查詢刪除

2020-08-06 07:49:57

List元素集合

2024-09-23 08:04:45

MYSQL數據存儲

2024-10-29 08:17:43

2024-02-28 10:14:47

Redis數據硬盤

2025-06-04 03:15:00

高并發短鏈系統

2025-09-08 00:00:00

并發模塊并發性能異步編程

2024-05-23 12:11:39

2021-07-28 10:08:19

類加載代碼塊面試
點贊
收藏

51CTO技術棧公眾號

色猫av在线| 一区二区三区视频免费看| 狂野欧美性猛交xxxx| 亚洲欧美在线视频| 精品欧美一区二区在线观看视频| 久久青青草视频| 婷婷激情图片久久| 精品对白一区国产伦| 人成网站在线观看| xxxx日韩| 在线观看av不卡| 2022中文字幕| 岛国在线视频免费看| 国产在线播放一区三区四| 91极品视频在线| 亚洲天堂网一区二区| 亚洲人成777| 欧美性xxxxxxxxx| 国产成人一二三区| 婷婷色在线观看| 韩国v欧美v日本v亚洲v| 日产精品99久久久久久| 麻豆一区二区三区精品视频| 全球成人免费直播| 亚洲国产精品成人av| 欧洲美女亚洲激情| 欧美日韩视频免费观看| 亚洲成va人在线观看| 夜夜爽www精品| 可以在线观看的黄色| 国产91丝袜在线播放0| 国产日韩视频在线观看| youjizz在线视频| 伊人久久久大香线蕉综合直播| 搡老女人一区二区三区视频tv| 久久久久久国产精品日本| 国产美女久久| 欧洲另类一二三四区| 国产极品尤物在线| 18av在线视频| 亚洲欧洲日本在线| 日产中文字幕在线精品一区| 亚洲色图欧美视频| 成人一级黄色片| 91精品国产一区二区三区动漫| 中文字幕乱码人妻二区三区| 美女爽到呻吟久久久久| 午夜精品蜜臀一区二区三区免费 | 亚洲婷婷综合网| 亚洲区一区二| 97在线免费视频| 国产性xxxx高清| 91久久亚洲| 性欧美视频videos6一9| 中国一级免费毛片| 亚洲欧洲一区二区天堂久久| 国模吧一区二区三区| 国产无码精品一区二区| 国内精品美女在线观看| 欧美精品久久久久久久久久| 久久久久国产精品夜夜夜夜夜| 欧美激情在线| 久久久久久久久久亚洲| 国产成年人免费视频| 在线不卡亚洲| 国产成人精品一区二区| 狠狠躁夜夜躁人人爽视频| 蜜桃视频一区二区三区在线观看| 国产精品日本精品| 国产一区二区三区三州| 国产一区二区电影| 国产成人精品免费视频大全最热| 国模私拍视频在线| 成人18视频日本| 欧美第一黄网| 日本中文字幕电影在线免费观看| 亚洲男同性视频| 激情伊人五月天| 日韩精品免费观看视频| 欧美久久免费观看| 不许穿内裤随时挨c调教h苏绵| 99国产精品久久一区二区三区| 日韩乱码在线视频| 日本在线观看网址| 午夜亚洲福利| 欧美在线一区二区视频| 综合久久中文字幕| 国产成人精品免费视频网站| 久久精品日韩精品| 在线观看麻豆| 亚洲福利一区二区| 一级片视频免费观看| 日本在线视频一区二区三区| 亚洲精品色婷婷福利天堂| 山东少妇露脸刺激对白在线| 激情综合自拍| 国产精品日韩在线观看| 亚洲福利在线观看视频| 国产欧美中文在线| 欧美激情亚洲天堂| 在线成人视屏| 亚洲国产99精品国自产| 欧美激情亚洲色图| 91久久久久| 成人午夜黄色影院| 欧美美女色图| 一区二区三区免费观看| 一区二区三区国产免费| 国产 日韩 欧美 综合 一区| 在线播放国产一区二区三区| 久一视频在线观看| 激情综合亚洲精品| 欧美午夜精品久久久久久蜜| 污视频免费在线观看| 91福利视频网站| 国产69视频在线观看| 91精品一区二区三区综合在线爱| 1769国内精品视频在线播放| www.久久综合| 国产精品成人免费| 免费激情视频在线观看| 国产极品模特精品一二| 另类美女黄大片| 中文字幕在线观看精品| 久久综合国产精品| 青青视频免费在线| 日本国产亚洲| 这里只有精品在线播放| 欧美亚洲精品天堂| av色综合久久天堂av综合| 日本xxxxx18| 日韩深夜福利网站| 中文字幕在线精品| 天天爽夜夜爽人人爽| 99精品国产一区二区三区不卡| 久久最新免费视频| 日韩电影免费观看高清完整版在线观看| 亚洲欧美在线免费| 日韩 欧美 中文| 97久久精品人人爽人人爽蜜臀| 91视频成人免费| 国产精品高清一区二区 | 免费黄色网页在线观看| 色欧美乱欧美15图片| 偷偷色噜狠狠狠狠的777米奇| 黄色免费成人| 成人看片在线| 俺来俺也去www色在线观看| 欧美成人一区二区三区| 欧美成人三级在线观看| 国产精品亚洲一区二区三区妖精| 樱空桃在线播放| 国产精品一区二区三区www| 久久精品国产一区二区电影| 91国产免费视频| 亚洲视频网在线直播| 中文字幕乱码在线人视频| 在线精品小视频| 亚洲淫片在线视频| 91极品在线| 精品国产一区二区三区久久影院| 国产第一页第二页| av在线播放成人| 久久久免费视频网站| 国产一区二区三区探花| 国产一区二区在线免费| 26uuu亚洲电影在线观看| 欧美r级在线观看| 中文字幕一区二区三区精品 | 蜜臀久久久久久久| 宅男一区二区三区| 一区二区三区视频播放| 午夜精品视频网站| 国产对白叫床清晰在线播放| 欧美人与性动xxxx| 青青操国产视频| 91小视频免费观看| 精品999在线| 欧美精品99| 九九九九精品九九九九| 国产69精品久久久久9999人| 久久久国产精品视频| 女人18毛片一区二区三区| 欧美日韩一区二区在线| 国产成人免费在线观看视频| 国产成人精品在线看| 波多野结衣家庭教师在线播放| 残酷重口调教一区二区| 91九色极品视频| 视频二区不卡| 久久国产精品影视| 欧美18xxxxx| 欧美一区二区三区小说| 久久久久久久久久久久久av| 中文字幕制服丝袜一区二区三区| 中文字幕一区二区人妻电影丶| 日本欧美在线观看| 欧美这里只有精品| 第九色区aⅴ天堂久久香| 高清av免费一区中文字幕| 日韩欧美一区二区三区在线观看 | 久久久一二三区| 欧美激情一区三区| 在线观看亚洲免费视频| 久久精品国产一区二区| www国产黄色| 国色天香一区二区| 亚洲视频精品一区| 久久久免费毛片| 亚洲精品欧美日韩专区| 亚洲承认视频| 97在线视频观看| 七七成人影院| 久久精品国产视频| 高清在线观看av| 亚洲激情成人网| 午夜精品小视频| 欧美久久久久久久久| 成人免费毛片视频| 午夜视黄欧洲亚洲| 欧美黑人猛猛猛| 中文字幕日韩精品一区| 亚洲成人黄色av| 久久综合久久99| 国产老熟女伦老熟妇露脸| 国产一区二区三区综合| 亚洲欧美国产日韩综合| 久久深夜福利| 男人日女人下面视频| 激情自拍一区| 国产免费一区二区视频| 中文字幕亚洲精品乱码| 一区二区视频在线播放| 色综合久久网| 亚洲 日韩 国产第一区| 精品国产91| 欧美一区二区三区精美影视| 亚洲成人一品| 久久久一本精品99久久精品66| 中文字幕一区二区三区中文字幕 | 午夜性色一区二区三区免费视频| 成年人免费观看的视频| 久久中文字幕av一区二区不卡| 色女人综合av| 成人激情电影在线| 亚洲国产欧洲综合997久久 | 欧美交换配乱吟粗大25p| 99精品在线观看| 最新不卡av| 欧美va亚洲va日韩∨a综合色| 最新av在线免费观看| 综合久久精品| 欧美交换配乱吟粗大25p| 精品动漫3d一区二区三区免费版 | 日本一二三区不卡| 亚洲超碰97人人做人人爱| 日产精品久久久久| 精品久久久国产| 中文字幕手机在线视频| 欧美亚洲一区二区在线| 中文字幕在线播放不卡| 欧美一级日韩一级| 好男人www在线视频| 亚洲精品成人久久| 色视频在线观看| 日韩在线免费av| 影音先锋男人在线资源| 久久久久久久久爱| 亚洲最大网站| 91精品久久久久久久久久| 久久免费福利| 久久精品日产第一区二区三区| 欧美日韩激情| 91精品国产毛片武则天| 亚洲精品三级| 美女网站色免费| 国产精品一卡二卡| 亚洲一区二区观看| 国产精品久久久久久久久搜平片| 日韩一级片av| 日韩欧美主播在线| 伊人亚洲综合网| 亚洲爱爱爱爱爱| 国产中文字幕在线视频| 欧美www在线| 高清不卡av| 亚洲直播在线一区| 亚洲aa在线| 亚洲第一综合网站| 亚洲在线黄色| 91蝌蚪视频在线| 26uuu精品一区二区| 欧美激情精品久久久久久免费| 亚洲国产精品一区二区www在线 | 日韩亚洲视频在线| 欧美激情视频一区二区三区在线播放| 日韩少妇内射免费播放18禁裸乳| 久久精品国产免费看久久精品| 95视频在线观看| 欧美韩日一区二区三区四区| 久久精品免费在线| 欧美日韩免费观看一区二区三区 | 成人在线视频一区二区三区| 日韩电影一区二区三区| 性猛交╳xxx乱大交| 国产精品嫩草影院av蜜臀| 欧美一级视频免费观看| 91麻豆精品国产自产在线观看一区 | www亚洲视频| 日韩你懂的电影在线观看| a黄色在线观看| 91精品国产91久久久久福利| 国产一区二区三区免费在线| 日韩精品欧美专区| 中文日韩在线| 中文字幕 欧美 日韩| 亚洲视频一区二区在线| 久久久久久无码精品大片| 亚洲国产毛片完整版| 久久av色综合| 91久久嫩草影院一区二区| 第一会所亚洲原创| 人妻无码视频一区二区三区| 97se亚洲国产综合自在线| 久久久久久久久久久97| 欧美精品1区2区| 91在线品视觉盛宴免费| 日韩av手机在线| 蜜桃精品噜噜噜成人av| 国产白丝袜美女久久久久| 成年人网站91| 日韩欧美性视频| 精品国产成人在线影院 | 性欧美18—19sex性高清| 亚洲精品综合在线| 91精品在线视频观看| 日韩中文在线中文网三级| 成人做爰视频www| 午夜精品一区二区在线观看 | 性欧美大战久久久久久久久| 性生交生活影碟片| 欧美日韩成人精品| 视频在线观看免费影院欧美meiju| 激情五月五月婷婷| 经典一区二区三区| 成人高潮免费视频| 欧美一级日韩一级| 欧美韩日亚洲| 国产伦精品一区二区三| 99视频一区| www.免费av| 日本精品一级二级| av色图一区| 成人免费看吃奶视频网站| 91精品国产自产拍在线观看蜜| 中文字幕国产高清| 一区二区三区蜜桃| 亚洲国产精品一| 9.1国产丝袜在线观看| 偷拍一区二区| 天天干在线影院| 亚洲男人天堂av网| 成人爽a毛片一区二区| 97成人精品视频在线观看| 妖精视频一区二区三区免费观看 | 欧美啪啪小视频| 日韩高清av一区二区三区| 国产极品久久久久久久久波多结野 | 欧美丝袜在线观看| 一区二区三区国产精品| 人妻少妇一区二区三区| 欧洲亚洲妇女av| 久久精品国产大片免费观看| av噜噜在线观看| 亚洲电影第三页| 国产69精品久久app免费版| 国产一区私人高清影院| 国内自拍一区| 中文字幕网站在线观看| 欧美电影一区二区| www.九色在线| 日韩三级在线播放| 丁香婷婷综合激情五月色| 久久久久在线视频| 美女啪啪无遮挡免费久久网站| 国产欧美自拍一区| 91在线视频观看免费| 一区二区三区在线视频观看| 日本一区高清| 91福利视频导航| 琪琪一区二区三区| 国产大片aaa| 日韩有码在线电影| 欧美一区二区三区红桃小说| 三上悠亚在线一区| 午夜不卡在线视频| 国产最新在线| 日韩电影在线播放| heyzo一本久久综合| 一卡二卡三卡在线|