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

門票系統為什么總“炸”?并發、鎖、競態一次說清

開發 前端
在在線電影、演唱會與體育賽事全面數字化的時代,“搶票”已經不再只是點擊按鈕這么簡單。?你所看到的“售罄僅需 1 秒”,背后往往是成千上萬的請求同時涌向服務器,而座位庫存的數量卻遠少于這些訪問量。

在在線電影、演唱會與體育賽事全面數字化的時代,“搶票”已經不再只是點擊按鈕這么簡單。 你所看到的“售罄僅需 1 秒”,背后往往是成千上萬的請求同時涌向服務器,而座位庫存的數量卻遠少于這些訪問量。短短幾毫秒內的差異,就可能導致:

  • 有些用戶重復搶到相同的座位
  • 多人同時占用同一資源
  • 庫存被扣成負數
  • 訂單錯亂甚至系統癱瘓

這些問題的核心,都源于高并發下的共享資源競爭

為了構建一個真正“抗壓”的票務系統,本篇文章將從底層出發,以 Spring Boot + MySQL 為基礎,拆解 并發、鎖、事務、座位競態背后的機制,并結合完整的代碼,帶你逐步構建一個具備:

  • 防超賣
  • 隔離鎖
  • 可控一致性
  • 高并發安全
  • 良好用戶體驗

的現代票務系統。

行業痛點與問題模型

在票務、電商秒殺、在線預約等需要“搶占式資源分配”的業務領域,幾乎所有系統都會遇到同一類結構性難題:資源有限、訪問高峰集中、寫入沖突頻繁、響應時延敏感。這些特性疊加之后,任何微小的邏輯瑕疵都可能引發大面積錯單、超賣、庫存負數、訂單狀態失真等嚴重事故。

為了更清晰地描述問題,我們將行業常見痛點抽象為三個典型模型。

① 并發寫沖突模型:多個用戶同時修改同一條記錄

最典型場景: 多個用戶同時搶購同一張票,每個線程都讀取到相同的庫存值,然后幾乎同時嘗試減庫存。

如果庫存是 1,而有 100 個請求同時到達:

  • 所有人讀取到的都是 remain = 1
  • 每個人都認為“庫存足夠”
  • 大量線程同時開始減庫存
  • 結果:庫存被更新多次,系統出現超賣

問題本質:讀取與更新之間存在時間窗口,任何線程都可能插隊,造成不可預測的狀態跳變。

② 業務校驗延遲模型:流程中多個步驟依賴共享信息

大部分票務邏輯都不是一句 SQL 能解決的 —— 通常需要:

  1. 判斷活動是否可售
  2. 判斷庫存是否足夠
  3. 判斷用戶是否重復購買
  4. 生成訂單
  5. 扣減庫存
  6. 寫入日志

這些步驟一旦拆散到多個操作,就引入了天然風險:任意校驗步驟之間的時間差,都可能讓另一個線程插入并改變全局狀態。

你看到的是“邏輯嚴謹的流程”; 系統看到的是“多個時間不一致的快照”。

③ 分布式場景下的擴散性風險:多個節點同時操作同一資源

現代部署常常采用多實例、多容器、多服務節點并發處理同一個活動。

這意味著:

  • 不是一個應用線程在搶資源
  • 而是幾十甚至上百個節點同時讀取相同數據

這些節點之間無法共享線程鎖,每個節點的處理速度不同; 這會把原本簡單的沖突擴大為 分布式級別的競態,問題更難定位、更難復現。

Race Condition 原理

在高并發業務中,最難纏、最隱蔽、最容易被忽略的系統問題,就是 Race Condition(競態條件)。它不像語法錯誤會直接報錯,也不像異常會立刻中斷流程,而是以一種“偶發、隨機、不可復現”的方式悄悄破壞數據一致性。

要構建真實可控的搶票/扣庫存系統,理解競態的底層原理是第一步。

什么是 Race Condition?

如果要用一句話描述:

多個線程在沒有明確順序約束的情況下操作同一份數據時,最終結果依賴于“哪一個線程先執行”,而這個先后順序是不可預測的,這就是競態條件。

換句話說:

  • 代碼邏輯看起來沒有問題
  • SQL 似乎也正確
  • 流程能跑通
  • 但一旦進入高并發,結果就完全取決于隨機的執行順序

這就是 Race Condition 的可怕之處。

本質:狀態的改變被“同時爭奪”

我們把資源狀態抽象為一個 timeline(時間線):  

T0 -------- T1 -------- T2 -------- T3
    |          |           |          |
    |          |           |          |
   讀取       校驗        修改       提交

