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

面試官:如何設計一個十億級的 URL 短鏈系統?

開發 后端
在后端面試中,系統設計題是檢驗一位工程師架構思維和技術深度的試金石。其中,“設計一個短鏈系統”可以說是最高頻的題目之一。

在后端面試中,系統設計題是檢驗一位工程師架構思維和技術深度的試金石。其中,“設計一個短鏈系統”可以說是最高頻的題目之一。

這個問題看似簡單——不就是把長網址變短嗎?但如果你真的這么認為,那可能就危險了。一個看似基礎的功能背后,隱藏著海量數據存儲、高并發處理、服務高可用等一系列復雜的工程挑戰。面試官拋出這個問題,正是想看看你如何抽絲剝繭,從一個簡單的需求出發,逐步構建出一個穩健、高效、可擴展的十億級系統。

今天,秀才就帶大家來模擬一次真實的面試過程,一步步剖析如何完美地回答這個問題,讓你在面試中脫穎而出。

一、什么是短鏈系統?

首先,我們得確保和面試官在同一個“頻道”上。短鏈系統,顧名思義,就是將一個冗長的URL(例如一篇新聞的鏈接)轉換成一個非常短的URL。當用戶訪問這個短鏈接時,系統會自動將他重定向到原始的長鏈接地址。

這個過程的核心在于“生成”和“重定向”。

上圖清晰地展示了整個交互流程:

  • 生成:應用程序將原始長URL發送給短鏈系統。
  • 返回:短鏈系統生成一個唯一的短URL,并返回給應用程序。
  • 訪問:用戶點擊短URL。
  • 重定向:瀏覽器訪問短鏈系統,系統查詢到原始長URL后,返回一個HTTP 302重定向響應,瀏覽器隨即訪問原始的URL目標服務器。

二、為什么我們需要URL短鏈系統?

明確了“是什么”,接下來就要理解“為什么”。在面試中,能清晰地闡述一個技術的業務價值,是體現你商業思考和產品思維的加分項。

URL短鏈系統的價值主要體現在以下幾個方面:

  • 美觀與便捷:在社交媒體(如微博)、短信、二維碼等對字符長度有限制的場景下,短鏈接是剛需。它更易于分享、打印和口頭傳播,用戶也更不容易輸錯。
  • 數據追蹤與分析:這是短鏈接一個非常核心的商業價值。通過在短鏈接的重定向上增加統計邏輯,我們可以追蹤到鏈接的點擊次數、點擊來源、用戶地域分布、設備信息等,為運營決策和廣告效果衡量提供精準的數據支持。
  • 功能擴展:短鏈接可以作為一層中間代理,在這層代理上我們可以實現很多高級功能,比如鏈接的有效期控制、訪問密碼保護、設備跳轉控制(移動端和PC端訪問跳轉到不同頁面)等。
  • 隱藏原始鏈接:在某些推廣場景下,可以隱藏真實的、帶有復雜參數的原始URL。

比如,一個很長的商品鏈接:https://www.designsystem/shyfeawou/csline/ccosifhyew/online-course/clare-system-design-interview

可以被縮短為:https://tinyurl.com/vzxt58la

長度縮短了近三分之二,無論是在哪個場景下使用,都顯得清爽利落。

三、面試實戰指南

好了,背景知識鋪墊完畢,現在正式進入面試環節。系統設計題的回答,切忌一上來就拋出最終方案。一個優秀的回答過程,應該像一次與面試官共同探索的旅程,充滿互動和逐步深入的思考。

1. 需求分析:一切設計的起點

面試官:“我們來聊聊系統設計吧。如果要你設計一個高性能的短鏈系統,你會怎么入手?”

這是一個開放性問題,千萬不要直接回答:“我會用Redis、用哈希算法……”。正確的起手式是確認需求。這能體現你嚴謹的工程素養。

你可以這樣回應:

“在開始設計之前,我想先和您明確一下系統的具體需求和目標范圍,這樣我們的討論會更有針對性。比如,我們需要支持哪些核心功能?對系統的性能和可用性有什么樣的要求?”

通過這樣的提問,你就把問題拋給了面試官,也展示了你的專業性。并且更重要的是,可以從面試官那里確認出這個系統的一個大概的需求范圍。假設經過溝通,你們明確了以下需求:

(1) 功能性需求:

  • 生成短鏈:輸入一個長URL,系統能生成一個唯一的、更短的別名(短鏈接)。
  • 支持自定義:用戶可以選擇性地為他們的URL指定一個有意義的自定義短鏈接。
  • 重定向:訪問短鏈接時,系統必須能準確、快速地重定向到原始的長鏈接。
  • 過期機制:鏈接可以設置過期時間,過期后失效。

