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

騰訊女后端設(shè)計(jì)了一套短鏈系統(tǒng),當(dāng)場就想給她 offer!

開發(fā) 后端
本文通過一個(gè)客服評價(jià)的短信開始,分析了短鏈的構(gòu)成,短鏈跳轉(zhuǎn)的原理,同時(shí)也給出了業(yè)內(nèi)的一些實(shí)現(xiàn)算法,以及一些架構(gòu)上的建議。

Hi,你好,我是猿java

如下圖,對于這種客評短信,相信大家并不陌生,通過點(diǎn)擊短信里“藍(lán)色字體”跳轉(zhuǎn)到一個(gè)具體的網(wǎng)頁。

其實(shí),上圖中那串藍(lán)色字符,有個(gè)美麗的專業(yè)術(shù)語:短鏈。它可以是一個(gè) URL地址,也可以是一個(gè)二維碼。而整個(gè)跳轉(zhuǎn)流程的背后是一套完整的短鏈系統(tǒng),因此,今天我們來一起分析:如何設(shè)計(jì)一套高性能短鏈系統(tǒng)。

一、為什么需要短鏈?

存在即合理,這里列舉三個(gè)主要原因。

(1) 相對安全

短鏈不容易暴露訪問參數(shù),生成方式可以完全迎合短信平臺的規(guī)則,能夠有效地規(guī)避關(guān)鍵詞、域名屏蔽等風(fēng)險(xiǎn),而原始 URL地址,很可能因?yàn)榘厥庾址欢绦畔到y(tǒng)誤判,導(dǎo)致鏈接無法跳轉(zhuǎn)。

(2) 美觀

對于精簡的文字,似乎更符合美學(xué)觀念,不太讓人產(chǎn)生反感。

(3) 平臺限制

短信發(fā)送平臺有字?jǐn)?shù)限制,在整條短信字?jǐn)?shù)不變的前提下,把鏈接縮短,其他部分的文字描述就能增加,這樣似乎更能達(dá)到該短信的實(shí)際目的(比如,營銷)。

二、短鏈的組成

如下圖,短鏈的組成通常包含兩個(gè)部分:域名 + 隨機(jī)碼

短鏈的域名最好和其他業(yè)務(wù)域名分開,而且要盡量簡短,可以不具備業(yè)務(wù)含義(比如:xyz.com),因?yàn)槎替湸蟛糠质怯糜跔I銷,可能會(huì)被三方平臺屏蔽。

短鏈的隨機(jī)碼需要全局唯一,建議 10位以下。

三、短鏈的跳轉(zhuǎn)原理

首先,我們先看一個(gè)短鏈跳轉(zhuǎn)的簡單例子,如下代碼,定義了一個(gè) 302重定向的代碼示例:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.servlet.view.RedirectView;

@Controller
publicclass RedirectController {

@GetMapping("/{shortCode}")
public RedirectView redirect(@PathVariable String shortCode) {
    String destUrl = "https://yuanjava.com";
    // destUrl = getDestUrlByShortCode(shortCode); //真實(shí)的業(yè)務(wù)邏輯
    returnnew RedirectView(destUrl);
  }

接著,在瀏覽器訪問短鏈”http://127.0.0.1:8080/s2TYdWd” 后,請求會(huì)被重定向到 https://yuanjava.com ,下圖為瀏覽器控制臺信息:

從上圖,我們看到了 302狀態(tài)碼并且請求被 Location到另外一個(gè) URL,整個(gè)交互流程圖如下:

是不是有一種偷梁換柱的感覺???

最后,總結(jié)下短鏈跳轉(zhuǎn)的核心思想:

  • 生成隨機(jī)碼,將隨機(jī)碼和目標(biāo) URL(長鏈)的映射關(guān)系存入數(shù)據(jù)庫;
  • 用域名+隨機(jī)碼生成短鏈,并推送給目標(biāo)用戶;
  • 當(dāng)用戶點(diǎn)擊短鏈后,請求會(huì)先到達(dá)短鏈系統(tǒng),短鏈系統(tǒng)根據(jù)隨機(jī)碼查找出對應(yīng)的目標(biāo) URL,接著將請求 302重定向到目標(biāo) URL(長鏈);

關(guān)于重定向有 301 和 302兩種,如何選擇?

  • 302,代表臨時(shí)重定向:每次請求短鏈,請求都會(huì)先到達(dá)短鏈系統(tǒng),然后重定向到目標(biāo) URL(長鏈),這樣,方便短鏈系統(tǒng)做一些統(tǒng)計(jì)點(diǎn)擊數(shù)等操作;通常采用 302
  • 301,代表永久重定向:第一次請求拿到目標(biāo)長鏈接后,下次再次請求短鏈,請求不會(huì)到達(dá)短鏈系統(tǒng),而是直接跳轉(zhuǎn)到瀏覽器緩存的目標(biāo) URL(長鏈),短鏈系統(tǒng)只能統(tǒng)計(jì)到第一次訪問的數(shù)據(jù);一般不采用 301。

四、如何生成短鏈?

從短鏈組成章節(jié)可知:短鏈=域名+隨機(jī)碼,因此,如何生成短鏈的問題變成了如何生成一個(gè)全局唯一的隨機(jī)碼,通常會(huì)有 3種做法:

1. Base62

Base62 表示法是一種基數(shù)為62的數(shù)制系統(tǒng),包含26個(gè)英文大寫字母(A-Z),26個(gè)英文小寫字母(a-z)和10個(gè)數(shù)字(0-9)。這樣,共有62個(gè)字符可以用來表示數(shù)值。如下代碼:

import java.security.SecureRandom;

publicclass RandomCodeGenerator {
privatestaticfinal String CHAR_62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
privatestaticfinal SecureRandom random = new SecureRandom();

public static String generateRandomCode(int length) {
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
      int rndCharAt = random.nextInt(CHAR_62.length());
      char rndChar = CHAR_62.charAt(rndCharAt);
      sb.append(rndChar);
    }
    return sb.toString();
  }
}