假設兩個線程都在操作同一資源:

  • T1:讀取狀態
  • T2:根據讀取結果決定是否操作
  • T3:更新數據并提交

問題就在于:

線程 A 和線程 B 的 T0–T3 之間沒有任何保證順序的機制。

也就是說系統實際發生的可能是:

線程 A:讀取
                線程 B:讀取
                線程 B:更新
線程 A:更新

在這種插隊情況下,線程 A 用已經過期的狀態執行邏輯,導致兩次更新都被提交,觸發“狀態失真”。

這就是最典型的超賣。

競態產生的原因:三大根因

① 狀態讀取與操作之間存在時間窗口

所有業務校驗都基于當前狀態:

  • 當前庫存是多少?
  • 用戶是否已經買過?
  • 活動是否還有容量?

但在讀取狀態與更新狀態之間,任何線程都可能改變這個狀態。

只要存在這個“間隙”,競態就可能發生。

② 多步驟鏈路被拆散,缺乏原子性

例如創建訂單:

  1. 查詢庫存
  2. 判斷是否可售
  3. 判斷用戶是否重復購買
  4. 減庫存
  5. 寫訂單

只要不是一次性執行的原子操作,中間任何一個步驟都可能被其他線程打斷。

業務越復雜,出現競態的概率越高。

③ 多節點系統放大了每一次并發寫入

在分布式架構下:

  • 多個應用實例
  • 多個線程池
  • 多個數據庫連接
  • 多個服務節點同時執行邏輯

每個節點都覺得自己“正在處理”,但實際上:

它們都在同時爭奪同一行數據。

單機下偶發的問題,會在分布式場景中成倍放大。

競態不是 bug,是自然現象

很多開發者第一次遇到 Race Condition 會想:

“我代碼哪里錯了?”

但實際上:

  • 競態不是錯誤
  • 它也不是異常
  • 它是系統在并發條件下的“正常表現”

真正的問題是:

程序沒有設計機制來約束并發訪問順序。

換句話說—— 沒有鎖、沒有版本號、沒有隔離機制的系統,是必然會出現競態的。

為什么測試環境永遠無法復現?

因為 Race Condition 依賴:

  • CPU 搶占順序
  • 上下文切換時機
  • 多線程競爭激烈程度
  • IO 與網絡抖動
  • 多機之間的時鐘偏移
  • 數據庫事務調度策略

這些都具有隨機性。

在真實高并發場景下,系統有數千個請求在同一秒進入; 但你本地測試時,可能一次只有 3~5 個線程在跑。

所以:

測試環境很難觸發競態 生產環境幾乎必定觸發競態

這就是為什么超賣往往只在大促活動當天才暴露。

競態無法通過“寫更嚴謹的代碼”解決

常見抗不住的做法:

  • “多寫幾層業務判斷”
  • “前端也檢查一下庫存”
  • “寫更多 if else”
  • “每個 SQL 都加個 where 條件”

這些做法本質上不具備原子性,仍然逃不過并發插隊。

為了真正解決競態,我們需要:

  • 對數據庫結構重新建模
  • 選對加鎖策略(悲觀鎖 / 樂觀鎖 / 分布式鎖)
  • 縮小并發競爭窗口
  • 重構業務流程避免時間差
  • 在邊界處引入強一致性保護

數據庫結構

無論搶票系統、秒殺服務還是庫存分配平臺,數據庫結構都是控制并發行為的“定海神針”。一旦表結構設計得不合理,后續無論你怎么加鎖、怎么優化業務流程,都很難真正規避競態問題。 因此,在討論鎖之前,必須先回答一個更底層的問題:

數據應該如何建模,才能讓并發訪問可控、可約束、可證明?

本章將從庫存建模、狀態建模、并發建模三條主線,重構一個適合高并發搶占式業務的數據庫結構。

模型一:庫存與配額結構(Stock / Quota Model)

最容易引發競態的字段通常只有一個:

remain_stock

如果只把庫存做成一個單獨字段,看似很簡單,但實際上:

  • 它會被所有流程同時讀取
  • 它在整個業務周期中持續被更新
  • 每次更新都可能有多個線程競爭

因此一個好的庫存結構應該滿足:

  • 支持原子操作(減少一步步的讀取 → 校驗 → 更新)
  • 支持鎖定(悲觀/樂觀均可)
  • 支持預扣(用于并發削峰)
  • 支持隔離多個活動

關鍵字段解釋:

字段

用途

remain_stock

當前剩余庫存,所有并發寫入的焦點

version

樂觀鎖標記,避免臟寫

status

是否開啟售賣,減少無意義并發