(2) 非功能性需求:

  • 高可用:系統必須7x24小時可用。因為一旦服務宕機,所有短鏈接都將失效,這在很多場景下是災難性的。
  • 高性能:重定向過程必須延遲極低,用戶幾乎無感知。
  • 唯一且不可預測:生成的短鏈接必須是唯一的,并且不能被輕易地猜到規律,以防被惡意遍歷。

(3) 擴展性需求:

  • 數據分析:需要支持統計短鏈接的訪問數據。
  • 開放API:系統應提供REST API,方便其他服務接入。

2. 容量預估:用數據指導架構

需求明確了,下一步就要進行一個容量預估了。對于后端設計者而言,必須要做一個容量的估算,這樣才方便我們選定合適的方案。

“需求很清晰了。接下來,我想做一個簡單的容量預估,這有助于我們判斷系統的量級,從而選擇合適的技術方案。”

這是展示你架構設計能力的關鍵一步。沒有數據支撐的設計都是空中樓閣。

(1) 流量估算:假設我們是一個快速發展的業務,預計每月新增5億個短鏈接。短鏈系統的讀寫比通常非常懸殊,讀取(重定向)遠多于寫入(生成)。我們假設讀寫比例為 100:1。

  • 寫入QPS:每月5億次寫入,那么每秒的寫入請求大約是 5億 / (30天 * 24小時 * 3600秒) ≈ 200次/秒。
  • 讀取QPS:根據100:1的讀寫比,讀取請求大約是 200 * 100 = 2萬次/秒。這個并發量已經不低了。

(2) 存儲估算:假設每個短鏈接數據(包括長URL、短URL、創建時間、用戶ID等)我們存儲5年。

  • 總記錄數:5億/月 * 12個月/年 * 5年 = 300億。這是一個非常龐大的數字。
  • 單條記錄大小:我們粗略估計每條記錄為500字節。
  • 總存儲空間:300億 * 500字節 ≈ 15TB。這個存儲需求對于單機數據庫來說是無法承受的。

(3) 帶寬估算:

  • 入口帶寬(寫):200次/秒 * 500字節/次 ≈ 100 KB/s。
  • 出口帶寬(讀):2萬次/秒 * 500字節/次 ≈ 10 MB/s。

(4) 緩存估算:為了提升讀取性能,緩存是必不可少的。根據二八原則,80%的訪問量集中在20%的熱點鏈接上。

  • 每日總請求數:2萬次/秒 * 3600秒/小時 * 24小時/天 ≈ 17億次。
  • 緩存目標:我們需要緩存這17億次請求中的20%。
  • 所需內存:17億 * 20% * 500字節 ≈ 170GB。

將這些估算結果匯總成一個表格,展示給面試官,會顯得非常專業:

指標

估算值

新增URL(寫QPS)

~200/s

URL重定向(讀QPS)

~20K/s

入口帶寬

100KB/s

出口帶寬

10MB/s

5年總存儲

15TB

緩存所需內存

170GB

通過估算,我們可以看到,這個系統面臨的是高并發讀取和海量數據存儲兩大挑戰。這將是我們后續架構設計的核心出發點。

3. 系統接口定義(API Design)

在宏觀設計之前,先定義微觀的接口,是一種自底向上的優秀設計習慣。這有助于我們厘清系統的邊界和能力。

接下來我們可以設計一套RESTful API來暴露服務能力。主要包括以下幾個接口:

(1) 創建短鏈 API

請求路由:GET /{shortened_url}

請求參數:

參數

釋義

original_url

需要縮短的原始長網址(字符串,必填)

custom_alias

用戶希望指定的短網址自定義別名(字符串,可選)

expiration_date

短網址應過期的日期和時間(時間戳,可選)

user_id

創建縮短 URL 的用戶 ID(如果支持用戶賬戶功能)(字符串,可選)

響應參數:

參數

釋義

shortened_url

由服務生成的縮短后 URL(字符串)

creation_date

URL 被縮短時的日期和時間(時間戳)

expiration_date

短網址的過期日期(時間戳,如提供)

(2) 重定向 API

將用戶從短鏈接重定向至原始長網址。

請求路由:GET /{shortened_url}

請求參數:

參數

釋義

shortened_url

需要解析為原始網址的短鏈接(字符串,必填)

響應:重定向至 original_url。

(3) 數據分析接口

提供短鏈接的詳細分析數據,包括點擊次數和用戶人口統計信息。

請求路由:GET /analytics/{shortened_url}

請求參數:

參數

釋義

shortened_url

需要獲取分析數據的短鏈接(字符串,必填)

start_date

用于篩選分析數據的開始日期(時間戳,可選)

end_date

用于篩選分析數據的結束日期(時間戳,可選)

響應參數:

參數

釋義

click_count

