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

圖解一致性哈希算法

開發 前端 算法
要了解一致性哈希,首先我們必須了解傳統的哈希及其在大規模分布式系統中的局限性。

[[380706]]

 本文轉載自微信公眾號「全棧修仙之路」,作者阿寶哥   。轉載本文請聯系全棧修仙之路公眾號。

要了解一致性哈希,首先我們必須了解傳統的哈希及其在大規模分布式系統中的局限性。簡單地說,哈希就是一個鍵值對存儲,在給定鍵的情況下,可以非常高效地找到所關聯的值。假設我們要根據其郵政編碼查找城市中的街道名稱。一種最簡單的實現方式是將此信息以哈希字典的形式進行存儲 。

當數據太大而無法存儲在一個節點或機器上時,問題變得更加有趣,系統中需要多個這樣的節點或機器來存儲它。比如,使用多個 Web 緩存中間件的系統。那如何確定哪個 key 存儲在哪個節點上?針對該問題,最簡單的解決方案是使用哈希取模來確定。 給定一個 key,先對 key 進行哈希運算,將其除以系統中的節點數,然后將該 key 放入該節點。同樣,在獲取 key 時,對 key 進行哈希運算,再除以節點數,然后轉到該節點并獲取值。上述過程對應的哈希算法定義如下:

  1. node_number = hash(key) % N # 其中 N 為節點數。 

下圖描繪了多節點系統中的傳統的哈希取模算法,基于該算法可以實現簡單的負載均衡。

一、傳統哈希取模算法的局限性

