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

來聊聊大廠常用的分布式 ID 生成方案

開發 數據庫
本文就基于保證數據ID唯一的要求針對市面主流的幾種分布式ID算法的特點和適用場景展開深入探討。

隨著數據日益增加,項目需要進行分庫分表來分攤壓力,為了保證數據ID唯一,必須有一套適配當前分庫分表的分布式ID生成方案,而這套方案必須具備以下條件:

  • 全局唯一:分布式ID必須全局唯一,確保數據可以被唯一確定。
  • 高性能:高并發場景下分布式ID必須快速響應生成。
  • 高并發:分庫分表數據存儲大概率會出現高并發量的請求,所以這套方案必須在高并發場景下快速生成id。
  • 高可用: 需要無限接近百分百的可用,避免因為因為分布式ID生成影響其他業務運行。
  • 易用:方案必須易于使用,不大量侵入業務代碼。
  • 遞增:盡可能保證遞增,確保ID有序插入以保證插入性能和索引維護開銷。

所以本文就基于上述要求針對市面主流的幾種分布式ID算法的特點和適用場景展開深入探討。

1. 詳解UUID

UUID有著全球唯一的特性,只需一行簡單的代碼,即可快速生成一個UUID:

public static void main(String[] args) {
        log.info("uuid:{}", UUID.randomUUID());
    }

輸出結果:

uuid:9fea8ab3-0789-4719-aa70-8849cbc59916

符合全局唯一、高性能、高并發、高可用、易用的特性。但是它卻有以下缺點:

  • 字符串類型:因為是字符類型,占用大量存儲空間。
  • 無序:因為生成的無規律,因為大量的隨機添加勢必導致MySQL底層大量的B+ tree的節點分裂,耗費大量計算資源,嚴重影響數據庫性能,進而導致查詢耗時增加。

所以UUID雖在性能、唯一性、可用性上有著保證,但其生成結果會加劇數據庫的負擔,所以不是很推薦用作分布式ID。

2. 利用數據庫主鍵自增

我們也可以專門使用一張數據表生成唯一自增的id,通過數據庫auto_increment特性自增唯一且有序的分布式ID:

CREATE TABLE id_allocation (
  id INT AUTO_INCREMENT PRIMARY KEY
);

這種做法優點就是實現簡單且單調遞增,ID也是數值類型,所以查詢速度很快,但它也有以下缺點:

  • 單點性能瓶頸:所有的ID都需要依賴這張數據表生成,如果出現單點故障,很可能導致服務癱瘓。
  • 性能瓶頸:單個數據庫一下子接收大量請求連接接入(經過壓測8C16G在數據表設計良好的情況下TPS大約在2500~3000左右),可能會導致數據庫服務癱瘓:

3. 分庫分表主鍵自增

針對上述問題,我們提出使用多庫多表生成分布式ID以保證高可用,例如我們現在就使用雙主模式,每個庫分別存放一張id分配表(id_allocation ),表1的id從1開始,表2的id從2開始,各自的步長都為2:

-- ID分配表1,從1開始自增,步長為2
CREATE TABLE db1.id_allocation (
  id INT AUTO_INCREMENT PRIMARY KEY
) AUTO_INCREMENT=1;


-- ID分配表2,從2開始自增,步長為2
CREATE TABLE db2.id_allocation (
  id INT AUTO_INCREMENT PRIMARY KEY
) AUTO_INCREMENT=2;

為了保證壓力均攤,我們可以針對服務采用輪詢或者哈希算法請求不同的數據庫獲取唯一ID:

該方案很好的解決的DB單點問題,但是僅僅為了全局id而徒增這么多的硬件服務器確實是有些許浪費。

4. 號段式id分配策略

號段式分布式ID生成是當下比較主流的實現方案之一,它的整體思路是在專門建立一張數據表劃分當前業務的ID分配段,每次加載一批號段到內存中,然后所有的服務都從這個號碼段中獲取ID,直至這個號碼段用完,然后再到數據庫中再劃動一批到內存中使用,對應的建表SQL如下所示:

CREATE TABLE id_allocation (
  id int(10) NOT NULL,
  max_id bigint(20) NOT NULL COMMENT '當前已用最大id',
  step int(20) NOT NULL COMMENT '號段分配步長',
  biz_type    int(20) NOT NULL COMMENT '業務類型',
  version int(20) NOT NULL COMMENT '版本號',
  PRIMARY KEY (`id`)
)

我們假設現在有一個訂單服務要采用號段式進行ID分配,我們在這張表中初始化訂單服務的數據,可以看到訂單服務初始化的數據,max_id為0,即表示當前這個業務還未分配任何id,業務類型為1,step為1000,即代表每次有服務來請求時就分配1000個id段給請求服務,而version則是保證多服務請求數據一致性的樂觀鎖版本號:

INSERT INTO id_allocation (id, max_id, step, biz_type, version) VALUES (1, 0, 1000, 1, 0);

到數據查詢當前業務的號碼段,查詢數據庫得到結果是max_id為0以及step為1000,這意味著當前這個業務的id已經用到了0(還未使用過),而可用范圍為1000,所以號碼段為[max_id+1,max_id+step]即1~1000,將數據庫加載到數據庫之后,攜帶版本號將數據的max_id更新為max_id+step,如此一來下次id分配就從1000開始:

update table set max_id=max_id+step

為了避免因為服務崩潰等情況導致內存中的號碼段丟失,我們需要如下兩個步驟的處理避免ID沖突:

  • 每一次服務重啟時,先加載一批號碼段到內存中,然后更新數據庫中的max_id,盡管這么做可能導致一部分的id浪費,但是這種即用即更新很好的解決的id沖突的問題。

  • 編寫AOP切面或者其他任何方式,當捕獲到ID沖突異常后,直接更新內存中的號碼段,在業務上盡可能直接解決意外沖突。

可以說這種方案通過數據庫結合內存緩沖了數據庫的壓力,既保證的唯一性,又能夠抗住高并發,對于擴容,我們也可以通過在數據庫中增加配置,以調整id范圍。而它的缺點也很明顯,它很可能因為服務宕機或者內存丟失的原因,導致一段id全部丟棄導致一定的號碼段浪費。

5. 基于redis原子自增指令INCR

按照redis官方的說法,redis單機qps為8~10w(8C16G服務器)并且因為單線程的緣故,redis也能很好的保證id自增的原子性:

所以我們也可以嘗試通過redis原子操作獲取唯一id:

127.0.0.1:6379> set seq_id 1
OK
127.0.0.1:6379> INCR seq_id
(integer) 2
127.0.0.1:6379> INCR seq_id
(integer) 3
127.0.0.1:6379> INCR seq_id
(integer) 4
127.0.0.1:6379>

當然這種方案也有著一定的缺點:

  • 若我們使用rdb持久化機制,一旦redis宕機等原因導致緩存丟失,再次從redis中獲取的id很可能出現沖突。
  • 若使用aof會導致每一條命令都會進行持久化,但也會導致重啟數據恢復時間過長。

所以我們建議通過redis混合持久化機制結合redis高可用架構保證分布式id生成的可靠性,并在業務處理上對這類id沖突進行一定的兜底處理。

6. 雪花算法

(1) 雪花id算法介紹

雪花算法是twitter開發是一中id生成算法,它是由如下幾個因子構成:

  • 1位正數位,即高位為0。
  • 41位時間戳
  • 5位workerid記錄用戶維護當前服務器的id號。
  • 5位的服務id
  • 12位的自增序列

對應結構圖如下所示:

通過雪花算法在毫秒級情況下可以生成大量id,性能出色,且是有序自增的,類型也是long類型,且包含日期和workerid等具備基因特性的因子,可以滿足大部分業務場景的需求,只不過雪花算法也有一些考慮的問題:

  • 時鐘回撥問題:我們都知道雪花算法有41位是時間戳組成,在高并發場景下回撥時間很可能出現相同的時間戳,很可能造成id沖突的場景。
  • 無法滿足多分片鍵場景,雪花算法雖能保證id唯一,對于單一條件綽綽有余,一旦遇到多分片鍵依賴單id的場景就顯得力不從心了。

舉個例子:在商城下單后,我們通過雪花算法生成唯一訂單號,根據hash算法id%table 得到分表名稱。這樣的話,我們通過訂單號可以快速定位到分表并查詢到數據。但是從用戶角度來說,他希望通過自己的uid定位到訂單號就無跡可尋了,所以針對多分片鍵的場景使用雪花算法可以需要結合基因法進行一番改造。

(2) 使用示例

以下是開源工具類hutool提供的雪花工具類,只需兩行代碼即可生成唯一鍵。

@Slf4j
public class Main {
    public static void main(String[] args) {

        Snowflake snowflake = new Snowflake();
        log.info("snowflake:{}", snowflake.nextId());

    }
}

輸出結果如下:

12:23:24.412 [main] INFO com.sharkchili.distIdFactory.Main - snowflake:1740226920726044672

為了驗證唯一性,筆者在單位時間內連續生成100w的雪花id:

@Slf4j
public class Main {
    public static void main(String[] args) {
        Set<Long> idSet = new HashSet<>();
        Snowflake snowflake = new Snowflake();

        for (int i = 0; i < 100_0000; i++) {
            idSet.add(snowflake.nextId());
        }
        log.info("idSe sizet:{}", idSet.size());
    }
}

從輸出結果來看,常規用法下沒有出現id碰撞:

12:35:27.167 [main] INFO com.sharkchili.distIdFactory.Main - idSe sizet:1000000

(3) 雪花id與時鐘回撥問題

我們都知道雪花id是通過時間戳結合自增序列等方式保證分布式id的唯一性,但是這種方案其實也存在一定的缺陷。

我們假設這樣一個場景,我們現在的雪花id工具類在服務器1上,所以在這臺服務器上的id對應的機器id和服務id都是相等的。唯一性都是通過時間戳+自增序列來保證,試想一下如果我們在雪花id工具工作期間,將操作系統時間回撥,這就可能出現之前用過時間戳+自增序列重復,進而導致數據入庫失?。?/p>

對此著名的java工具類庫hutool就做的很好,它會在每次生成雪花id時,維護一下生成的時間戳,每次生成時通過比對本次時間戳和上次時間戳的差值判斷是否出現時鐘回撥:

public synchronized long nextId() {
  long timestamp = genTime();
  //判斷本次回撥的時間是否大于timeOffset(默認2s),即回撥超過2s就報錯
  if (timestamp < this.lastTimestamp) {
   if (this.lastTimestamp - timestamp < timeOffset) {
    // 容忍指定的回撥,避免NTP校時造成的異常
    timestamp = lastTimestamp;
   } else {
    // 如果服務器時間有問題(時鐘后退) 報錯。
    throw new IllegalStateException(StrUtil.format("Clock moved backwards. Refusing to generate id for {}ms", lastTimestamp - timestamp));
   }
  }

  //......
  //維護本次使用的時間戳
  lastTimestamp = timestamp;

  return ((timestamp - twepoch) << TIMESTAMP_LEFT_SHIFT)
    | (dataCenterId << DATA_CENTER_ID_SHIFT)
    | (workerId << WORKER_ID_SHIFT)
    | sequence;
 }

(4) 基于雪花算法下的帶有基因的分布式ID