該短鏈接被點擊的總次數(整數)

unique_clicks

點擊該短鏈接的唯一用戶數(整數)

referring_sites

為該短鏈接帶來流量的來源網站(列表)

location_data

點擊該網址的用戶地理分布(地圖)

device_data

點擊 URL 所使用的設備(移動設備、桌面設備等)的細分(映射)

(4) 網址管理 API

請求路由: GET /user/urls

請求參數:

參數

釋義

user_id

請求其短網址的用戶 ID(字符串, 必需)

page

分頁結果的頁碼(整數, 可選)

page_size

每頁的結果數量(整數,可選)

響應參數:

參數

釋義

urls

用戶縮短的 URL 列表,包括創建日期和過期日期等元數據(列表)

(5) 刪除短鏈接 API

請求路由: DELETE /{shortened_url}

請求參數:

參數

釋義

shortened_url

需要刪除的短鏈接(字符串,必填)

user_id

請求刪除的用戶 ID(字符串,必填)

響應參數:

參數

釋義

status

刪除確認信息或操作失敗時的錯誤提示(字符串)

面試官:“接口設計得不錯。但有個問題,如果惡意用戶瘋狂調用創建接口,把我們生成的短碼耗盡了怎么辦?”。這是一個很好的追問,考察你對系統安全性的思考。

“如果不加限制,面對惡意調用,短url肯定很快會被耗盡。所以我們需要加入防濫用機制。核心手段是API速率限制。我們可以基于用戶ID或IP地址進行限流,比如,限制每個IP每分鐘只能創建10個短鏈接。對于未登錄的匿名用戶,這個限制可以更嚴格。”

4. 數據庫設計

基于前面的需求和接口,我們可以設計出數據庫的表結構。

“考慮到300億的記錄量和高并發讀取的需求,關系型數據庫可能不是最佳選擇。因為分庫分表會非常復雜,而且我們數據之間的關系很簡單。我更傾向于使用NoSQL數據庫,比如AWS的DynamoDB、阿里云的Table Store (OTS) 或者開源的Riak,它們的水平擴展能力更強。”

我們可以設計以下幾張表(以NoSQL的寬表模型為例):

(1) URL表 (url_mapping)

  • Hash (Partition Key): 短鏈碼,例如 vzet59pa。這是我們的主鍵,用于快速查找。
  • OriginalURL: 原始長鏈接。
  • CreationDate: 創建時間。
  • ExpirationDate: 過期時間。
  • UserID: 創建者ID。

(2) 用戶表 (users)

  • UserID (Partition Key): 用戶ID。
  • Name, Email, PasswordHash, ...

(3) 分析表 (analytics)

  • AnalyticsID (Partition Key): 唯一分析記錄ID。
  • URLHash: 關聯的短鏈碼。
  • ClickTimestamp: 點擊時間。
  • ReferringSite: 來源網站。
  • Location: 地理位置。

5. 核心算法:如何生成短鏈碼?

面試官:“數據庫選型和表結構設計都比較合理。現在我們來聊聊最核心的部分,這個短鏈碼(比如 vzet59pa)到底該怎么生成呢?”

這是整個設計的靈魂。你可以提出幾種方案,并分析優劣,展示你的技術廣度和深度。

(1) 方案一:哈希編碼

最直接的想法是對原始長URL進行哈希,然后取一部分作為短鏈碼。

“一個直接的思路是對原始URL進行哈希,比如用MD5生成一個128位的哈希值,然后通過Base64編碼將其轉換為字符串。編碼方式有很多種,比如base36 (a-z, 0-9) 或 base62 (A-Z, a-z, 0-9),如果加上 + 和 / 就是標準的Base64編碼。”

標準的Base64編碼表如下:

在使用標準Base64時,我們需要考慮一個問題:短鏈碼的長度應該設為多少?6位、8位還是10位?

  • 使用Base64編碼,一個6位長度的短碼,可以產生 64^6 ≈ 687億 個可能的組合。
  • 使用Base64編碼,一個8位長度的短碼,可以產生 64^8 ≈ 281萬億 個可能的組合。

“假設6位長度的短碼(687億)已經足夠滿足我們的系統需求。如果我們使用MD5算法,它會生成一個128位的哈希值,經過Base64編碼后會得到一個超過21個字符的字符串。我們只取前6位或8位作為短碼,這可能會導致沖突。為了解決這個問題,我們可以采取一些策略,比如當發現沖突時,換取哈希值的其他部分,或者對原始URL加鹽后重新哈希。”

“不過,這個方案還有幾個更麻煩的問題。第一,標準Base64中的 + 和 / 字符在URL中是特殊保留字符,其中“+”和“/”在URL中會被編碼為“%2B”以及“%2F”,?“%”在寫?數據庫的時候?和SQL編碼規則沖突,需要進?再編碼,因此直接使?標準Base64編碼進?短URL編碼并不合適,直接使用會導致問題。URL保留字符編碼表如下。