對于 Base62算法,如果是生成 6位隨機(jī)數(shù)有 62^6 - 1 = 56800235583(568億多),如果是生成 7位隨機(jī)數(shù)有 62^7 - 1 = 3521614606208(3.5萬億多),足夠使用。

2. Hash算法

Hash算法是我們最容易想到的辦法,比如 MD5, SHA-1, SHA-256, MurmurHash, 但是這種算法生成的 Hash值還是比較長,常用的做法是把這個(gè) Hash值進(jìn)行 62/64進(jìn)行壓縮。

如下代碼,通過 Google的 MurmurHash算法把長鏈 Hash成一個(gè) 32位的 10進(jìn)制正數(shù),然后再轉(zhuǎn)換成62進(jìn)制(壓縮),這樣就可以得到一個(gè) 6位隨機(jī)數(shù),

import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
import java.nio.charset.StandardCharsets;

publicclass MurmurHashToBase62 {

    privatestaticfinal String BASE62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static String toBase62(int value) {
        StringBuilder sb = new StringBuilder();
        while (value > 0) {
            sb.insert(0, BASE62.charAt(value % 62));
            value /= 62;
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        // 長鏈
        String input = "https://yuanjava.cnposts/short-link-system/design?code=xsd&page=1";
        // 長鏈利用 MurmurHash算法生成 32位 10進(jìn)制數(shù)
        HashFunction hashFunction = Hashing.murmur3_32();
        int hash = hashFunction.hashString(input, StandardCharsets.UTF_8).asInt();
        if (hash < 0) {
            hash = hash & 0x7fffffff; // Convert to positive by dropping the sign bit
        }
        // 將 32位 10進(jìn)制數(shù) 轉(zhuǎn)換成 62進(jìn)制
        String base62Hash = toBase62(hash);
        System.out.println("base62Hash:" + base62Hash);
    }
}

3. 全局唯一 ID

比如,很多大中型公司都會(huì)有自己全局唯一 ID 的生成服務(wù)器,可以使用這些服務(wù)器生成的 ID來保證全局唯一,也可以使用雪花算法生成全局唯一的ID,再經(jīng)過 62/64進(jìn)制壓縮。

五、如何解決沖突?

對于上述 3種方法的前 2種:Base62 或者 Hash算法,因?yàn)楸举|(zhì)上都是哈希函數(shù),所以,不可避免地會(huì)產(chǎn)生哈希沖突,盡管沖突的概率已經(jīng)很低很低了,so,萬一沖突了,該如何解決呢?

要解決沖突,首先需要檢測 Hash沖突,通常來說有 2種檢測方法。

1. 數(shù)據(jù)庫鎖

這里以 MySQL數(shù)據(jù)庫為例,表結(jié)構(gòu)如下:

CREATE TABLE`short_url_map` (
`id`int(11) unsignedNOTNULL AUTO_INCREMENT,
`long_url`varchar(160) DEFAULTNULLCOMMENT'長鏈',
`short_url`varchar(10) DEFAULTNULLCOMMENT'短鏈',
`gmt_create`int(11) DEFAULTNULLCOMMENT'創(chuàng)建時(shí)間',
  PRIMARY KEY (`id`),
UNIQUEINDEX'short_url' ('short_url')
) ENGINE=InnoDBDEFAULTCHARSET=utf8;

首先創(chuàng)建一張長鏈和短鏈的關(guān)系映射表,然后通過給 short_url字段添加唯一鎖,這樣,當(dāng)數(shù)據(jù)插入時(shí),如果存在 Hash沖突(short_url值相等),數(shù)據(jù)庫就會(huì)拋錯(cuò),插入失敗,因此,可以在業(yè)務(wù)代碼里捕獲對應(yīng)的錯(cuò)誤,這樣就能檢測出沖突。

也可以先用 short_url去查詢,如果能查到數(shù)據(jù),說明 short_url存在 Hash沖突了。

對于這種通過查詢數(shù)據(jù)庫或者依賴于數(shù)據(jù)庫唯一鎖的機(jī)制,因?yàn)槎忌婕癉B操作,對數(shù)據(jù)庫是一個(gè)額外的開銷,如果流量比較大的話,需要保證數(shù)據(jù)庫的性能。

2. 布隆過濾器

在 DB操作的上游增加一個(gè)布隆過濾器,在長鏈生成短鏈后, 先用短鏈在布隆過濾器中進(jìn)行查找,如果存在就代表沖突了,如果不存在,說明 DB里不存在此短鏈,可以插入。對于布隆過濾器的選擇,單機(jī)可以采用 Google的布隆過濾器,分布式可以使用 RedisBloom。

整體流程可以抽象成下圖:

檢測出了沖突,需要如何解決沖突?

再 Hash,可以在長鏈后面拼接一個(gè) UUID之類的隨機(jī)字符串,然后再次進(jìn)行 Hash,用得出的新值再進(jìn)行上述檢測,這樣 Hash沖突的概率又大大大降低了。

六、高并發(fā)場景的架構(gòu)

在流量不大的情況,上述方法怎么折騰似乎都合理,但是,為了架構(gòu)的健壯性,很多時(shí)候需要考慮高并發(fā),大流量的場景,因此架構(gòu)需要支持水平擴(kuò)展,比如:

  • 采用微服務(wù)
  • 功能模塊分離,比如,短鏈生成服務(wù)和長鏈查詢服務(wù)分離
  • 功能模塊需要支持水平擴(kuò)容,比如:短鏈生成服務(wù)和長鏈查詢服務(wù)能支持動(dòng)態(tài)擴(kuò)容
  • 緩解數(shù)據(jù)庫壓力,比如,分區(qū),分庫分表,主從,讀寫分離等機(jī)制
  • 服務(wù)的限流,自保機(jī)制
  • 完善的監(jiān)控和預(yù)警機(jī)制

這里給出一套比較完整的設(shè)計(jì)思路圖:

七、總結(jié)

本文通過一個(gè)客服評價(jià)的短信開始,分析了短鏈的構(gòu)成,短鏈跳轉(zhuǎn)的原理,同時(shí)也給出了業(yè)內(nèi)的一些實(shí)現(xiàn)算法,以及一些架構(gòu)上的建議。

對于業(yè)務(wù)體量小的公司,可以根據(jù)成本來搭建服務(wù)(單機(jī)或者少量服務(wù)器做負(fù)載),對于業(yè)務(wù)體量比較大的公司,更多需要考慮到高并發(fā)的場景,如何保證服務(wù)的穩(wěn)定性,如何支持水平擴(kuò)展,當(dāng)服務(wù)出現(xiàn)問題時(shí)如何具備一套完善的監(jiān)控和預(yù)警服務(wù)器。

其實(shí),很多系統(tǒng)都是在一次又一次的業(yè)務(wù)流量挑戰(zhàn)下成長起來的,我們需要不斷打磨自己宏觀看架構(gòu),微觀看代碼的能力,這樣自己也就跟著業(yè)務(wù),系統(tǒng)一起成長起來了。

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2024-11-19 16:31:23

2024-11-12 08:13:09

2021-05-27 07:12:19

單點(diǎn)登錄系統(tǒng)

2022-11-12 17:50:02

Web服務(wù)器微服務(wù)

2025-02-21 08:17:13

2024-09-23 04:00:00

java架構(gòu)分布式系統(tǒng)

2022-09-13 17:45:40