sale_xxx_time

減少“未開始就大量請求”的無效訪問

通過 version 字段,可以把庫存更新改為:

UPDATE ticket_event
SET remain_stock = remain_stock - 1,
    version = version + 1
WHERE event_id = ?
  AND remain_stock > 0
  AND version = ?

這類結構天然適配樂觀鎖機制 避免了“讀取與更新分離”導致的競態窗口

模型二:訂單與狀態機結構(Order / Status Model)

高并發下的訂單表必須保證:

  • 狀態可追蹤
  • 可防止重復下單
  • 可防止多線程重復寫入
  • 狀態機支持狀態轉換的邏輯閉環

關鍵點:唯一索引

UNIQUE KEY u_user_event (user_id, event_id)

這個設計能自動阻斷:

  • 并發重復下單
  • 重放攻擊
  • 脫離鎖機制的重復寫入

同時也能減少業務層的判斷分支。

訂單狀態的推薦狀態轉移:

pending → locked → paid → finished
          ↑
          └── canceled

拆分狀態的最大好處:

能在數據庫層面看到流程處于哪一步,避免事務中做太多事,也降低鎖的持有時間。

模型三:并發控制結構(Concurrency Control Fields)

為了讓系統中的并發行為可控,可觀察,我們需要引入“輔助字段”,讓每次搶占式操作都變得可追蹤、可驗證。

推薦增加的字段:

字段

用途

version

樂觀鎖用途,限制并發寫入

lock_uid

悲觀鎖占用標識,可定位鎖被誰持有

hold_expire_time

預扣庫存的過期釋放時間

operation_trace

操作鏈路追蹤信息(便于回溯)

這些字段不一定都要放入同一張表,但在高并發系統中非常有價值。

三種鎖方案

在理解競態成因與數據庫結構之后,萬變不離其宗的關鍵問題只有一個:

當多個線程同時操作同一份資源時,我們如何規定它們的“先后順序”?

鎖機制(Locking Strategy)就是解決這個根本問題的工具。 但鎖從來不是只有一種形式,它們在成本、控制力與吞吐量之間各有取舍。

本章將從“適用場景 → 原理 → 實現方式 → 優缺點”四個維度,同時重寫并強化三大典型鎖模型。

悲觀鎖(Pessimistic Lock)

核心思想:

假設別人一定會來競爭,所以先把門鎖住,再處理事情。

在高沖突場景下,悲觀鎖能確保最穩定的結果,因為它直接阻塞所有其他線程,直到當前操作完成。

① 使用場景
  • 庫存極度緊張(庫存遠小于請求量)
  • 數據更新競爭激烈
  • 多個線程可能同時修改同一行數據
  • 對一致性要求極高、不允許任何錯單

適合例如:

  • 搶票最后幾張
  • 限量秒殺
  • “只剩 1 個名額”類業務
② 實現方式

典型 SQL:

SELECT * 
FROM ticket_event 
WHERE event_id = ? 
FOR UPDATE;

執行效果:

  • 數據庫對這行記錄加“排他鎖”
  • 只有當前事務能讀寫
  • 其他事務必須等待

之后執行庫存減少:

UPDATE ticket_event
SET remain_stock = remain_stock - 1
WHERE event_id = ?;

整個過程在同一個事務中完成。

③ 優點
  • 絕對可靠:天然杜絕超賣
  • 邏輯簡單:不需額外字段/版本號
  • 一致性最強
④ 缺點
  • 吞吐量大幅下降
  • 所有請求排隊,形成“串行化”
  • 越多人搶同一資源,等待越長
  • 一個慢查詢可能阻塞全部線程

適用于“要正確,不要快”的業務時段,而非全量場景。

樂觀鎖(Optimistic Lock)

核心思想:

假設沖突不是常態,大家可以同時讀;但在寫入時確認一下狀態是否被別人改過。

它不是阻塞,而是拒絕無效更新。

① 使用場景
  • 并發量大,但沖突頻率沒有那么夸張
  • 數據行更新不算極度頻繁
  • 希望提升吞吐量
  • 可以接受局部失敗重試(搶票失敗即可)

適用于:

  • 常態售賣
  • 中高并發但不是極端搶購
  • 大部分請求不會命中同一庫存點
② 實現方式

常用 version 字段:

UPDATE ticket_event
SET remain_stock = remain_stock - 1,
    version = version + 1
WHERE event_id = ?
  AND remain_stock > 0
  AND version = ?;

如果兩個線程競爭:

  • 線程 A 把 version 從 10 → 11
  • 線程 B 的 SQL WHERE version = 10 不再成立,更新失敗