“所以,我們需要對Base64編碼進行改造,使其對URL友好。一個常見的做法是將 + 替換為 -,將 / 替換為 _。這樣改造后的字符集就完全可以在URL中安全使用了。”

“第二,如果多個用戶輸入同一個URL,他們會得到相同的短鏈接,這在某些需要獨立追蹤的場景下是不可接受的。

第三,URL的部分內容如果經過編碼,例如 .../?id=design 和 .../%3Fid%3Ddesign,本質上是同一個URL,但哈希值卻完全不同。針對這些問題,我們可以為每個輸入URL附加一個遞增的序列號或者唯一的用戶ID來確保唯一性,不過這個序列號無需存入數據庫。這種方法可能帶來的問題是序列號會無限增長——是否存在溢出風險?同時附加遞增序列號也會影響服務性能,引入新的復雜度。”

(2) 方案二:自增ID轉碼(推薦)

我們可以有一個獨立的密鑰生成服務(KGS),它預先生成隨機的六字母字符串并將其存儲在數據庫中(我們稱之為 key-DB)。每當我們想要縮短一個 URL 時,我們會取一個已經生成的密鑰并使用它。這種方法就簡單了,我們不僅不需要對 URL 進行編碼,而且也不必擔心重復或沖突。KGS 將確保所有插入到 key-DB 中的密鑰都是唯一的。生成六字母字符串的方式這里我們可以用自增ID轉碼的方式來實現

“考慮到哈希方案的種種復雜性,我更推薦另一種方案:發號器 + 進制轉換。我們可以使用一個全局唯一的ID生成服務(類似Snowflake算法或數據庫自增ID),每當有新的短鏈生成請求時,就獲取一個唯一的十進制ID。”

比如,我們獲取到了ID 10086。然后,我們將這個ID從十進制轉換為62進制(a-z, A-Z, 0-9)。

10086 (10進制) = 2Bi (62進制)

這樣,2Bi 就是我們的短鏈碼。這個方案的優點非常突出:

  • 絕對唯一:每個ID都是唯一的,所以轉換后的短鏈碼也絕對不會沖突。
  • 長度可控:生成的短鏈碼長度是遞增的,可以從很短開始,有效利用了碼空間。
  • 性能高效:轉換過程是純計算,速度極快。

面試官:“這個方案聽起來不錯。但這個全局ID生成器不就成了系統的單點了嗎?如果它掛了,整個服務就不可用了。”

“您提到了關鍵點。這個方案通常被稱為密鑰生成服務 (Key Generation Service, KGS)。為了解決單點問題,KGS本身需要設計成高可用的集群。我們可以為KGS設置備用副本,當主服務器宕機時,備用服務器就能接管。同時,KGS可以預先生成大量的唯一短碼,并存入一個專用的數據庫(Key-DB)。為了提升性能和可用性,我們可以設計兩張表:一張存未使用的密鑰,一張存已使用的。當KGS分配密鑰給應用服務器時,就將其從未用表移動到已用表。KGS還可以在內存中緩存一批密鑰,以便快速響應。為了避免多個應用服務器同時請求到同一個密鑰,KGS在分配密鑰時需要加鎖同步。”

“關于這個密鑰數據庫的大小,我們也可以估算一下。采用62進制,6位長度的短碼,大約有 62^6 ≈ 568億 種組合。如果每個字符占1字節,那么存儲所有密鑰需要 6 * 568億 ≈ 340GB 的空間。”

我們如何進行密鑰查找?我們可以在數據庫中查找該密鑰以獲取完整的 URL。如果該密鑰存在于數據庫中,則向瀏覽器返回一個“HTTP 302 重定向”狀態,并在請求的“Location”字段中傳遞存儲的 URL。如果該密鑰不在我們的系統中,則返回一個“HTTP 404 未找到”狀態或將用戶重定向回主頁。

6. 數據分區與復制

前面我們估算出有15TB的數據,單機數據庫肯定扛不住,所以必須進行數據分區(Sharding)。

面試官:“具體說說你會怎么分區?”

主要有兩種思路:

  • 基于范圍的分區:我們可以根據短鏈碼的首字母來分區。比如所有以'a'開頭的存一個分片,'b'開頭的存另一個。以此類推。這種策略稱為基于范圍的分區。我們甚至可以將某些出現頻率較低的字母組合存入同一個數據庫分區。