長網(wǎng)址短鏈系統(tǒng)

2025-04-07 07:45:00

AI模型神經(jīng)網(wǎng)絡(luò)

2025-06-23 08:23:04

2022-10-09 14:15:42

短鏈設(shè)計(jì)

2022-09-13 08:01:58

短鏈服務(wù)哈希算法字符串

2022-11-08 17:38:34

MySQL數(shù)據(jù)庫并發(fā)

2021-05-06 11:06:52

人工智能語音識別聲聞檢索

2022-08-04 00:05:11

系統(tǒng)分布式流量

2021-06-28 09:56:54

微軟AI編程

2023-08-10 10:13:35

轉(zhuǎn)轉(zhuǎn)短鏈平臺

2025-09-28 01:50:00

2025-06-04 03:15:00

高并發(fā)短鏈系統(tǒng)

2023-07-26 13:29:43

高性能短鏈系統(tǒng)

2019-10-11 15:58:25

戴爾
點(diǎn)贊
收藏

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

91入口在线观看| 欧美成人h版在线观看| 九九热在线免费| 在线播放毛片| 成人av资源在线观看| 国产aⅴ夜夜欢一区二区三区 | 丝袜老师办公室里做好紧好爽| 可以直接在线观看的av| 国产精品自拍网站| 情事1991在线| 九九视频免费看| 欧洲毛片在线视频免费观看| 91精品免费观看| 女性隐私黄www网站视频| 国精产品一区| 久久精品夜夜夜夜久久| 波多野结衣一区二区三区在线观看| 精品国产xxx| 欧美日韩国产一区精品一区| 一区二区三区 在线观看视| 2025中文字幕| 日韩欧美三区| 在线观看视频一区二区| 成人免费性视频| 欧美成人三区| 国产丝袜欧美中文另类| 欧美片网站yy| free性欧美hd另类精品| yiren22亚洲综合伊人22| 国产视频亚洲| 欧美精品一区二区免费| 国产毛片欧美毛片久久久| 荡女精品导航| 日韩欧美色综合网站| 在线观看av网页| 性欧美超级视频| 欧美日韩国产精品| 97视频久久久| 国产丝袜精品丝袜| 亚洲女女做受ⅹxx高潮| 亚洲欧美成人一区| 国产无套粉嫩白浆在线2022年| av电影一区二区| 成人欧美一区二区三区视频| 国产巨乳在线观看| 看片网站欧美日韩| 国产日韩精品在线| 在线免费av网| 久久99国产乱子伦精品免费| 国产精品草莓在线免费观看| chinese国产精品| 午夜在线精品| 国产成人av网址| 波多野结衣激情视频| 日韩精品电影在线观看| 国产v综合v亚洲欧美久久| 性无码专区无码| 午夜一区不卡| 国产精品电影一区| 伊人精品一区二区三区| 久久激情五月婷婷| 91亚洲国产成人久久精品网站| 国产又粗又猛又黄又爽无遮挡| 麻豆成人综合网| 成人性生交大片免费看视频直播| 97人妻精品一区二区三区软件| 精东粉嫩av免费一区二区三区| 91久久精品久久国产性色也91| 国产乱淫av片免费| 粉嫩高潮美女一区二区三区| 国产欧美日韩伦理| 国产在线高清| 中文字幕日韩av资源站| www.欧美黄色| 综合另类专区| 欧美美女一区二区三区| japan高清日本乱xxxxx| swag国产精品一区二区| 国产网站欧美日韩免费精品在线观看 | 国产精品一国产精品k频道56| 日本道色综合久久影院| 久久国产香蕉视频| 激情亚洲综合在线| 国产伦精品一区二区三区四区视频 | 国产精品一区专区| 国产精品久久精品视| 天堂a√在线| 国产精品国产三级国产普通话99| 色乱码一区二区三区熟女 | 欧美综合国产精品久久丁香| 天干夜夜爽爽日日日日| 精一区二区三区| 精品国产一区二区三区四区vr| 激情福利在线| 一二三四区精品视频| 免费在线观看日韩视频| 国产一区二区三区黄网站| 日韩精品中文字幕在线| 国产探花在线视频| 国产一区二区三区久久| 成人在线视频网站| 四虎影视在线播放| 亚洲美腿欧美偷拍| 日韩 欧美 高清| 亚洲精品一区二区三区中文字幕| 亚洲色图美腿丝袜| 久久国产免费观看| 麻豆中文一区二区| 久久精品丝袜高跟鞋| 成人看片免费| 欧美制服丝袜第一页| 逼特逼视频在线观看| 精品美女久久久| 久久久免费在线观看| 夜夜躁很很躁日日躁麻豆| av网站免费线看精品| 爱爱爱视频网站| 欧美1级2级| 亚洲成色999久久网站| 三级在线观看免费大全| 久久久久国产精品一区三寸 | 妖精视频一区二区三区免费观看| 欧美精品在线免费| 中文字幕 视频一区| thepron国产精品| 91免费版看片| 99综合99| 中文字幕一精品亚洲无线一区 | 亚洲综合久久av一区二区三区| 99伊人成综合| 精品国产91亚洲一区二区三区www| 免费a级毛片在线播放| 91久久线看在观草草青青| 国产亚洲色婷婷久久99精品91| 欧美 日韩 国产 一区| 国产日韩精品视频| 婷婷激情在线| 欧美亚洲丝袜传媒另类| 中文字幕av网址| 一本色道久久综合亚洲精品不卡 | 日韩av成人在线| 五月婷婷六月色| 亚州成人在线电影| 麻豆精品国产传媒av| 国产精品mv在线观看| 69174成人网| 一区二区三区伦理| 日韩一区二区三区精品视频| 欧美日韩午夜视频| 国产一区二区在线观看视频| 99精品视频网站| 另类视频一区二区三区| 欧美国产亚洲视频| 懂色av成人一区二区三区| 亚洲自拍欧美精品| avtt中文字幕| 国产精品久久久久久模特 | 男女一区二区三区| 宅男噜噜噜66一区二区| 欧美国产视频在线观看| 日本久久免费| 日韩中文字幕免费视频| 国产欧美日韩成人| 亚洲综合色自拍一区| 久久精品女同亚洲女同13| 久久精品一本| 亚洲欧洲国产精品久久| 精品久久国产一区| 国模私拍视频一区| 精品福利视频导航大全| 欧美视频中文一区二区三区在线观看| 久草手机视频在线观看| 国产麻豆精品95视频| www.好吊操| 欧洲专线二区三区| 成人妇女淫片aaaa视频| 女囚岛在线观看| 亚洲图片制服诱惑| 国产片高清在线观看| 亚洲成av人在线观看| 在线免费观看麻豆| 九一九一国产精品| 人妻少妇精品无码专区二区 | 一区二区三区国产视频| 99在线精品视频免费观看软件| 亚洲一区二区三区免费视频| 自拍偷拍中文字幕| 国产一区二区成人久久免费影院| 国产av人人夜夜澡人人爽麻豆| 精品久久久久久久久久久下田 | 天天天综合网| 国产一区在线免费| 99久久综合国产精品二区| 欧美黑人性视频| 国产在线观看高清视频| 日韩免费视频一区| 免费一级a毛片| 亚洲一区二区五区| jizz18女人高潮| 福利一区福利二区| 婷婷丁香激情网| 亚洲经典视频在线观看| 一区二区精品视频| 伊人精品一区| 风间由美久久久| 国产福利一区二区三区在线播放| 国内精品小视频| 免费大片在线观看www| 亚洲欧美国产va在线影院| 精品国产乱码久久久久久蜜臀网站| 一本久久a久久免费精品不卡| 久久这里只有精品免费| 国产精品久久三| 中文字幕免费高清| av电影天堂一区二区在线| 国产农村妇女精品久久| 日韩高清不卡一区| 亚洲欧洲日产国码无码久久99| 在线看片不卡| 一区二区三区的久久的视频| 亚洲va久久| 精品视频导航| silk一区二区三区精品视频| 91久久精品一区| 国产精品99久久久久久董美香| 欧洲亚洲在线视频| 老牛影视精品| 午夜精品在线视频| av电影在线地址| 精品中文字幕乱| 高潮毛片在线观看| 色悠悠久久久久| www.亚洲免费| 国产一区二区三区毛片| 青青草免费在线| 日韩精品免费在线播放| 人妻中文字幕一区| 亚洲白拍色综合图区| wwwxxxx国产| 日韩欧美亚洲另类制服综合在线| 97人妻精品一区二区三区动漫| 欧美日韩免费观看一区三区| 国产成人av免费| 欧美亚洲免费在线一区| 亚洲国产无线乱码在线观看| 91国产精品成人| 中文字幕有码视频| 欧美日韩免费观看一区三区| 国产永久免费视频| 这里只有精品电影| 国产高清不卡视频| 欧美成人性战久久| 国产小视频免费观看| 亚洲成人av在线播放| 亚洲色偷精品一区二区三区| 亚洲第一精品夜夜躁人人躁| 亚洲欧洲精品视频| 亚洲欧美激情在线视频| 国产女主播在线写真| 中文字幕在线观看亚洲| 国产福利视频在线观看| 欧美日韩成人黄色| 黄色软件视频在线观看| 日本精品久久久久久久| 97欧美成人| 99国产在线视频| 欧美亚洲tv| 日韩免费中文专区| 天天插综合网| 你懂的av在线| 日本中文字幕一区二区有限公司| 手机免费av片| 高清久久久久久| 亚洲最大成人网站| 中文字幕一区视频| 久久无码精品丰满人妻| 疯狂欧美牲乱大交777| 狠狠躁夜夜躁人人爽视频| 69精品人人人人| 色呦呦视频在线| 在线日韩av观看| 丝袜美女在线观看| 国产99久久久欧美黑人| 免费精品一区二区三区在线观看| 国产精品一区二区三区不卡 | 四虎永久在线精品无码视频| 美女一区二区视频| 国产乱淫av片| 欧美国产一区二区在线观看| 久久网中文字幕| 精品视频一区二区不卡| 亚洲乱码国产乱码精品精软件| 亚洲精品中文字幕有码专区| 日本在线观看www| 97在线精品视频| 亚洲福利影视| 鲁丝片一区二区三区| 91精品国产自产在线观看永久∴| 国产极品在线视频| 韩国三级电影一区二区| 黄色性生活一级片| 亚洲欧美日韩国产综合在线| 在线观看日本视频| 欧美一级免费大片| 成人性生交大片免费看午夜| 久久久欧美一区二区| 99精品美女视频在线观看热舞| 欧美午夜视频在线| 在线观看的日韩av| 91高清国产视频| 久久久久九九视频| 国产精品变态另类虐交| 欧美日韩一级二级| 欧美精品少妇| 久久久久久久久久久成人| 二区三区精品| 亚洲三区视频| 三级精品在线观看| 扒开伸进免费视频| 亚洲猫色日本管| 影音先锋黄色网址| 亚洲网站在线看| 一本大道色婷婷在线| 国产免费一区| 国产精品s色| 99久久综合网| 亚洲欧美日韩国产一区二区三区| 亚洲午夜无码久久久久| 亚洲欧洲午夜一线一品| 日本黄色免费在线| 国产欧美日韩综合精品二区| 欧美日韩网站| 日本少妇一级片| 亚洲男人的天堂在线观看| 亚洲天堂男人网| 中文字幕综合在线| 丰满少妇一区| 日韩激情视频| 日本不卡视频一二三区| 中文字幕人妻一区二区三区在线视频| 欧美午夜视频一区二区| 日韩一二三四| 日韩美女福利视频| 国产精品美女久久久久久不卡| 国产a级片免费观看| 国产亚洲女人久久久久毛片| 黄色污污网站在线观看| 亚洲人成电影网站色…| 亚洲成av在线| 免费看啪啪网站| 国产精品自产自拍| 久草视频手机在线| 欧美一区二区黄| 欧美videossex| 国产一区二区免费在线观看| 亚洲少妇在线| xxxxx在线观看| 欧美日韩精品欧美日韩精品| 免费在线观看av片| 91免费综合在线| 国产一区久久| 中文字幕在线免费看线人| 色综合天天综合狠狠| 午夜免费福利在线观看| 亚洲综合在线播放| 亚洲三级免费| 韩国女同性做爰三级| 欧美久久久久久蜜桃| caoporn免费在线| 精品亚洲第一| 日韩成人精品在线观看| www.av成人| 亚洲国产私拍精品国模在线观看| 亚洲天堂导航| 制服国产精品| 成+人+亚洲+综合天堂| 久久久蜜桃一区二区| 日韩性xxxx爱| 精品网站aaa| 免费看污黄网站| 亚洲一区二区三区中文字幕 | 久久视频在线直播| 美女福利一区| 在线观看免费视频高清游戏推荐| 一区二区激情小说| 国产特黄在线| 国产91亚洲精品一区二区三区| 久久久成人网| 精品无码黑人又粗又大又长| 亚洲视频axxx| 91国内精品| 亚洲欧美自偷自拍另类| 亚洲福利一二三区| 99re在线视频| 精品九九九九| 国产美女久久久久| 在线免费观看国产精品| 色综合久久天天综线观看| 国产剧情在线观看一区| 成年人小视频在线观看|