線程 B 會收到 “0 行受影響”,自然搶不到票。

無需 locking,無需等待。

③ 優點
  • 并發能力最強
  • 不會阻塞請求
  • 失敗立即返回,系統不積壓
  • 與緩存、削峰組件兼容性強
④ 缺點
  • 無法絕對避免沖突,只能防止“臟寫”
  • 需要業務層處理失敗重試或失敗返回
  • version 字段需要每次維護

樂觀鎖的本質是快失敗,適合互聯網流量特征。

分布式鎖(Distributed Lock)

核心思想:

鎖不是加在數據庫上,而是通過 Redis、Etcd 等外部系統協調整個分布式環境的先后順序。

在多應用實例、多機房、多節點同時處理請求的場景下,悲觀鎖/樂觀鎖無法橫跨節點調度; 因此必須引入第三方鎖服務。

① 使用場景
  • 多個服務節點競爭同一資源
  • 秒殺系統部署為多實例
  • 分布式任務調度
  • 多機資源控制

例如:

  • A 節點與 B 節點同時處理 event_id = 101
  • 只能讓一個節點進入庫存邏輯
② 實現方式

以 Redis 為例:

SETNX lock:event:101 <requestId>
EXPIRE lock:event:101 3   -- 避免死鎖

如果成功獲得鎖 → 執行業務 如果失敗 → 立即返回或排隊

釋放鎖:

DEL lock:event:101   -- 需保證是自己設置的鎖

高級方案:

  • RedLock(分布式 Redis)
  • Etcd 分布式租約
  • Zookeeper 分布式鎖
③ 優點
  • 適用于多節點競爭,數據庫無法解決的問題
  • 鎖粒度可拆分為:

按 event

按 seat

按用戶

  • 可實現跨項目、跨服務統一并發控制
  • 性能高(Redis 寫入極快)
④ 缺點
  • 增加系統復雜性
  • 鎖失效、續約、漂移需要精心處理
  • 依賴外部系統(Redis 掛則業務受影響)
  • 實現不當會造成“假鎖”、“鎖被提前釋放”

適合需要在分布式環境中進行全局串行化的業務。

完整業務流程

在理解了競態成因、數據庫結構以及三類鎖方案之后,我們將完整串聯整個搶票業務的實際流程。 重點在于 鎖策略如何融入業務邏輯,以及各環節的處理順序和異常處理。

業務場景梳理

假設我們要實現一個搶票系統:

  • 每場活動有固定庫存 remain_stock
  • 用戶高并發請求
  • 系統需保證:

不超賣

高吞吐

用戶體驗友好(失敗可提示重試)

核心步驟

整個流程可以分為五個核心步驟:

  1. 請求接入
  2. 獲取鎖 / 檢查庫存
  3. 庫存扣減
  4. 記錄訂單
  5. 釋放鎖 & 異常處理

步驟拆解

Step 1:請求接入

  • 用戶請求到達 Web 層
  • 請求進入流控/限流組件(可選)
  • 記錄日志或排隊信息