這種方式實現簡單,但很容易導致數據傾斜和熱點問題。例如,我們決定將所有以字母'E'開頭的 URL 存入某個數據庫分區,但后來發現以'E'開頭的 URL 數量過多。

  • 基于哈希的分區:這是更優的選擇。我們對短鏈碼(Hash)進行哈希計算,然后對分片總數取模,決定這條記錄應該存儲在哪個數據庫分片上。例如 hash(short_code) % 256。這種方式能讓數據均勻分布。

為了更好地處理增刪節點帶來的數據遷移問題,我們還可以引入一致性哈希算法。同時,為了保證數據的高可用,每個數據庫分片都應該有主從副本,實現讀寫分離和故障轉移。

7. 緩存策略

為了應對每秒2萬次的讀取請求,緩存是必不可少的一環。我們可以在應用服務器和數據庫之間加入分布式緩存層,比如Redis或Memcached。

我們可以對高頻訪問的 URL 進行緩存。采用 redis 等現成解決方案即可存儲完整 URL 及其對應哈希值。這樣應用服務器在訪問后端存儲前,能快速檢查緩存中是否存在目標 URL。

緩存內容:緩存 短鏈碼 -> 原始長URL 的映射關系。

工作流程:

  • 當請求到達時,應用服務器首先查詢緩存。
  • 如果緩存命中(Cache Hit),直接從緩存中獲取原始URL并返回重定向。
  • 如果緩存未命中(Cache Miss),則查詢后端的數據庫。
  • 從數據庫查到數據后,先將其寫入緩存,然后再返回給用戶。這樣后續相同的請求就能直接命中緩存了。

面試官:那需要配置多大的緩存內存呢?

我們可以從每日流量的 20%開始,根據客戶端使用模式動態調整所需緩存服務器的數量。根據前文估算,緩存 20%的日流量需要 170GB 內存。由于現代服務器可配備 256GB 內存,我們完全可以用單臺機器承載全部緩存。當然,也可以選擇用多臺配置較低的服務器來存儲這些熱門 URL。

哪種緩存淘汰策略最適合我們的需求?

可以使用 LRU (Least Recently Used) 策略。因為熱點鏈接會經常被訪問,而冷門鏈接則會逐漸被淘汰出緩存,這符合我們的業務場景。

同時,為了進一步提升效率,我們可以部署緩存集群。當發生緩存未命中并從數據庫取回數據后,應用服務器需要將這個新條目寫入所有緩存副本,以保證數據一致性。

8. 負載均衡

十億級別的短鏈存儲,在業務上訪問量應該不低,所以服務實例基本上都要采用多節點部署。因此我們可以在系統中的三個位置添加負載均衡層。

“我們的應用服務、緩存服務、數據庫服務都會是集群部署,所以在系統的關鍵節點都需要部署負載均衡器(Load Balancer)。”

  • 客戶端 -> 應用服務器
  • 應用服務器 -> 數據庫集群
  • 應用服務器 -> 緩存集群

“最初,我們可以采用簡單的輪詢策略。但這種策略不關心服務器的實際負載。如果某臺服務器因為某些原因響應變慢,輪詢策略依然會給它分配新請求,可能導致問題惡化。因此,更智能的方案是采用最少連接或基于響應時間的加權輪詢等策略,負載均衡器會定期探測后端服務器的健康狀況和負載,動態地調整流量分配。”

9.過期鏈接清理

面試官:“設計得差不多了。最后一個問題,那些設置了過期時間的鏈接,你們是怎么處理的?會有一個定時任務去掃描數據庫刪除嗎?”

這是一個考察系統維護和資源優化的好問題。

主動掃描整個龐大的數據庫去刪除過期鏈接,成本太高,會對數據庫造成不必要的壓力。我們可以采用更優雅的惰性刪除(Lazy Deletion)和異步清理結合的策略。

  • 設置默認過期時間:我們可以為每個鏈接設置默認有效期(例如兩年)
  • 訪問時刪除:當一個用戶訪問某個短鏈接時,我們在查詢到數據后,會檢查其是否過期。如果已過期,我們不會返回重定向,而是直接刪除該記錄,并向用戶返回一個“鏈接已失效”的頁面。
  • 異步清理:同時,我們還會有一個低優先級的后臺清理服務,它會在系統負載較低的時候(比如凌晨),慢慢地、分批地去清理那些已經過期但長時間未被訪問的“僵尸”鏈接。這個服務必須被設計成輕量級的,避免影響核心業務。
  • 密鑰復用:在刪除了過期鏈接后,我們可以將它對應的短鏈碼回收,放回到KGS的未使用密鑰庫中,實現循環利用。

四、小結

至此,一個相對完整、考慮周全的十億級短鏈系統設計方案就展現在面試官面前了。我們再來回顧一下整體架構。