如上所說,雪花算法中時間戳和workerId這幾個字段都算是有跡可循的因子,作為特定基因可以保證分庫分表不同維度的查詢需求,例如我們現在有這樣一個場景:

  • 按照業務評估我們需要分出3個庫。
  • 每個庫12張表,每張表代表存儲對應月份的數據。
  • 插入時按照月份決定插入的分表,并且數據要盡可能均攤分散到不同的庫中。
  • 查詢時能夠基于id定位到庫源并將數據查詢出來。

由上文提及雪花算法有41位代表生成id的時間戳,所以針對時間分表讀寫都是可以實現的。而上述需求中有3個庫,按照雪花算法的規則,它有5位的workerid,我們完全可以用這幾個bit存儲當前數據所存儲的庫源信息。

我們都知道分庫分表主要是為了解決并發請求和海量數據,所以針對這樣的業務場景,我們勢必會針對該場景設計出相應的集群節點,我們假設當前集群有3個節點,按照分庫分表的設計,我們可以將分庫分表業務對應的服務程序各自初始化一個雪花id生成器,服務的workerId分別對應1、2、3。

假設某用戶請求到的服務1且日期是2025.1.25,由于服務器的workerId為1,所以雪花id的機器id就標記為1,同時基于當前時間點得出41位的時間戳為2025.1.25也就是分表-1,所以我們數據就會寫入到庫1的分表1中:

因為id藏有庫源信息和日期信息,后續定位也非常方便,就像下面這段代碼示例:

//指明workerId為1,即當表當前服務的數據全部存入庫1
        Snowflake snowflake = new Snowflake(1);
        long id = snowflake.nextId();
        //后續數據讀寫都可以基于id定位到
        DateTime date = DateUtil.date(snowflake.getGenerateDateTime(id));
        log.info("分布式id對應的庫源:{} 日期:{}", snowflake.getWorkerId(id), date);

對應的我們也給出這段代碼的輸出結果:

01:13:43.446 [main] INFO com.sharkChili.runner.ESRunner - 分布式id對應的庫源:1 日期:2025-01-25 01:13:43
責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2017-06-19 17:55:22

CASID分布式

2016-11-29 09:12:21

數據庫分布式ID

2024-02-22 17:02:09

IDUUID雪花算法

2021-06-04 20:09:19

ID分布式設計

2020-11-10 07:44:18

分庫分表生成

2023-09-03 22:14:23

分布式ID

2023-01-12 17:46:37

分庫分表id如何生成

2017-07-01 16:02:39

分布式ID生成器

2022-09-07 08:18:26

分布式灰度方案分支號

2020-09-23 09:52:01

分布式WebSocketMQ

2023-03-05 18:23:38

分布式ID節點

2019-09-05 13:06:08

雪花算法分布式ID

2017-07-04 16:18:15

分布式云應用導圖

2024-05-20 08:08:00

分布式系統緩存C#

2025-05-27 03:22:00

分布式ID部署

2024-11-19 15:55:49

2017-12-20 16:15:30

分布式系統架構

2018-04-03 09:27:42

分布式架構系統

2022-04-08 08:27:08

分布式鎖系統

2023-11-29 10:26:52

分布式數據
點贊
收藏

51CTO技術棧公眾號