@RequestMapping("/buy")
public ResponseEntity<String> buyTicket(@RequestParam Long eventId, @RequestParam Long userId){
    // 1. 流控與日志
    if(!rateLimiter.tryAcquire()) {
        return ResponseEntity.status(429).body("請稍后再試");
    }

Step 2:獲取鎖 / 檢查庫存

根據策略選擇不同鎖:

悲觀鎖:

TicketEvent event = ticketEventRepository.findByIdForUpdate(eventId);
if(event.getRemainStock() <= 0){
    return ResponseEntity.badRequest().body("已售罄");
}

樂觀鎖:

TicketEvent event = ticketEventRepository.findById(eventId);
if(event.getRemainStock() <= 0){
    return ResponseEntity.badRequest().body("已售罄");
}
boolean updated = ticketEventRepository.updateStockIfVersionMatches(eventId, event.getVersion());
if(!updated){
    return ResponseEntity.status(409).body("搶票失敗,請重試");
}

分布式鎖(Redis 示例):

String lockKey = "lock:event:" + eventId;
if(!redisLock.tryLock(lockKey, 3)){
    return ResponseEntity.status(429).body("系統繁忙,請稍后再試");
}

關鍵點:鎖的獲取是整個庫存扣減的前置條件。

Step 3:庫存扣減

  • 庫存扣減可以在同一事務內完成
  • 悲觀鎖已阻塞其他線程
  • 樂觀鎖需通過 version 判斷
  • 分布式鎖確保跨實例順序
event.setRemainStock(event.getRemainStock() - 1);
ticketEventRepository.save(event);

注意:庫存扣減必須在鎖定范圍內執行,否則可能出現超賣。

Step 4:生成訂單

  • 生成唯一訂單號
  • 寫入數據庫(可異步入隊處理提高吞吐)
  • 返回訂單信息給用戶
Order order = new Order(userId, eventId, generateOrderId());
orderRepository.save(order);

異步隊列(Kafka、RabbitMQ)可用于解耦庫存與訂單寫入,減輕數據庫壓力。

Step 5:釋放鎖 & 異常處理

  • 悲觀鎖:事務提交自動釋放
  • 樂觀鎖:無需顯式釋放
  • 分布式鎖:顯式釋放,注意防止死鎖
redisLock.unlock(lockKey, requestId);

異常處理:

  • 扣減失敗 → 提示重試
  • 訂單生成失敗 → 回滾庫存(可使用事務或補償機制)
  • 鎖未釋放 → 設置 TTL 防止僵死

流程圖示意

用戶請求 → 流控限流 → 獲取鎖(悲觀/樂觀/分布式) 
          ↓
       校驗庫存
          ↓
     扣減庫存
          ↓
      生成訂單
          ↓
     釋放鎖 / 異?;貪L
          ↓
      返回結果給用戶

核心優化點

  1. 分布式場景下使用 Redis/RedLock 保證全局順序
  2. 樂觀鎖適用于大多數常規場景,減少數據庫阻塞
  3. 高并發時結合緩存、隊列削峰
  4. 異常處理必須覆蓋庫存回滾、鎖釋放、訂單狀態同步

通過這種方式,整個系統既保證 一致性,又有 較高吞吐量,同時兼顧用戶體驗。

性能、可擴展性 + 總結

在完成了業務流程設計之后,我們來分析搶票系統的 性能瓶頸、可擴展策略,并對整體方案進行總結。

性能分析

搶票系統的核心壓力主要來自 高并發的庫存扣減與訂單寫入。 常見性能瓶頸包括:

瓶頸點

原因

優化策略

數據庫鎖爭用

高并發下悲觀鎖容易阻塞

使用樂觀鎖 + 重試機制

寫入壓力

訂單表頻繁寫入

異步入隊、批量寫入、緩存寫回

分布式一致性

多實例搶同一庫存

使用 Redis 分布式鎖或 RedLock

高并發請求

Web 層壓力大

流控、限流、降級、CDN 靜態頁面緩存

通過合理選擇鎖策略、異步隊列、緩存和流控,可以大幅緩解壓力。

可擴展性策略

水平擴展

  • Web 層:增加實例,負載均衡
  • 緩存層:Redis Cluster 支持高并發鎖
  • 隊列層:Kafka、RabbitMQ 分區處理,支持多消費者

數據庫優化

  • 庫存表拆分:按活動/日期分表,減少熱點
  • 讀寫分離:查詢走從庫,寫操作通過主庫
  • 緩存庫存:利用 Redis 緩存熱點庫存,減少數據庫壓力

異步化與削峰

  • 高并發請求先寫入隊列
  • 異步處理庫存扣減與訂單生成
  • 配合延遲隊列處理失敗或回滾

總結

通過本篇拆解,我們實現了從理論到實踐的完整指導:

  1. 行業痛點與問題模型
  • 并發搶購容易導致超賣、性能瓶頸
  1. Race Condition 原理
  • 并發讀寫的沖突機制,理解根因是設計優化關鍵
  1. 數據庫結構設計
  • 訂單表 + 活動庫存表 + 版本號字段,為鎖策略提供基礎
  1. 三類鎖方案對比
  • 悲觀鎖:簡單、安全,但吞吐受限
  • 樂觀鎖:高性能,適合大多數場景
  • 分布式鎖:多實例環境保證全局一致性
  1. 完整業務流程
  • 鎖策略嵌入庫存扣減,訂單生成異步化,異?;貪L機制
  1. 性能與可擴展性
  • 水平擴展、緩存、異步隊列、讀寫分離等多策略結合
  • 實現高并發、高可用、高一致性

技術亮點

  • 靈活選擇鎖策略,適配不同并發場景
  • 異步隊列和緩存結合,削峰填谷
  • 全流程異常處理,確保數據一致性
  • 模塊化設計,支持水平擴展與微服務拆分

通過本套方案,即使在百萬級請求并發下,也能有效避免超賣,同時保持系統響應速度和用戶體驗。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2020-10-05 22:05:10

Linux系統編程時序競態

2024-09-23 05:10:00

微服務CORSSpringBoot

2023-12-29 09:28:25

Java編程

2020-08-28 08:55:32

商城系統高并發

2025-05-23 10:00:00

網絡交換機STP

2023-03-14 08:01:53

Go開發原子操作

2021-08-02 13:08:56

高并發服務

2021-04-08 15:07:51

低代碼開發平臺

2020-10-22 08:21:37

樂觀鎖、悲觀鎖和MVC

2023-06-27 13:46:00

前端競態promise

2020-10-27 10:35:38

優化代碼項目

2020-08-19 11:02:39

系統ssh登錄

2017-06-12 11:09:56

計數架構數據庫

2022-11-11 15:49:09

前端JavaScript開發

2018-05-04 16:36:12

Tech Neo重新定位開發者社區

2011-06-28 10:41:50

DBA

2022-11-11 10:22:54

前端Promise

2021-10-26 07:25:30

技術優化邏輯

2023-10-25 16:36:06

數字化轉型IT系統
點贊
收藏

51CTO技術棧公眾號

丝袜美腿亚洲综合| 成年网站在线免费观看| 在线播放av网址| 国产在线观看黄| 欧美videos粗暴| 成人黄色大片在线观看| 中文字幕亚洲欧美日韩2019| 国产乱码精品一区二区三区不卡| 91成人在线免费视频| 欧美78videosex性欧美| 久久精品国产色蜜蜜麻豆| 日韩高清欧美高清| 可以看毛片的网址| 亚洲乱熟女一区二区| 91精品一区二区三区综合在线爱| 91国偷自产一区二区三区观看| dy888夜精品国产专区| 欧美a在线播放| 另类图片综合电影| 91在线观看高清| 国内精品模特av私拍在线观看 | 午夜激情一区| 欧美日韩和欧美的一区二区| 日本一区二区久久精品| 成年人av网站| 国产一区二区三区电影在线观看| 精品国产91久久久久久老师| 国产精品三区www17con| 在线免费观看视频网站| 欧美日韩在线二区| 91国偷自产一区二区三区观看| 日韩免费在线观看av| 亚洲国产一二三区| 亚洲美女黄色| 日韩一区二区三区视频在线 | 色欲av永久无码精品无码蜜桃| 欧美日韩亚洲一区三区| 日韩一区二区麻豆国产| 黄色成人免费看| 色网站免费在线观看| 韩国精品免费视频| 久久高清视频免费| 国产高潮视频在线观看| 日本蜜桃在线观看视频| 久久久久久麻豆| 国产精品免费久久久久影院| 亚洲国产精品一区二区久久hs| 亚洲天堂网站| 亚洲午夜三级在线| 久久综合九九| 亚洲一区二区激情| 久久精品一区| 久久中文精品视频| 91精品又粗又猛又爽| 成人黄色91| 福利精品视频在线| 亚洲高清在线播放| 成人av一区二区三区在线观看 | 欧美黄网站在线观看| 涩涩av在线| 色综合久久久久网| 亚洲一区二区在线观| 99久久精品无免国产免费| 激情久久中文字幕| 色视频www在线播放国产成人| 久久精品无码一区二区三区毛片| 小h片在线观看| 国产精品成人一区二区三区夜夜夜| 999精品视频一区二区三区| 在线观看国产亚洲| 亚洲a一区二区三区| 色偷偷av亚洲男人的天堂| 亚洲女同二女同志奶水| 免费观看成人www动漫视频| 欧美午夜影院一区| 欧美大片在线播放| 秋霞午夜在线观看| 久久欧美中文字幕| 成人av免费看| 狠狠躁日日躁夜夜躁av| 99久久免费精品| 成人信息集中地欧美| 一级成人黄色片| 欧美一区二区三区另类| 欧美日本亚洲视频| 91导航在线观看| 国产精品精品| 国产午夜精品全部视频播放| 欧美熟妇精品一区二区| 欧美v亚洲v综合v国产v仙踪林| 欧美精品99久久久**| 一本久道综合色婷婷五月| free性护士videos欧美| 亚洲视频一区在线| 亚洲欧洲日韩精品| 二区三区在线观看| 国产精品福利影院| 日韩激情视频一区二区| av综合电影网站| 欧美日韩第一区日日骚| 国产国语老龄妇女a片| 国产一区二区三区四区二区| 久久亚洲国产精品| 亚洲永久精品在线观看| 亚洲精品美女91| 国产精品第1页| 无码人妻丰满熟妇奶水区码| 韩国理伦片一区二区三区在线播放| 国产精品区一区二区三含羞草| 国产经典自拍视频在线观看| www国产精品av| 久久国产精品亚洲va麻豆| 成人午夜视频一区二区播放| 久久久五月婷婷| 成年在线观看视频| 主播国产精品| 夜夜嗨av一区二区三区四季av| 懂色av粉嫩av蜜臀av| 欧美一区二区三区| 韩曰欧美视频免费观看| 美女被艹视频网站| 欧美日韩伦理| 欧美中文在线字幕| 波多野结衣人妻| 肉色丝袜一区二区| 国产精品av电影| 中文字幕免费高清在线观看| 久久国产精品色| 成人中文字幕在线观看| 91精品国产乱码久久久| 精品一二线国产| 欧美动漫一区二区| 风间由美一区| 精品国产精品自拍| 日本黄色大片在线观看| 天天综合网网欲色| 国产精品高清网站| 九九在线视频| 欧美视频在线看| 欧美伦理视频在线观看| 欧美a一级片| 亚洲午夜色婷婷在线| 免费日韩一级片| 日韩国产欧美三级| 免费成人深夜夜行视频| а√在线中文在线新版| 色美美综合视频| 精品人妻一区二区三区日产乱码卜| 特黄特色欧美大片| 中文字幕精品网| 无码人妻一区二区三区免费| 91美女片黄在线观看91美女| 男人天堂av片| 9l亚洲国产成人精品一区二三| 精品视频久久久久久| 久久精品三级视频| 视频一区二区中文字幕| 欧美日韩综合精品| 色婷婷综合久久久中字幕精品久久 | 97超碰资源站在线观看| 91精品一区二区三区久久久久久 | 国产午夜精品一区理论片飘花| 日韩免费视频一区二区视频在线观看| 成人精品小蝌蚪| 欧洲视频一区二区三区| 欧美黑人一区| 日韩欧美在线影院| 久草免费新视频| 蜜桃视频免费观看一区| 国产麻豆乱码精品一区二区三区| 久久av色综合| 精品无人区乱码1区2区3区在线 | 夜夜嗨网站十八久久| 精品婷婷色一区二区三区蜜桃| 风间由美一区| 在线综合视频播放| 青娱乐国产在线视频| 成人午夜电影网站| 97视频在线免费播放| 五月天婷婷导航| 新版的欧美在线视频| 亚洲成人黄色在线| 黄色a级三级三级三级| 亚洲第一天堂| 国产精品一区视频网站| 手机在线理论片| 亚洲天堂成人在线视频| 久久国产在线观看| 91视频一区二区三区| 香港日本韩国三级网站| 日韩在线麻豆| 国产精品久久久久久亚洲影视| 黄av在线免费观看| 在线免费亚洲电影| 午夜一区二区三区免费| 麻豆精品蜜桃视频网站| 久久久久99精品成人片| 欧美限制电影| 久久久久亚洲精品国产| 免费在线黄色影片| 亚洲福利国产精品| 精产国品一区二区三区| 亚洲综合五月| 91精品久久久久久久久不口人| 精品视频一二三| 91麻豆精品国产91久久久资源速度 | 亚洲国产精品午夜在线观看| 卡一卡二国产精品| 九色自拍视频在线观看| 盗摄牛牛av影视一区二区| 久久国产精品亚洲| 欧美日韩影视| 日韩女优电影在线观看| 九九热国产在线| 国产亚洲制服色| 亚洲视频在线观看一区二区三区| 欧美ab在线视频| 日韩影院一区| 黄色成人在线观看网站| 4438全国亚洲精品在线观看视频| 人妻少妇一区二区三区| 天天av天天翘天天综合网 | 国产欧美一区| 国产另类自拍| 午夜日韩影院| 久久久久久久爱| 好吊色一区二区三区| 欧美日韩精品一区二区三区四区 | 手机av免费在线| 精品99999| 影音先锋亚洲天堂| 亚洲一区二区在线播放相泽| 91香蕉视频网| 国产农村妇女毛片精品久久麻豆| 波多结衣在线观看| 翔田千里一区二区| 视频一区二区三区免费观看| 亚洲视频资源| 国产欧美精品在线播放| 色综合999| 欧美成aaa人片免费看| 三区四区电影在线观看| 在线观看久久久久久| www.久久久久久| 欧美精品777| 国产精品羞羞答答在线| 婷婷国产在线综合| 国产精品19乱码一区二区三区| 91农村精品一区二区在线| 亚洲成年人av| 不卡av免费在线观看| 小毛片在线观看| 日本不卡一二三区黄网| 在线码字幕一区| 欧美日韩看看2015永久免费 | 亚洲人成小说网站色在线| 亚洲欧洲综合网| 亚洲色图清纯唯美| 手机在线免费看片| 91伊人久久大香线蕉| 精品国产av色一区二区深夜久久 | 无码国产精品高潮久久99| 日本高清免费不卡视频| 无码人妻精品一区二区三区9厂| 色综合久久精品| 亚洲色成人www永久网站| 欧美优质美女网站| 亚洲专区第一页| 日韩欧美国产综合一区 | 中文字幕一区二区三区有限公司 | 精品国产一区二区三区久久狼5月| av中文字幕第一页| 91黄色免费网站| 最近中文字幕在线视频| 精品久久久久久久中文字幕| 成人免费区一区二区三区| 色综合激情五月| 一区二区三区精彩视频| 精品日韩成人av| 国产又爽又黄又嫩又猛又粗| 日韩久久精品一区| 四虎永久在线精品免费网址| 亚洲午夜激情免费视频| caopo在线| 91高清视频免费观看| 伊人电影在线观看| 97av在线播放| yy6080久久伦理一区二区| 日本不卡视频在线播放| 成人av集中营| 国产精品xxxx| 日韩精品一区国产| 久久婷婷开心| 久久一区二区三区电影| 日韩三级在线播放| 91精品观看| 免费看一级大黄情大片| 影音先锋久久久| 99视频在线免费| 国产一区二区三区视频在线播放| 亚洲最大成人在线观看| 国产成人午夜精品5599| 小早川怜子一区二区三区| 蜜臀久久99精品久久久久久9| 国产精品熟女一区二区不卡| 久久亚洲精品小早川怜子| 疯狂撞击丝袜人妻| 国产精品电影院| 国产五月天婷婷| 欧美日本免费一区二区三区| 天堂√在线中文官网在线| 亚洲精品www久久久| 色窝窝无码一区二区三区成人网站 | 欧美wwwww| 国产午夜大地久久| 精品亚洲国产成人av制服丝袜| 五级黄高潮片90分钟视频| 成人午夜伦理影院| 少妇视频一区二区| 色综合视频在线观看| 成人免费观看在线视频| 久久天天躁狠狠躁夜夜躁2014| 国产免费不卡| 国产日产精品一区二区三区四区 | 久久久噜噜噜| 色哟哟无码精品一区二区三区| 国产精品国产a| 波多野结衣av无码| 国产婷婷成人久久av免费高清| 图片区小说区亚洲| 91在线观看免费高清完整版在线观看| 欧美美女在线| 亚洲国产婷婷香蕉久久久久久99| 伊人久久大香线蕉综合热线| 日本一本在线视频| 日韩美女视频19| 国产午夜福利精品| 欧美mv和日韩mv的网站| 国产成人无吗| 成人欧美一区二区三区在线湿哒哒| 一本色道久久综合狠狠躁的番外| 亚洲精品一品区二品区三品区| 国产农村妇女精品一二区| 免费一级特黄录像| 久久久午夜精品理论片中文字幕| 久久露脸国语精品国产91| 精品国内片67194| 欧美家庭影院| 国产精品久久久久久久久久久久午夜片| 中文字幕一区二区三区久久网站 | 永久免费网站视频在线观看| 国产精品多人| 精品久久久久久久免费人妻| 99re这里只有精品视频首页| 日韩在线观看第一页| 日韩风俗一区 二区| 成年人国产在线观看| 国产精品一久久香蕉国产线看观看| 免费黄色成人| www.欧美日本| 国产精品妹子av| 免费日韩一级片| 精品爽片免费看久久| 国产一区二区三区影视| 成人永久免费| 影音先锋中文字幕一区二区| 白嫩情侣偷拍呻吟刺激| 高跟丝袜一区二区三区| 国产区在线视频| 国产中文字幕日韩| 女主播福利一区| av电影在线播放| 日韩欧美成人区| 91福利在线视频| 欧美又大又硬又粗bbbbb| 国产成人调教视频在线观看| 黄色一级免费大片| 国产精品国产a| 欧美视频在线观看一区二区三区| 68精品久久久久久欧美| 精品国产日韩欧美| 一级做a免费视频| 国产欧美精品区一区二区三区| 亚洲天堂网在线观看视频| 欧美精品做受xxx性少妇| 狠狠一区二区三区| 成人在线免费高清视频| 不卡视频一二三| 日本三级一区二区三区| 美日韩精品免费视频| 日韩理论电影中文字幕| 激情五月俺来也| 欧美极品xxx| 国产伦精品一区二区三区视频痴汉| 欧美国产日韩二区| 免费一级欧美在线大片| 午夜啪啪免费视频| 免费xxxx性欧美18vr| 精品无码人妻一区二区三区品 | 精品国产999久久久免费|