從一個簡單的需求出發,我們通過需求分析、容量預估,明確了系統的核心挑戰。然后,我們定義了清晰的API接口,設計了可擴展的數據庫模型,并深入探討了最核心的短碼生成算法。為了應對高性能和高可用的要求,我們引入了數據分區、緩存和負載均衡等關鍵組件。最后,我們還考慮到了過期數據清理這樣的維護性細節。

整個回答過程,不僅展示了你的技術深度和廣度,更重要的是,體現了你作為一名架構師,那種從全局出發、層層遞-進、權衡利弊的系統化思維方式。這才是面試官最想看到的。

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

2025-06-04 03:15:00

高并發短鏈系統

2022-09-13 08:01:58

短鏈服務哈希算法字符串

2025-10-20 04:00:00

2025-11-11 09:25:19

2025-09-17 10:08:43

2025-09-19 09:57:46

2021-05-19 08:17:35

秒殺場景高并發

2025-09-28 01:50:00

2022-09-13 17:45:40

長網址短鏈系統

2018-09-10 15:14:27

前端WebURL

2025-04-29 02:00:00

高并發系統場景

2023-01-18 17:50:35

系統架構Kafka

2023-07-26 13:29:43

高性能短鏈系統

2024-04-09 08:39:16

本地緩存開發線程安全

2024-10-07 08:52:59

分布式系統分布式 IDID

2024-10-29 08:17:43

2024-12-26 10:19:16

2021-06-09 07:55:19

NodeEventEmitte驅動

2024-11-12 08:13:09

2024-11-19 16:31:23

點贊
收藏

51CTO技術棧公眾號

