精品欧美一区二区三区在线观看 _久久久久国色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网址| 爱福利在线视频| 国产丝袜欧美中文另类| 91中文精品字幕在线视频| 国产精品成人国产乱| 欧美日韩中文一区二区| 日韩午夜av一区| 韩国中文字幕av| gogo高清午夜人体在线| 国产网站一区二区| 国产91社区| 亚洲一区二区影视| 久久九九99| 色综合天天综合网国产成人网| 国产中年熟女高潮大集合| 亚洲专区**| 欧美日韩一区三区| 日韩欧美亚洲天堂| 超碰个人在线| 中文字幕精品—区二区四季| 国产自产精品| 欧美日韩一级在线 | 欧美另类视频| 亚洲男人7777| 香蕉视频污视频| 欧美成人xxxx| 91激情在线视频| 精品人妻少妇一区二区| h视频在线免费观看| 国产日本亚洲高清| 久久久精品动漫| 俄罗斯嫩小性bbwbbw| 激情综合色综合久久综合| 国产97在线播放| 日本最新中文字幕| 欧美日韩1080p| 精品中文字幕在线| 日韩欧美综合视频| 久久精品一区二区不卡| 中文字幕在线观看亚洲| 亚洲ⅴ国产v天堂a无码二区| 国产探花一区在线观看| 日韩久久精品电影| 色天使在线视频| 精品国产一区二区三区不卡蜜臂| 日韩视频一区在线观看| 国模大尺度视频| 精品一区视频| 日韩一二在线观看| 美女日批在线观看| 国产一区二区三区亚洲| 精品1区2区在线观看| 麻豆短视频在线观看| 一区二区三区亚洲变态调教大结局| 3d动漫精品啪啪1区2区免费| 三区视频在线观看| 精品一区二区三区视频在线播放| 欧美一区二区三区视频免费播放| ass极品水嫩小美女ass| 香蕉免费一区二区三区在线观看 | 欧美高清性猛交| 亚洲国产精品久| 欧美久久视频| 韩国视频理论视频久久| 毛片在线免费视频| 玖玖精品视频| 国产精品偷伦一区二区| 国产又大又长又粗| 国产成人h网站| 国产欧美日本在线| 巨骚激情综合| 国产精品第五页| 麻豆一区二区三区在线观看| 日本欧美电影在线观看| 激情成人中文字幕| 国产九九在线视频| 久久国产精品美女| 亚洲激情在线观看视频免费| 自拍偷拍中文字幕| 国产精品久久久久9999赢消| 久久91亚洲人成电影网站| 亚洲另类欧美日韩| 日韩高清在线电影| 91久色国产| 黄色国产在线| 亚洲色图在线播放| 国产男女免费视频| 99欧美精品| 日韩欧美国产成人一区二区| 亚洲av片不卡无码久久| 欧美电影《睫毛膏》| 欧美国产日本高清在线| 在线永久看片免费的视频| 精彩视频一区二区| 久久久久久久久一区二区| 素人av在线| 精品国产成人在线| 中文字幕精品一区二区三区在线| 国产精品chinese在线观看| 一区二区三区无码高清视频| 免费在线观看av网址| 视频一区视频二区在线观看| 97se亚洲综合在线| av男人的天堂在线| 午夜一区二区三区视频| 超碰超碰在线观看| 偷拍自拍一区| 免费av在线一区| 波多野结衣一二区| 成人av资源网站| 一区二区在线高清视频| 中国字幕a在线看韩国电影| 日韩一区二区在线观看| 成人黄色免费网址| 亚洲高清免费| 亚洲一区精品电影| 粉嫩一区二区三区国产精品| 午夜婷婷国产麻豆精品| 一级片免费在线观看视频| heyzo久久| 91av在线免费观看视频| 99精品视频免费看| 中文字幕一区二区三区在线观看| av片中文字幕| 欧美wwwwww| 久久久久久久爱| 精品人妻无码一区二区色欲产成人 | 亚洲最大天堂网| 精品国产一区二区三区久久久蜜臀 | 中国美女乱淫免费看视频| 国模 一区 二区 三区| 91精品国产综合久久香蕉的用户体验 | 国产美女网站视频| 日韩精品三区四区| 日本在线观看一区| 日本久久免费| 亚洲视频免费一区| 欧美超碰在线观看| 久久精品视频免费观看| 久久精品免费一区二区| 日韩成人av在线资源| 午夜精品久久久久久99热软件| 国产免费一区二区三区最新不卡| 中文字幕日韩av资源站| jizz18女人| 99精品视频在线观看播放| 国产精品一区久久| 在线看av的网址| 欧美日韩在线观看一区二区| 国产无遮挡在线观看| 青青草97国产精品免费观看无弹窗版| 日韩av电影免费观看| 亚洲www免费| 国产亚洲精品va在线观看| 久久久久在线视频| 国产欧美日韩三区| 日本不卡一区二区在线观看| 亚洲欧美综合久久久| av激情久久| 99re6在线精品视频免费播放| 亚洲成人在线网| 国产专区第一页| 久久精品日产第一区二区三区高清版| wwwwww.色| 亚洲视频在线免费| 国产精品国产三级国产专区53 | 一区二区三区不卡视频在线观看 | 国产美女www爽爽爽| 国产精品五月天| 久久精品国产99久久99久久久| 欧美99久久| 国产三级精品在线不卡| 快播电影网址老女人久久| 日韩中文字幕精品视频| www.国产三级| 日韩欧美在线中文字幕| 色www亚洲国产阿娇yao| 国产精品一区三区| 波多野结衣乳巨码无在线| 国产伦精品一区二区三区视频| 国产日韩欧美黄色| 888av在线视频| 国产午夜精品全部视频播放| 国产精品久久综合青草亚洲AV| 亚洲综合免费观看高清完整版在线| 日韩精品一区二区三区高清免费| 日韩vs国产vs欧美| 精品人妻人人做人人爽| 九九久久婷婷| 91久久国产综合久久蜜月精品| 最新日韩精品| 久久九九免费视频| 天天干天天色天天| 3d成人h动漫网站入口| 中文字幕在线观看视频网站| 最新欧美精品一区二区三区| 成人免费毛片日本片视频| 久久se精品一区二区| 青青青免费在线| 99精品在线观看| 久久av免费观看| 老司机亚洲精品一区二区| 奇米4444一区二区三区| 亚洲www色| 中国人与牲禽动交精品| 婷婷色在线观看| 欧美精品亚洲一区二区在线播放| www.国产一区二区| 午夜婷婷国产麻豆精品| 91高清免费看| 国产精品久久久久9999吃药| ass精品国模裸体欣赏pics| 国产精品正在播放| 超碰在线播放91| 免费日韩av片| 精品国产一区二区三区无码| 欧美第十八页| 亚洲电影免费| 一本久久青青| 国产精品区一区二区三含羞草| 欧美激情福利| 国产成人啪精品视频免费网| 波多野结衣中文在线| 另类少妇人与禽zozz0性伦| av在线播放网站| 日韩精品中文字幕久久臀| 欧美熟妇交换久久久久久分类| 日韩一卡二卡三卡四卡| 99久久精品日本一区二区免费| 欧美色国产精品| 国产午夜无码视频在线观看 | 免费毛片网站在线观看| 欧美日一区二区三区在线观看国产免| 中文字幕av日韩精品| 久久国产电影| 亚洲免费不卡| 久久大综合网| 影音先锋在线亚洲| 久久蜜桃av| 一区二区日本伦理| 天天射天天综合网| 在线观看免费91| 国产精品久久久久久久久妇女| 四虎一区二区| 999久久久91| 二级片在线观看| 欧美一区不卡| 国产自产在线视频| 在线亚洲激情| 久章草在线视频| 中文字幕在线看视频国产欧美在线看完整 | 日本猛少妇色xxxxx免费网站| 久久久久青草大香线综合精品| 国产美女视频免费观看下载软件| 成人自拍视频在线观看| 丰满岳乱妇一区二区| av午夜精品一区二区三区| 最近中文字幕无免费| 久久久久久一二三区| 亚洲精品国产熟女久久久| 欧美国产乱子伦| 日本精品人妻无码77777| 亚洲精品乱码久久久久久黑人| 妺妺窝人体色www聚色窝仙踪| 亚洲在线免费播放| 久久久国产精品成人免费| 欧美性猛交xxxx黑人猛交| 涩涩视频在线观看| 日韩一区二区免费电影| 国产自产一区二区| 亚洲欧美激情精品一区二区| av在线第一页| 欧美大片网站在线观看 | 亚洲成人免费电影| 亚洲图片在线视频| 欧美性猛交xxxx乱大交退制版| 国产精品久久久久久久免费看| 精品国内二区三区| 国产视频在线看| 久久成人这里只有精品| av资源在线| 国产精品国产亚洲伊人久久| www 久久久| 精品国产一区二区三区四区精华| 国产在线日韩精品| 日韩不卡视频一区二区| 伊人伊成久久人综合网小说| 少妇一级淫片日本| 制服丝袜中文字幕亚洲| 神马一区二区三区| 最新日韩中文字幕| 91福利在线免费| 国产精品国产自产拍高清av水多| 精品视频在线观看免费观看| 欧美精品中文字幕一区二区| 亚洲女同另类| 日韩精品免费播放| 高清在线不卡av| 日本人亚洲人jjzzjjz| 亚洲成人一区二区| 国产精品久久久久久久成人午夜| 日韩精品在线私人| 青青在线视频| 国产精品极品美女在线观看免费| 超碰97成人| 在线视频不卡一区二区三区| 亚洲制服少妇| 欧美一级片在线免费观看| 亚洲国产岛国毛片在线| 久久夜色精品亚洲| 91精品国产乱码久久蜜臀| 久久手机免费观看| 欧美精品久久久久久久| 欧美韩国日本| 日韩高清av| 亚洲一区二区毛片| 亚洲啪av永久无码精品放毛片| 中文字幕日韩精品一区| 成人毛片一区二区三区| 亚洲国产精品嫩草影院久久| 中日韩高清电影网| 国产欧美一区二区三区久久人妖| 亚洲影院天堂中文av色| 日本a视频在线观看| 国产xxx精品视频大全| 国产探花在线视频| 欧美日韩免费在线视频| 国产中文字幕在线看| 欧美在线视频免费观看| 国产精品99久久免费观看| 999一区二区三区| 国产一区二区日韩精品| 日韩精品一区二区亚洲av性色| 在线免费观看视频一区| 久草在线青青草| 日本精品久久中文字幕佐佐木| 欧美日韩导航| 久久久久久久午夜| 91在线视频在线| 日韩黄色a级片| 亚洲国产日韩精品在线| aa级大片免费在线观看| 激情久久av| 欧美亚洲三区| 亚洲av无码一区二区三区人| 一本色道久久综合亚洲精品按摩| 色网站在线免费观看| 日韩男女性生活视频| 欧美精品尤物在线观看| 亚洲天堂2018av| 亚洲欧美一区二区三区极速播放 | 欧美日韩高清丝袜| 在线视频亚洲一区| 91caoporm在线视频| 成人自拍性视频| 欧美精品国产| 91黄色免费视频| 在线观看av一区| 婷婷视频在线| 粉嫩av一区二区三区免费观看| 亚洲成人原创| 国产肥白大熟妇bbbb视频| 欧美三级韩国三级日本一级| 免费大片黄在线观看视频网站| 91亚洲精品久久久久久久久久久久| 亚洲欧美一区在线| 精品无码国产一区二区三区51安| 一本高清dvd不卡在线观看| av在线二区| 俄罗斯精品一区二区| 亚洲视频播放| 久久免费手机视频| 欧美不卡一区二区三区四区| 国产在线精彩视频| 日日夜夜精品网站| 国产裸体歌舞团一区二区| 日本一级淫片免费放| 亚洲欧美日韩精品久久奇米色影视| 成人在线免费av| 成人午夜视频免费观看| 91视频精品在这里| 在线中文字幕网站| 欧美极品欧美精品欧美视频 | 国产污视频在线看| 国产亚洲精品久久久久动| 国产精品久久久久久久久久久久久久久 | 国产精品99蜜臀久久不卡二区| 午夜影院欧美| 水蜜桃av无码| 884aa四虎影成人精品一区| 国产社区精品视频| 国产女人18毛片| 久久蜜臀精品av| 精品人妻一区二区三区四区不卡 |