下面我們來分析一下傳統的哈希及其在大規模分布式系統中的局限性。這里我們直接使用我之前所寫文章 布隆過濾器你值得擁有的開發利器 中定義的 SimpleHash 類,然后分別對 semlinker、kakuqo 和 test 3 個鍵進行哈希運算并取余,具體代碼如下:

  1. public class SimpleHash { 
  2.     private int cap; 
  3.     private int seed; 
  4.  
  5.     public SimpleHash(int cap, int seed) { 
  6.         this.cap = cap; 
  7.         this.seed = seed; 
  8.     } 
  9.  
  10.     public int hash(String value) { 
  11.         int result = 0; 
  12.         int len = value.length(); 
  13.         for (int i = 0; i < len; i++) { 
  14.             result = seed * result + value.charAt(i); 
  15.         } 
  16.         return (cap - 1) & result; 
  17.     } 
  18.  
  19.     public static void main(String[] args) { 
  20.         SimpleHash simpleHash = new SimpleHash(2 << 12, 8); 
  21.         System.out.println("node_number=hash(\"semlinker\") % 3 -> " +  
  22.           simpleHash.hash("semlinker") % 3); 
  23.         System.out.println("node_number=hash(\"kakuqo\") % 3 -> " +  
  24.           simpleHash.hash("kakuqo") % 3); 
  25.         System.out.println("node_number=hash(\"test\") % 3 -> " +  
  26.           simpleHash.hash("test") % 3); 
  27.     } 

以上代碼成功運行后,在控制臺會輸出以下結果:

  1. node_number=hash("semlinker") % 3 -> 1 
  2. node_number=hash("kakuqo") % 3 -> 2 
  3. node_number=hash("test") % 3 -> 0 

基于以上的輸出結果,我們可以創建以下表格:

1.1 節點減少的場景

在分布式多節點系統中,出現故障很常見。任何節點都可能在沒有任何事先通知的情況下掛掉,針對這種情況我們期望系統只是出現性能降低,正常的功能不會受到影響。 對于原始示例,當節點出現故障時會發生什么?原始示例中有的 3 個節點,假設其中 1 個節點出現故障,這時節點數發生了變化,節點個數從 3 減少為 2,此時表格的狀態發生了變化:

很明顯節點的減少會導致鍵與節點的映射關系發生變化,這個變化對于新的鍵來說并不會產生任何影響,但對于已有的鍵來說,將導致節點映射錯誤,以 “semlinker” 為例,變化前系統有 3 個節點,該鍵對應的節點編號為 1,當出現故障時,節點數減少為 2 個,此時該鍵對應的節點編號為 0。

1.2 節點增加的場景

在分布式多節點系統中,對于某些場景比如節日大促,就需要對服務節點進行擴容,以應對突發的流量。 對于原始示例,當增加節點會發生什么?原始示例中有的 3 個節點,假設進行擴容臨時增加了 1 個節點,這時節點數發生了變化,節點個數從 3 增加為 4 個,此時表格的狀態發生了變化:

很明顯節點的增加也會導致鍵與節點的映射關系發生變化,這個變化對于新的鍵來說并不會產生任何影響,但對于已有的鍵來說,將導致節點映射錯誤,同樣以 “semlinker” 為例,變化前系統有 3 個節點,該鍵對應的節點編號為 1,當增加節點時,節點數增加為 4 個,此時該鍵對應的節點編號為 2。

當集群中節點的數量發生變化時,之前的映射規則就可能發生變化。如果集群中每個機器提供的服務沒有差別,這不會有什么影響。但對于分布式緩存這種的系統而言,映射規則失效就意味著之前緩存的失效,若同一時刻出現大量的緩存失效,則可能會出現 “緩存雪崩”,這將會造成災難性的后果。

要解決此問題,我們必須在其余節點上重新分配所有現有鍵,這可能是非常昂貴的操作,并且可能對正在運行的系統產生不利影響。當然除了重新分配所有現有鍵的方案之外,還有另一種更好的方案即使用一致性哈希算法。

二、一致性哈希算法

一致性哈希算法在 1997 年由麻省理工學院提出,是一種特殊的哈希算法,在移除或者添加一個服務器時,能夠盡可能小地改變已存在的服務請求與處理請求服務器之間的映射關系。一致性哈希解決了簡單哈希算法在分布式哈希表(Distributed Hash Table,DHT)中存在的動態伸縮等問題 。

2.1 一致性哈希算法優點

  • 可擴展性。一致性哈希算法保證了增加或減少服務器時,數據存儲的改變最少,相比傳統哈希算法大大節省了數據移動的開銷 。
  • 更好地適應數據的快速增長。采用一致性哈希算法分布數據,當數據不斷增長時,部分虛擬節點中可能包含很多數據、造成數據在虛擬節點上分布不均衡,此時可以將包含數據多的虛擬節點分裂,這種分裂僅僅是將原有的虛擬節點一分為二、不需要對全部的數據進行重新哈希和劃分。

虛擬節點分裂后,如果物理服務器的負載仍然不均衡,只需在服務器之間調整部分虛擬節點的存儲分布。這樣可以隨數據的增長而動態的擴展物理服務器的數量,且代價遠比傳統哈希算法重新分布所有數據要小很多。

2.2 一致性哈希算法與哈希算法的關系

一致性哈希算法是在哈希算法基礎上提出的,在動態變化的分布式環境中,哈希算法應該滿足的幾個條件:平衡性、單調性和分散性。

  • 平衡性:是指 hash 的結果應該平均分配到各個節點,這樣從算法上解決了負載均衡問題。
  • 單調性:是指在新增或者刪減節點時,不影響系統正常運行。
  • 分散性:是指數據應該分散地存放在分布式集群中的各個節點(節點自己可以有備份),不必每個節點都存儲所有的數據。

三、一致性哈希算法原理

一致性哈希算法通過一個叫作一致性哈希環的數據結構實現。這個環的起點是 0,終點是 2^32 - 1,并且起點與終點連接,故這個環的整數分布范圍是 [0, 2^32-1],如下圖所示:

3.1 將對象放置到哈希環

假設我們有 "semlinker"、"kakuqo"、"lolo"、"fer" 四個對象,分別簡寫為 o1、o2、o3 和 o4,然后使用哈希函數計算這個對象的 hash 值,值的范圍是 [0, 2^32-1]:

圖中對象的映射關系如下:

  1. hash(o1) = k1; hash(o2) = k2; 
  2. hash(o3) = k3; hash(o4) = k4; 

3.2 將服務器放置到哈希環

接著使用同樣的哈希函數,我們將服務器也放置到哈希環上,可以選擇服務器的 IP 或主機名作為鍵進行哈希,這樣每臺服務器就能確定其在哈希環上的位置。這里假設我們有 3 臺緩存服務器,分別為 cs1、cs2 和 cs3:

圖中服務器的映射關系如下:

  1. hash(cs1) = t1; hash(cs2) = t2; hash(cs3) = t3; # Cache Server 

3.3 為對象選擇服務器

將對象和服務器都放置到同一個哈希環后,在哈希環上順時針查找距離這個對象的 hash 值最近的機器,即是這個對象所屬的機器。 以 o2 對象為例,順序針找到最近的機器是 cs2,故服務器 cs2 會緩存 o2 對象。而服務器 cs1 則緩存 o1,o3 對象,服務器 cs3 則緩存 o4 對象。

3.4 服務器增加的情況

假設由于業務需要,我們需要增加一臺服務器 cs4,經過同樣的 hash 運算,該服務器最終落于 t1 和 t2 服務器之間,具體如下圖所示:

圖片

對于上述的情況,只有 t1 和 t2 服務器之間的對象需要重新分配。在以上示例中只有 o3 對象需要重新分配,即它被重新到 cs4 服務器。在前面我們已經分析過,如果使用簡單的取模方法,當新添加服務器時可能會導致大部分緩存失效,而使用一致性哈希算法后,這種情況得到了較大的改善,因為只有少部分對象需要重新分配。

3.5 服務器減少的情況

假設 cs3 服務器出現故障導致服務下線,這時原本存儲于 cs3 服務器的對象 o4,需要被重新分配至 cs2 服務器,其它對象仍存儲在原有的機器上。

3.6 虛擬節點

到這里一致性哈希的基本原理已經介紹完了,但對于新增服務器的情況還存在一些問題。新增的服務器 cs4 只分擔了 cs1 服務器的負載,服務器 cs2 和 cs3 并沒有因為 cs4 服務器的加入而減少負載壓力。如果 cs4 服務器的性能與原有服務器的性能一致甚至可能更高,那么這種結果并不是我們所期望的。

針對這個問題,我們可以通過引入虛擬節點來解決負載不均衡的問題。即將每臺物理服務器虛擬為一組虛擬服務器,將虛擬服務器放置到哈希環上,如果要確定對象的服務器,需先確定對象的虛擬服務器,再由虛擬服務器確定物理服務器。

圖中 o1 和 o2 表示對象,v1 ~ v6 表示虛擬服務器,s1 ~ s3 表示物理服務器。

四、一致性哈希算法實現

這里我們只介紹不帶虛擬節點的一致性哈希算法實現:

  1. import java.util.SortedMap; 
  2. import java.util.TreeMap; 
  3.  
  4. public class ConsistentHashingWithoutVirtualNode { 
  5.     //待添加入Hash環的服務器列表 
  6.     private static String[] servers = {"192.168.0.1:8888""192.168.0.2:8888",  
  7.       "192.168.0.3:8888"}; 
  8.  
  9.     //key表示服務器的hash值,value表示服務器 
  10.     private static SortedMap<Integer, String> sortedMap = new TreeMap<Integer, String>(); 
  11.  
  12.     //程序初始化,將所有的服務器放入sortedMap中 
  13.     static { 
  14.         for (int i = 0; i < servers.length; i++) { 
  15.             int hash = getHash(servers[i]); 
  16.             System.out.println("[" + servers[i] + "]加入集合中, 其Hash值為" + hash); 
  17.             sortedMap.put(hash, servers[i]); 
  18.         } 
  19.     } 
  20.  
  21.     //得到應當路由到的結點 
  22.     private static String getServer(String key) { 
  23.         //得到該key的hash值 
  24.         int hash = getHash(key); 
  25.         //得到大于該Hash值的所有Map 
  26.         SortedMap<Integer, String> subMap = sortedMap.tailMap(hash); 
  27.         if (subMap.isEmpty()) { 
  28.             //如果沒有比該key的hash值大的,則從第一個node開始 
  29.             Integer i = sortedMap.firstKey(); 
  30.             //返回對應的服務器 
  31.             return sortedMap.get(i); 
  32.         } else { 
  33.             //第一個Key就是順時針過去離node最近的那個結點 
  34.             Integer i = subMap.firstKey(); 
  35.             //返回對應的服務器 
  36.             return subMap.get(i); 
  37.         } 
  38.     } 
  39.  
  40.     //使用FNV1_32_HASH算法計算服務器的Hash值 
  41.     private static int getHash(String str) { 
  42.         final int p = 16777619; 
  43.         int hash = (int) 2166136261L; 
  44.         for (int i = 0; i < str.length(); i++) 
  45.             hash = (hash ^ str.charAt(i)) * p; 
  46.         hash += hash << 13; 
  47.         hash ^= hash >> 7; 
  48.         hash += hash << 3; 
  49.         hash ^= hash >> 17; 
  50.         hash += hash << 5; 
  51.  
  52.         // 如果算出來的值為負數則取其絕對值 
  53.         if (hash < 0) 
  54.             hash = Math.abs(hash); 
  55.         return hash; 
  56.     } 
  57.  
  58.     public static void main(String[] args) { 
  59.         String[] keys = {"semlinker""kakuqo""fer"}; 
  60.         for (int i = 0; i < keys.length; i++) 
  61.             System.out.println("[" + keys[i] + "]的hash值為" + getHash(keys[i]) 
  62.                     + ", 被路由到結點[" + getServer(keys[i]) + "]"); 
  63.     } 
  64.  

以上代碼成功運行后,在控制臺會輸出以下結果:

  1. [192.168.0.1:8888]加入集合中, 其Hash值為1326271016 
  2. [192.168.0.2:8888]加入集合中, 其Hash值為1132535844 
  3. [192.168.0.3:8888]加入集合中, 其Hash值為115798597 
  4.  
  5. [semlinker]的hash值為1549041406, 被路由到結點[192.168.0.3:8888] 
  6. [kakuqo]的hash值為463104755, 被路由到結點[192.168.0.2:8888] 
  7. [fer]的hash值為1677150790, 被路由到結點[192.168.0.3:8888] 

上面我們只介紹了不帶虛擬節點的一致性哈希算法實現,如果有的小伙伴對帶虛擬節點的一致性哈希算法感興趣,可以參考 一致性Hash(Consistent Hashing)原理剖析及Java實現 這篇文章。

五、總結

本文通過示例介紹了傳統的哈希取模算法在分布式系統中的局限性,進而在針對該問題的解決方案中引出了一致性哈希算法。一致性哈希算法在 1997 年由麻省理工學院提出,是一種特殊的哈希算法,在移除或者添加一個服務器時,能夠盡可能小地改變已存在的服務請求與處理請求服務器之間的映射關系。在介紹完一致性哈希算法的作用和優點等相關知識后,我們以圖解的形式生動介紹了一致性哈希算法的原理,最后給出了不帶虛擬節點的一致性哈希算法的 Java 實現。

六、參考資源

百度百科 - 一致性哈希

知乎 - 面試必備:什么是一致性 Hash 算法

Leo - 一致性Hash-Consistent-Hashing 原理剖析

CSDN - 一致性Hash(Consistent Hashing)原理剖析及Java實現

Codeproject - consistent-hashing

 

責任編輯:武曉燕 來源: 全棧修仙之路
相關推薦

2020-07-20 08:30:37

算法哈希分布式系統

2025-09-08 07:25:16

2021-07-27 08:57:10

算法一致性哈希哈希算法

2016-12-19 18:41:09

哈希算法Java數據

2019-10-11 23:27:19

分布式一致性算法開發

2021-02-02 12:40:50

哈希算法數據

2023-12-12 08:00:50

節點哈希算法

2018-07-05 09:41:08

一致性哈希算法

2019-11-01 09:13:37

算法哈希緩存

2021-06-30 21:13:49

CPUCache數據

2021-09-15 07:46:42

哈希一致性哈希算法

2023-06-25 09:44:00

一致性哈希數據庫

2023-06-26 07:17:48

負載均衡策略Dubbo

2022-03-22 09:54:22

Hash算法

2023-12-20 08:11:02

Redis節點通信

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2021-11-12 08:38:26

一致性哈希算法數據結構

2023-12-05 14:44:01

2021-08-13 07:56:13

Raft算法日志

2020-03-16 11:55:28

PaxosRaft協議
點贊
收藏

51CTO技術棧公眾號

在线观看成人av| 国产精品欧美亚洲777777| www.黄色网| 免费看男女www网站入口在线| 99久久久精品| 国产精品日韩在线| 黄色一级视频免费观看| 在线观看欧美理论a影院| 欧美日韩色综合| 欧美激情亚洲天堂| 欧美色18zzzzxxxxx| 久久成人久久爱| 国内精品久久久久伊人av| 一区二区三区伦理片| 精品一区二区三区在线观看视频 | 超碰在线观看97| 日本中文字幕久久| 欧美不卡在线| 国产一区二区三区精品久久久| 成人高清在线观看视频| 国产日韩电影| 亚洲影院久久精品| 在线视频福利一区| 国产区av在线| 不卡av电影在线播放| 成人欧美一区二区三区黑人| 中文字幕视频网站| 欧美精品97| www欧美日韩| 中字幕一区二区三区乱码| 久久午夜影院| 精品国精品国产| 污视频在线观看免费网站| 国产精成人品2018| 色一情一乱一乱一91av| 无码粉嫩虎白一线天在线观看 | 日本一区二区在线不卡| 好看的日韩精品视频在线| av网站在线免费看| 精品一区二区免费视频| 国产精品久久久久7777婷婷| 亚洲精品1区2区3区| 欧美精品一卡| 欧美富婆性猛交| 91久久国产综合| 小处雏高清一区二区三区| 在线播放国产一区中文字幕剧情欧美| 中国黄色a级片| 亚洲国产精品嫩草影院久久av| 精品免费视频一区二区| 免费看三级黄色片| 麻豆一区在线| 欧美成人精精品一区二区频| 韩国三级hd中文字幕有哪些| 亚洲国产欧美国产第一区| 在线观看91av| 红桃视频一区二区三区免费| 精品久久国产一区| 日韩欧美aaaaaa| 色婷婷狠狠18禁久久| 亚洲精品视频一二三区| 精品国产一区二区三区av性色| 久久久久亚洲AV成人网人人小说| 亚洲精品一区二区三区在线| 精品国产欧美一区二区| 男人网站在线观看| 亚洲三级网页| 上原亚衣av一区二区三区| 国产又粗又猛又爽又黄的视频四季 | 免费在线观看a视频| 成人嘿咻视频免费看| 在线观看日韩av| 992在线观看| 7777久久香蕉成人影院| 欧美国产第二页| 日本黄色片视频| 三级不卡在线观看| 国产精品色视频| 国产三级自拍视频| 从欧美一区二区三区| 久久影院理伦片| h视频在线观看免费| 中文字幕在线观看不卡视频| 国产女主播av| 国产精品13p| 欧美视频一区二区在线观看| 无人码人妻一区二区三区免费| 9l亚洲国产成人精品一区二三 | 中文字幕在线播放| 亚洲精品菠萝久久久久久久| 国产中文字幕二区| 精品网站在线| 精品福利在线导航| 你懂得视频在线观看| 自拍视频亚洲| 国产91免费看片| 99久久精品国产一区二区成人| 成人妖精视频yjsp地址| 欧美日韩在线不卡一区| 91国内在线| 日本道精品一区二区三区| 亚洲天堂一区二区在线观看| 无码日韩精品一区二区免费| 日韩在线观看精品| 久久精品国产成人av| 精品制服美女久久| 欧美大陆一区二区| 中文字幕免费高清电视剧网站在线观看| 欧美体内谢she精2性欧美| 簧片在线免费看| 久久大胆人体视频| 欧美尺度大的性做爰视频| 69亚洲精品久久久蜜桃小说| 国产激情91久久精品导航 | 成人性生交大片免费看小说| 无码国产色欲xxxx视频| 最近日韩中文字幕| 中文字幕国产传媒| 欧美偷窥清纯综合图区| 欧美乱人伦中文字幕在线| 伊人成人在线观看| 久久久久久久国产精品影院| 国产一线二线三线女| 99re8精品视频在线观看| 精品亚洲一区二区三区在线观看| 欧美黄色一区二区三区| 精品一区二区日韩| 亚洲精品视频一二三| 中文字幕av一区二区三区佐山爱| 精品成人免费观看| 欧美日韩成人免费观看| 精品亚洲成a人在线观看| 日本高清不卡一区二区三| 色是在线视频| 亚洲精品wwwww| 久青草免费视频| 国产乱子伦一区二区三区国色天香 | 怡红院亚洲色图| av亚洲在线观看| 国产盗摄xxxx视频xxx69| 视频午夜在线| 亚洲国产视频a| 69久久精品无码一区二区| 99国产精品一区二区| 国产精品青草久久久久福利99| 国产在线黄色| 色婷婷精品大视频在线蜜桃视频| 动漫精品一区二区三区| 亚洲精品国产日韩| 国产欧美一区二区在线播放| 成全电影大全在线观看| 日韩免费福利电影在线观看| 免费在线看黄网址| 国产成人精品亚洲日本在线桃色| 久久免费一级片| 亚洲一区二区三区中文字幕在线观看 | 成人精品久久av网站| 在线观看免费网站黄| 在线播放中文字幕一区| 尤物在线免费视频| 国产一区二区三区精品视频| 色爽爽爽爽爽爽爽爽| 日韩国产在线不卡视频| 欧美华人在线视频| 午夜影院免费体验区| 色综合久久久久综合| 性欧美精品中出| 蜜臀久久久99精品久久久久久| 亚洲高清视频一区二区| 亚洲精品一区av| 欧美激情欧美激情在线五月| 四虎永久在线精品免费网址| 黑人巨大精品欧美一区二区一视频| 国产av自拍一区| 久久精品国产精品亚洲红杏| 青草全福视在线| 久久综合另类图片小说| 日韩美女中文字幕| 黄色一级片在线观看| 精品国免费一区二区三区| 91久久国产综合久久91| 国产精品久久久久9999吃药| 肉丝美足丝袜一区二区三区四| 性久久久久久| 一区二区三区我不卡| 白白在线精品| 国产精品久久久久7777婷婷| 天堂亚洲精品| 在线观看中文字幕亚洲| 亚洲精品成人区在线观看| 日韩欧美高清在线视频| 日本二区三区视频| 99re这里只有精品6| 九九热99视频| 一区二区国产精品| 在线免费观看成人网| 日韩av不卡一区| 91精品久久久久久久久久另类 | 亚洲影视一区| 精品伦理一区二区三区 | 国产精品v欧美精品v日韩| 欧美羞羞视频| 欧美福利在线观看| 99免在线观看免费视频高清| 亚洲第一区中文99精品| 亚洲天堂视频网| 欧美视频精品一区| 日本在线一级片| 国产日韩精品视频一区| 扒开伸进免费视频| 精品一区二区影视| 国产三级日本三级在线播放| 激情久久婷婷| 色中文字幕在线观看| 欧美猛男男男激情videos| 国产亚洲一区二区三区在线播放| 中文成人在线| 国产成人综合亚洲| 理论不卡电影大全神| 欧美日韩第一页| 黄色动漫在线观看| 国产午夜精品全部视频在线播放| 神马午夜精品95| 日韩欧美精品在线视频| 一级特黄aaa大片在线观看| 欧美网站在线观看| 国产在线免费视频| 亚洲精品国产a久久久久久 | 男人的天堂在线视频| 亚洲国产精品电影在线观看| 99热这里只有精| 制服丝袜日韩国产| 一级黄色短视频| 欧美日韩一区二区在线视频| 中文字幕一区二区人妻视频| 日韩欧美国产成人| 国产伦精品一区二区三区视频我| 午夜av区久久| 一级片免费网址| 亚洲国产一区在线观看| 久久久一区二区三区四区| 亚洲精品一二三| 国产午夜精品理论片| 18欧美乱大交hd1984| 亚洲女人久久久| 综合婷婷亚洲小说| 国产精品视频看看| 国产精品国产三级国产aⅴ入口 | 黑人一区二区三区四区五区| 国产对白在线播放| 综合一区二区三区| 国产精品8888| 国产精品av久久久久久麻豆网| 男人天堂网站在线| 欧美区亚洲区| 亚洲熟妇无码一区二区三区| 中文日韩欧美| 热久久精品国产| 免费人成网站在线观看欧美高清| 91女神在线观看| 国产精品中文有码| 一级黄色免费视频| 91欧美一区二区| 1024手机在线观看你懂的| 中文字幕一区不卡| 九九九免费视频| 精品成人久久av| 亚洲无码精品一区二区三区| 欧美日韩亚洲不卡| www.av网站| 亚洲成人亚洲激情| 黄色的视频在线免费观看| 最近2019年日本中文免费字幕| 大片免费在线观看| 午夜精品www| 日韩欧美精品一区二区综合视频| 国产日韩一区在线| 高清一区二区三区| 丝袜足脚交91精品| 午夜欧美精品| 久草资源站在线观看| 美日韩一级片在线观看| 日本精品一二三区| 久久精品一区二区| 疯狂试爱三2浴室激情视频| 婷婷久久综合九色综合伊人色| 少妇无套内谢久久久久| 日韩三级高清在线| 国产一二三区在线视频| 美女精品视频一区| 免费成人动漫| 亚洲一区二区在线| 免费视频国产一区| 四虎精品欧美一区二区免费| 性久久久久久| 黑人性生活视频| 欧美激情中文不卡| 日韩精品一区二区三区国语自制| 欧美日韩在线精品一区二区三区激情 | av资源中文在线天堂| 国产欧美日韩亚洲精品| 欧美wwwsss9999| 2021国产视频| 日韩中文欧美在线| 国产+高潮+白浆+无码| 国产精品不卡一区| 91丝袜一区二区三区| 欧美一区二区三区免费视频| 黄色毛片在线看| 午夜精品久久久久久久男人的天堂 | 黄色片免费在线观看| 欧美亚洲一级片| 91九色鹿精品国产综合久久香蕉| 亚洲成人18| 久久狠狠婷婷| 午夜久久久久久久| 一区二区在线看| 一级做a爱片久久毛片| 亚洲色图国产精品| 24小时免费看片在线观看| 成人字幕网zmw| 久久一级电影| 亚洲综合色在线观看| 国产色产综合色产在线视频| 国产成人一区二区三区影院在线| 日韩一级视频免费观看在线| 免费在线午夜视频| 国产精品欧美日韩久久| 国产一区二区三区四区大秀| 97国产精东麻豆人妻电影| 丁香婷婷综合网| 久操视频免费在线观看| 欧美一级一级性生活免费录像| 夜级特黄日本大片_在线| 国产精品扒开腿做爽爽爽视频 | 中文字幕日韩av| 欧美色999| 日本一区二区在线视频观看| 亚洲欧美网站| 久久久久久久久免费看无码 | 99热在线只有精品| 久久亚洲影音av资源网| 四虎国产精品永久在线国在线| 午夜精品区一区二区三| 日韩电影在线免费| xxxx日本黄色| 欧美日韩综合在线| 色综合久久影院| 国产综合在线观看视频| 羞羞色午夜精品一区二区三区| 91福利免费观看| 亚洲欧美色图小说| 国产黄色高清视频| 九九久久久久99精品| 国产精品久久久网站| 日韩小视频在线播放| 久久综合狠狠综合久久激情| 一级黄色在线视频| 深夜成人在线观看| 99视频这里有精品| 丁香色欲久久久久久综合网| www.亚洲色图.com| 国产精品久久久久久人| 一二美女精品欧洲| а天堂中文最新一区二区三区| 超级碰在线观看| 99精品一区二区| 天堂免费在线视频| 日韩一区二区av| 成人偷拍自拍| 欧美激情精品久久久久久小说| 国产精品不卡在线| 国模私拍视频在线| 欧美一区二区三区免费视| 第一会所sis001亚洲| 97超碰人人看| 欧美午夜片在线免费观看| 91美女视频在线| av色综合网| 视频一区在线播放| 中文字幕五月天| 精品亚洲男同gayvideo网站| 欧洲亚洲精品久久久久| 韩日视频在线观看| 中文字幕不卡在线观看| 亚洲精品97久久中文字幕无码| 国产成人精品一区二区在线| 午夜天堂精品久久久久| 波多野结衣福利| 91精品国产综合久久国产大片| 免费h在线看| 中文字幕色呦呦| 日本一区二区三区四区| 亚洲国产福利视频| 国产成人在线一区二区| 亚洲香蕉网站| 日韩一卡二卡在线观看| 亚洲激情视频网站| www欧美在线观看| 国产男女激情视频|