亚洲成精国产精品女| 精品一区二区三区免费播放 | 午夜精品视频网站| 成人免费看aa片| 成人涩涩视频| 亚洲国产综合色| 日韩欧美电影一区二区| 精品国产乱码久久久久久蜜臀网站| 在线午夜精品| 精品国模在线视频| 亚洲精品女人久久久| 欧美日韩伦理一区二区| 午夜在线成人av| 一区二区视频在线观看| 午夜福利视频一区二区| 精品一区二区免费看| 97视频在线观看播放| 美女福利视频网| 天天操综合520| 日韩免费在线观看| 我要看一级黄色大片| 国产理论在线| 亚洲精品中文字幕乱码三区| 日韩欧美一区二区三区四区五区| 亚洲欧美另类视频| 精品亚洲aⅴ乱码一区二区三区| 午夜精品久久久久久久99热| 国产精品视频一区二区三 | 亚洲欧美国产不卡| 天天干在线观看| 激情六月婷婷久久| 国产精品久久久久久亚洲调教 | 91亚洲精品在线观看| 在线免费黄色av| 黄色亚洲免费| 久99九色视频在线观看| 国产精品天天干| 欧美色图婷婷| 亚洲成人久久久| 被黑人猛躁10次高潮视频| 成人精品国产亚洲| 在线一区二区视频| 国产97在线 | 亚洲| 国精一区二区三区| 亚洲综合在线免费观看| 国产精品88久久久久久妇女 | 国模私拍视频一区| 欧美成人黄色网| 亚洲欧洲日韩| 久久成人这里只有精品| 黄色片网站在线播放| 久久精品国产68国产精品亚洲| 亚洲男女性事视频| 国精产品一区一区三区免费视频| 欧洲亚洲一区二区三区| 亚洲国产精品字幕| 熟妇高潮精品一区二区三区| 日韩三级毛片| 亚洲区中文字幕| 国产三级av在线播放| 国产一区毛片| 色婷婷**av毛片一区| 三级黄色录像视频| 68国产成人综合久久精品| 欧美成人免费在线视频| 欧美成人精品激情在线视频| 亚洲午夜av| 97在线看福利| 欧美黄色一级大片| 麻豆精品视频在线观看免费| 91亚洲精品在线观看| 午夜精品久久久久久久91蜜桃| 成人午夜短视频| 久久一区二区三区av| 国产最新视频在线| 国产精品的网站| 欧美无砖专区免费| 成人爱爱网址| 欧美日本高清视频在线观看| 成人性生交视频免费观看| 草莓视频一区二区三区| 亚洲女人天堂成人av在线| 国产伦精品一区二区三区视频女| 日韩免费视频| 久久久久久国产精品美女| 日本少妇全体裸体洗澡| 久久成人国产| 成人网页在线免费观看| 秋霞网一区二区| 国产日韩欧美激情| 国产在线拍揄自揄拍无码| 欧美高清另类hdvideosexjaⅴ| 欧美视频在线免费看| 美女在线视频一区二区| 成人av资源网址| 在线日韩第一页| 久久综合色综合| 蜜臀精品久久久久久蜜臀 | av中文字幕在线免费观看| av中文字幕在线不卡| 亚洲人成网站在线观看播放| 美女尤物在线视频| 欧洲国内综合视频| caopor在线| 日韩欧美三级| 538国产精品一区二区在线| 91在线你懂的| 91网页版在线| 久久久久福利视频| 国产精品原创视频| 精品视频在线观看日韩| 国产盗摄一区二区三区在线| 日韩精品免费视频人成| 精品九九九九| 伊人福利在线| 欧美日韩久久久| 97超碰在线免费观看| 欧美人成网站| 成人免费视频a| 国产资源在线播放| 精品国产91久久久久久| 91av免费观看| 亚洲成人av| 国产精品久久久久久久av电影| 色欲av永久无码精品无码蜜桃| 亚洲乱码精品一二三四区日韩在线| 亚欧在线免费观看| 九九亚洲精品| 55夜色66夜色国产精品视频| 成人久久久精品国产乱码一区二区| 中文字幕亚洲成人| 91看片在线免费观看| 免费视频一区三区| 国产91精品久久久| 欧美 日韩 国产 成人 在线| 亚洲精品少妇30p| 男女视频在线观看网站| 欧美xxxxx视频| 国产欧美日韩亚洲精品| 国产永久免费高清在线观看视频| 黑人欧美xxxx| 搡老熟女老女人一区二区| 在线成人h网| 国产精品视频在线免费观看 | 色婷婷色综合| 国产人妖伪娘一区91| 91精彩在线视频| 欧美中文一区二区三区| 精品无码国产污污污免费网站| 性娇小13――14欧美| 免费在线国产精品| 欧美1级2级| 在线亚洲欧美视频| 中文字幕一区二区三区免费看| 日本一区二区久久| 九九精品久久久| 久久精品影视| 国产精品v欧美精品∨日韩| 波多野一区二区| 亚洲精品一区中文| 波多野结衣一二区| 1024成人网色www| 少妇极品熟妇人妻无码| 日韩亚洲国产欧美| 日本三级中国三级99人妇网站| 成人免费福利| 久久影视电视剧免费网站| 99精品免费观看| 亚洲高清免费观看高清完整版在线观看| 精品少妇人妻av一区二区三区| 一本色道久久综合| 日本免费高清一区二区| 一区二区三区| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 欧美日韩国产另类一区| 永久免费看mv网站入口| 粉嫩蜜臀av国产精品网站| 无码播放一区二区三区| 欧美久久综合网| 99www免费人成精品| 欧美aa一级| www.亚洲免费视频| 狠狠综合久久av一区二区| 欧美性色19p| 国产人与禽zoz0性伦| 风流少妇一区二区| 成人性做爰aaa片免费看不忠| 三级电影一区| 国产伦一区二区三区色一情| 日韩和的一区二在线| 欧美尺度大的性做爰视频| 亚洲欧美日韩免费| 91精品国产综合久久婷婷香蕉| 日本一区二区欧美| 国产精品乱子久久久久| 日韩www视频| 理论片日本一区| 自慰无码一区二区三区| 五月开心六月丁香综合色啪 | 狠狠色香婷婷久久亚洲精品| 国产第一页精品| 99久久国产免费看| 免费一区二区三区在线观看 | 亚洲天天做日日做天天谢日日欢 | 日本久久一二三四| 国产一区二区精品免费| 欧美男男gaygay1069| 45www国产精品网站| 中文字幕在线观看网站| 一本色道久久88亚洲综合88| 老牛影视av牛牛影视av| 欧美精品视频www在线观看 | 视频一区二区三区在线| 免费在线看黄色片| 91精品国产91久久综合| 日本一区二区精品视频| 欧美一级一片| 国产精品三区www17con| 亚洲午夜国产成人| 国产精品xxx视频| 涩涩av在线| 久久久久久久久久国产| bestiality新另类大全| 日韩在线中文视频| 国产日韩精品在线看| 精品视频久久久久久久| 手机看片福利在线| 欧美大胆一级视频| 国产模特av私拍大尺度| 欧美日本韩国一区二区三区视频 | 国产综合久久久久久久久久久久| 亚洲免费av一区二区三区| 亚洲欧美视频一区二区三区| 国产素人在线观看| 99国产精品久久久久久久| 欧美在线观看黄| 欧美日韩一卡| 日韩视频 中文字幕| 亚洲欧洲日韩| 91免费视频黄| 午夜欧美精品久久久久久久| 一本色道久久88亚洲精品综合| 亚洲成人最新网站| 国产在线无码精品| 欧美日韩精品| 日韩国产成人无码av毛片| 韩国精品一区二区三区| 国产一级大片免费看| 国产精品豆花视频| 九九爱精品视频| 国产色综合网| 国语对白做受xxxxx在线中国| 久久国产毛片| 91小视频网站| 国产在线一区二区综合免费视频| 极品粉嫩美女露脸啪啪| 国内精品久久久久影院薰衣草 | 91麻豆国产在线观看| 波多野结衣av在线免费观看| 久久美女艺术照精彩视频福利播放| 国产精品815.cc红桃| 国产女人18水真多18精品一级做| wwwww黄色| 亚洲老妇xxxxxx| 五月天婷婷网站| 一本久道中文字幕精品亚洲嫩| 黄色av网站免费| 欧美乱妇一区二区三区不卡视频| 97精品久久人人爽人人爽| 日韩小视频在线观看专区| 黄频在线免费观看| 亚洲网站视频福利| 黄色在线论坛| 97久久伊人激情网| 国产成人精品一区二区三区视频 | 色婷婷一区二区三区| 国产91porn| 国产美女诱惑一区二区| 尤蜜粉嫩av国产一区二区三区| 国产一区二区三区在线观看精品| 性囗交免费视频观看| 国产精品视频免费看| 久久国产在线视频| 欧美在线观看一区| 精品欧美一区二区精品少妇| 国产视频精品自拍| 黄a在线观看| 欧美专区第一页| 小说区图片区亚洲| 久久久久久九九| 午夜片欧美伦| 91看片就是不一样| 国产成人自拍网| 国产真实乱人偷精品人妻| 亚洲免费色视频| 樱花视频在线免费观看| 精品欧美久久久| jizz在线观看中文| 97免费在线视频| 久久久久久亚洲精品美女| 欧美精品七区| 亚洲午夜精品久久久久久app| 91在线视频观看免费| 高清不卡在线观看av| 国产日韩精品中文字无码| 亚洲国产成人91porn| 国产又大又粗又长| 亚洲色图15p| 1234区中文字幕在线观看| 国产视频观看一区| 亚洲资源网你懂的| 日b视频免费观看| 精品亚洲成a人| 中文字幕黄色网址| 一本久道久久综合中文字幕| 亚洲精品国偷拍自产在线观看蜜桃| 这里只有精品在线播放| 水蜜桃在线视频| 国产精品.com| 欧美日韩一区自拍| 992tv人人草| 国产精品久久久久久久午夜片 | 99鲁鲁精品一区二区三区| 在线视频国产一区| 香蕉人妻av久久久久天天| 欧美极品美女视频网站在线观看免费 | 亚洲精品欧美二区三区中文字幕| 国产高清中文字幕| 亚洲电影免费观看高清完整版在线观看| 成人短视频在线观看| 国产精品十八以下禁看| 九九免费精品视频在线观看| 97av视频在线观看| 成人激情黄色小说| 久久久久久久久久99| 日韩精品中文字幕一区二区三区 | 欧美区国产区| 丰满人妻一区二区三区大胸| 亚洲乱码国产乱码精品精98午夜 | 国产一区二区三区免费观看在线 | 日韩亚洲欧美在线观看| av网站在线看| 99精彩视频在线观看免费| 一区二区中文| 老司机av网站| 亚洲午夜精品在线| 色欲久久久天天天综合网| 97人人模人人爽人人喊中文字| 国产精品麻豆| 国产精品无码免费专区午夜| 国产99一区视频免费| 国产亚洲成人av| 亚洲精品在线观看网站| 免费一二一二在线视频| 日本精品二区| 激情亚洲综合在线| 欧美被狂躁喷白浆精品| 亚洲黄色www| 蜜臀国产一区| 亚洲免费精品视频| 国产一区二区不卡| 久久99久久久| 日韩精品在线第一页| 亚洲伦乱视频| 一卡二卡3卡四卡高清精品视频| 精品亚洲免费视频| 久久久久久久伊人| 国产午夜精品久久久 | 国产欧美激情| 一区二区三区在线观看免费视频| 欧美日韩成人综合在线一区二区| 精品176二区| 国产手机精品在线| 久久精品综合| 四虎影院中文字幕| 337p日本欧洲亚洲大胆精品| 最近在线中文字幕| 宅男在线精品国产免费观看| 国产a级毛片一区| 日韩精品在线一区二区三区| 久久亚洲精品毛片| 亚洲理论电影| 婷婷激情5月天| 偷拍与自拍一区| 日本综合在线| 精品日本一区二区三区| 麻豆视频观看网址久久| 久久久久成人网站| 亚洲午夜色婷婷在线| 韩国三级大全久久网站| 国产主播在线看| 亚洲色图在线播放| 欧美伦理影视网| 3d动漫啪啪精品一区二区免费| 久久国产66| 久久这里只有精品国产| 色综合亚洲精品激情狠狠| 老司机凹凸av亚洲导航| 婷婷激情5月天| 在线免费一区三区|