国产精品高潮呻吟| 一本一道久久综合狠狠老| 精品久久久久久国产91| 国产电影精品久久禁18| 色婷婷亚洲婷婷| 精品国产中文字幕| 樱花视频在线免费观看| 成人免费看片39| 欧美日韩一区在线观看| 亚洲黄色网址在线观看| 天天操天天干天天爽| 日韩av电影天堂| 久久精品国产2020观看福利| 手机精品视频在线| 国产羞羞视频在线播放| 91色视频在线| 成人精品网站在线观看| 久久久久久久蜜桃| 亚洲黄页在线观看| 欧美日本一道本在线视频| 99久re热视频精品98| 人妻精品一区一区三区蜜桃91| 丝袜国产日韩另类美女| 久久精品人人做人人爽| 亚洲の无码国产の无码步美| 国产激情欧美| 午夜精品视频在线观看| 亚洲欧洲精品一区| 污视频网站在线播放| 日韩激情视频网站| 欧美激情久久久久久| 91成人在线免费视频| 一区二区在线免费播放| 欧美亚洲一区二区在线| 国产a级片网站| 日本在线观看网站| 成人av高清在线| 亲子乱一区二区三区电影 | 91视频在线免费观看| 国产精品黄色大片| 欧美涩涩网站| xvideos国产精品| 亚洲综合色一区| 国产精品香蕉| 欧美电视剧在线看免费| 国产福利在线免费| 黑人巨大精品| 精品久久香蕉国产线看观看亚洲| 中文字幕一区二区三区乱码| 欧美理论在线观看| 成人精品亚洲人成在线| 亚洲自拍另类欧美丝袜| 无码人妻黑人中文字幕| 99视频精品免费观看| 久久99国产精品久久久久久久久| 337人体粉嫩噜噜噜| 国产剧情一区| 日韩精品视频在线播放| xxxwww国产| 另类视频一区二区三区| 欧美精品一二三区| 欧美成人黄色网址| 日韩激情电影| 福利微拍一区二区| 欧美久久久久久久久久久久久| av在线导航| 亚洲欧美成aⅴ人在线观看| 亚洲欧美在线网| 自拍视频在线免费观看| 国产免费成人在线视频| 日本一区免费在线观看| 水莓100国产免费av在线播放| 成人国产一区二区三区精品| 99影视tv| 三级网站免费观看| av电影一区二区| 国产精品播放| 噜噜噜久久,亚洲精品国产品| 国产suv精品一区二区6| 国产精品永久免费在线| 一级做a爰片久久毛片16| 美女脱光内衣内裤视频久久影院| 国产精品男人的天堂| 亚洲一区二区影视| 欧美96一区二区免费视频| 国产精品老女人精品视频| 亚洲天堂999| 精彩视频一区二区三区| 99电影网电视剧在线观看| 亚洲爱爱综合网| 91在线视频免费观看| 欧美h视频在线| 成人综合影院| 亚洲日本电影在线| 国产成人亚洲综合无码| 99久久精品免费看国产小宝寻花| 天天做天天摸天天爽国产一区| 自慰无码一区二区三区| 欧美极品影院| 在线观看日产精品| 亚洲理论中文字幕| 噜噜噜狠狠夜夜躁精品仙踪林| 亚洲精品天天看| 天天操夜夜操av| 99pao成人国产永久免费视频| 国产91精品久久久久久| 亚洲无码精品在线播放| 国产精品中文字幕日韩精品| 精品欧美日韩在线| freemovies性欧美| 一区二区视频在线| 欧美成人xxxxx| 玖玖精品在线| 欧美久久久久久久久中文字幕| 美女被艹视频网站| 国产成人av| 欧美人与物videos| 波多野结衣午夜| 成人精品免费网站| 亚洲一区二区不卡视频| 青春草在线免费视频| 色8久久人人97超碰香蕉987| 午夜激情视频网| 国产毛片一区二区三区| 欧美精品一二区| 中文字幕久久久久| 国产高清在线精品| 色播亚洲视频在线观看| yellow91字幕网在线| 在线中文字幕一区二区| 免费无码av片在线观看| 午夜免费欧美电影| 亚洲色图校园春色| 国产精品a成v人在线播放| 久久精品国产精品亚洲精品| 99在线视频首页| 蜜桃视频网站在线| 色综合久久中文字幕| 久久久精品人妻一区二区三区| 精品视频免费在线观看| 91精品国产高清久久久久久| 伊人网av在线| 不卡视频在线看| 国产成人亚洲综合无码| 国产成人免费精品| 亚洲深夜福利视频| 国产一卡二卡在线| 国产成人免费视频一区| 美乳视频一区二区| 国产乱码午夜在线视频 | 精品二区在线观看| 中文字幕高清不卡| 亚洲五月天综合| 日韩大片在线免费观看| 国内精品一区二区三区四区| 精品人妻一区二区三区含羞草| 国产欧美综合在线观看第十页| 国产精品久久99| 丰满爆乳一区二区三区| 亚洲国产一区二区三区网站| 久久久999国产| 国产精品伦一区二区三区| 91免费视频观看| 亚洲午夜精品久久久久久人妖| 成人精品动漫一区二区三区| 久久久久久久香蕉网| 99热这里只有精品3| 亚洲天堂av一区| 一级黄色片国产| 久久久久午夜电影| 亚洲jizzjizz日本少妇| 精品黄色免费中文电影在线播放| 欧美日韩国产成人在线91| 成人无码精品1区2区3区免费看| 日韩不卡在线观看日韩不卡视频| 日本高清一区| a屁视频一区二区三区四区| 伊人激情综合网| 中文字幕网址在线| 国产精品成人一区二区艾草| 91女神在线观看| 999久久久国产精品| 成人夜晚看av| 国产黄a三级三级三级av在线看| 欧美精品三级在线观看| 黄色a级片在线观看| 国产精品18久久久久久久久 | 男女无套免费视频网站动漫| 国产欧美日韩| 91精品久久久久久久久久入口| 久久综合之合合综合久久| 日韩女同互慰一区二区| 久久露脸国语精品国产91| 国产盗摄精品一区二区三区在线 | 国产香蕉精品| 欧美在线性爱视频 | 亚洲精品一区二区三区蜜桃久| 精品久久毛片| 欧美高清激情视频| 色视频免费在线观看| 在线观看网站黄不卡| 97成人资源站| 成人h动漫精品| a级黄色一级片| 欧美日韩有码| 99久久一区三区四区免费| 超碰在线免费公开| 日韩电影中文字幕av| www.久久网| 亚洲色图制服诱惑| 中文字幕日韩三级片| 日本少妇一区二区| 特级西西人体www高清大胆| 婷婷综合福利| 国产综合香蕉五月婷在线| 丰满的护士2在线观看高清| 精品一区二区电影| 国产裸体无遮挡| 一本大道久久a久久综合婷婷| 一级黄色片日本| 91香蕉国产在线观看软件| 中文字幕12页| 久久久久免费| 乱熟女高潮一区二区在线| 国产一区2区| 国产精品一区二区免费| jizz欧美| 欧美亚洲成人网| 91麻豆一二三四在线| 亚洲欧美日韩直播| 亚洲精品无遮挡| 欧洲中文字幕精品| 国产一级精品视频| 亚洲色图在线视频| 一区二区三区久久久久| 久久久久国产精品麻豆| 黄色片视频免费观看| 成人97人人超碰人人99| 性猛交╳xxx乱大交| 国产一级精品在线| 久久综合桃花网| 国产成人综合亚洲91猫咪| xxx中文字幕| 国产乱对白刺激视频不卡| 久久6免费视频| 激情五月少妇a| 99久久精品一区二区| 国产污在线观看| 成人久久视频在线观看| 黄色国产在线视频| 不卡一区二区中文字幕| 玖草视频在线观看| 久久久久久久久久久久久夜| a天堂中文字幕| 国产色产综合色产在线视频| 日本污视频网站| **性色生活片久久毛片| 午夜精品福利在线视频| 一区二区三区在线免费| 精品亚洲永久免费| 五月天久久比比资源色| 在线观看日本视频| 在线视频国内自拍亚洲视频| 伊人影院中文字幕| 欧美一区二区三区免费| 性少妇videosexfreexxx片| 亚洲白拍色综合图区| 日本一区视频| 这里只有精品久久| 国产在线观看免费麻豆| 欧美国产精品va在线观看| 7777kkk亚洲综合欧美网站| 日本成人精品在线| 欧美视频第一| 成人在线看片| 免费国产自久久久久三四区久久| 亚洲一区二区高清视频| 激情自拍一区| 国产成人精品无码播放| 狠狠色综合播放一区二区| 波多野结衣一二三区| 日本一区二区高清| 精品99久久久久成人网站免费| 欧美日韩亚洲激情| 一级片在线免费观看视频| 亚洲第一区中文99精品| chinese偷拍一区二区三区| 欧美激情一二三| 成人自拍av| 97超级碰碰| 亚洲免费福利一区| 久久视频免费在线| 老司机一区二区三区| 亚洲一级片av| 91美女在线观看| 天天干中文字幕| 日韩欧美亚洲综合| 国产精品国产精品国产专区| 精品国产乱子伦一区| 搞黄视频在线观看| 久久全球大尺度高清视频| 2019年精品视频自拍| 国产99在线免费| 日韩综合网站| 激情伊人五月天| 国产精品一区专区| 欧美成人国产精品一区二区| 亚洲精品videosex极品| 中文字幕乱码在线观看| 亚洲成色999久久网站| 美女羞羞视频在线观看| 国产福利精品视频| 久久国产精品免费精品3p| 一区视频二区视频| 久久这里有精品15一区二区三区| 中文字幕一二三| 国产精品乱码一区二区三区软件| 国内精品福利视频| 日韩精品中文字幕在线一区| 日日夜夜精品一区| 国产成人综合av| 小嫩嫩12欧美| 黄色www网站| 国产成人精品免费| 91传媒免费观看| 欧美精品久久99久久在免费线 | 免费毛片网站在线观看| 精品一区二区三区香蕉蜜桃| 国产第一页精品| 91黄色在线观看| 欧洲伦理片一区 二区 三区| 高清欧美性猛交xxxx| 日韩三级精品| 欧美另类videosbestsex日本| 美女一区二区三区| 99久久99久久精品免费看小说.| 日本高清成人免费播放| 婷婷国产在线| 欧美一区二区三区图| 日韩精品亚洲aⅴ在线影院| 97视频在线免费| 成人午夜短视频| 日韩欧美a级片| 亚洲第一网中文字幕| 精品人人视频| 国产视频精品网| 在线视频观看日韩| 国产一级伦理片| 欧美日韩一区二区三区 | 久久你懂得1024| 天天干天天色综合| 亚洲男人的天堂在线| 综合另类专区| 天堂社区 天堂综合网 天堂资源最新版| 性娇小13――14欧美| 美女久久久久久久久久| 91国产成人在线| 91在线观看| 国产美女久久精品| 68国产成人综合久久精品| www.五月天色| 亚洲国产综合色| 香蕉久久国产av一区二区| 欧美一区第一页| 国语产色综合| 中文av字幕在线观看| 一区二区三区在线观看国产| 人妻丰满熟妇av无码区hd| 欧美中文字幕在线播放| 成久久久网站| 性色av浪潮av| 午夜精品福利在线| 二区三区在线| 51成人做爰www免费看网站| 亚洲精品婷婷| 99在线视频免费| 欧美一级国产精品| 天堂中文最新版在线中文| 污视频在线免费观看一区二区三区| 激情综合色播激情啊| 日本网站在线播放| 在线观看国产精品日韩av| 精品国产亚洲日本| 美女日批免费视频| 国产精品久久久久久妇女6080| 精品久久在线观看| 欧洲中文字幕国产精品| 亚洲女同另类| 在线观看国产网站| 777精品伊人久久久久大香线蕉| 国产乱码在线| 神马影院午夜我不卡| 成人免费看视频| 中文字幕+乱码+中文字幕明步| 久久国产精品久久精品| 最新国产一区| 女同性αv亚洲女同志| 欧洲亚洲精品在线| 欧美hdxxxxx| 一区二区冒白浆视频|