精品欧美一区二区三区在线观看 _久久久久国色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一级大片| 国产农村老头老太视频| 新67194成人永久网站| 久久精品中文字幕| 一道本在线观看| 日韩精品一区国产| 91国内精品野花午夜精品| 8x8x华人在线| av男人的天堂在线| 国产成人综合在线播放| 国产精品久久久久久久久久小说| 九九免费精品视频| 成人羞羞网站入口| 亚洲第一区在线观看| 91精品无人成人www| 老色鬼在线视频| 综合欧美亚洲日本| 日韩欧美第二区在线观看| 亚洲精品久久久久久动漫器材一区| 久久一区激情| 97婷婷大伊香蕉精品视频| 久久噜噜色综合一区二区| 台湾色综合娱乐中文网| 欧美mv日韩mv国产网站app| 我看黄色一级片| 精品国产第一福利网站| 亚洲国产色一区| 青青草免费在线视频观看| 懂色一区二区三区| 国产夜色精品一区二区av| 国产欧美日韩一区| 亚洲爆乳无码一区二区三区| 精品一区二区在线看| 国产精品久久视频| 无码人妻丰满熟妇区五十路| 99视频精品免费观看| 欧美国产在线电影| 欧美日韩在线国产| 欧美aⅴ99久久黑人专区| 色吧影院999| eeuss中文字幕| 日韩av有码| 神马久久久久久| 亚洲一二三精品| 精品一区二区三区在线 | 欧美日韩在线一区| 久色视频在线播放| 在线成人av观看| 色综合久久综合网欧美综合网| 国产青青在线视频| аⅴ资源天堂资源库在线| 五月婷婷激情综合| 精品这里只有精品| 超级碰碰久久| 色美美综合视频| 无码无遮挡又大又爽又黄的视频| 自拍偷拍欧美视频| 色婷婷久久99综合精品jk白丝| 乱子伦视频在线看| 日韩一区二区三区在线免费观看| 在线国产电影不卡| 九九热99视频| 日本免费一区二区三区视频| 日韩一区二区三区电影| 古装做爰无遮挡三级聊斋艳谭| 日韩一二三区| 精品av久久707| 中文字幕在线观看网址| 你懂的一区二区三区| 一区二区三区视频在线| 日本在线观看网址| 欧美 日韩 国产 一区| 久久久久久香蕉网| 91porny九色| 国精产品一区一区三区mba桃花| 亚洲va久久久噜噜噜久久天堂| 精品乱子伦一区二区| 不卡的av中国片| 色综合久久av| 二区三区在线观看| 狠狠躁夜夜躁久久躁别揉| 成年人小视频网站| 久久99精品久久久野外观看| 亚洲精品黄网在线观看| 99精品中文字幕| 国产精品激情电影| 国产精品高潮在线| 国产黄a三级三级三级| 99久久99久久精品国产片果冻 | 66视频精品| 久久久久久久91| 国产乱码77777777| 成人精品高清在线| 亚洲一区二区三区色| av免费不卡国产观看| 欧美午夜在线观看| 91精品又粗又猛又爽| 国产91精品对白在线播放| 欧美成aaa人片免费看| 综合网在线观看| 国模少妇一区二区三区| 日本一区二区三区视频在线播放| a免费在线观看| 日本二三区不卡| 国产免费无码一区二区| 欧美在线色图| 97超级碰在线看视频免费在线看| 在线观看国产小视频| 99久久夜色精品国产网站| 影音欧美亚洲| 经典三级一区二区| 亚洲国产成人久久| 久久久久亚洲AV成人| 免费黄网站欧美| 精品免费国产| xxxx另类黑人| 日韩女优av电影| 久久久久久久久久97| 久久一二三区| 欧美精品一区二区三区在线看午夜| 日本在线观看高清完整版| 欧美三级在线播放| 国精产品一区一区三区免费视频| 尤物精品在线| 91沈先生播放一区二区| 黄色免费在线观看网站| 欧美在线小视频| 久久久久久久久久久久| 国产亚洲激情| 精品高清视频| 欧美久久天堂| 日韩精品免费在线视频| 国产无遮挡又黄又爽又色| 国产精品综合一区二区三区| 一区二区三区四区视频在线观看| 中文.日本.精品| 亚洲男人天堂视频| 亚洲黄色激情视频| 91网上在线视频| 欧美黄色免费影院| 美女久久久久| 日韩美女视频在线观看| 国产永久免费高清在线观看| 色综合婷婷久久| 色欲av无码一区二区三区| 亚洲欧美日韩在线观看a三区| 国产一区免费观看| 涩涩涩视频在线观看| 国产视频精品自拍| 免费看日批视频| 国产欧美一区二区在线观看| 亚洲视频在线a| 日韩大片在线| 亚洲影院高清在线| 男女视频在线| 日韩精品福利网站| 无码人妻一区二区三区免费| 欧美国产一区二区| 手机免费看av网站| 在线中文字幕第一区| 51成人做爰www免费看网站| 久久av色综合| 国产丝袜视频一区| 瑟瑟视频在线免费观看| 中文字幕日韩av资源站| 精品人妻一区二区三| 亚洲第一网站| 日韩av不卡播放| 国产精品日本一区二区三区在线 | 国产精品88888| 男人添女荫道口图片| 亚洲第一福利社区| 国产区精品视频| 国内在线视频| 国产香蕉精品视频一区二区三区| 国产又粗又长又大视频| 亚洲自拍另类综合| 无码人妻丰满熟妇啪啪欧美| 国产一区视频导航| 日本精品免费在线观看| 国产精品成人a在线观看| 国产精品久久久久久久小唯西川 | 亚洲欧洲日本国产| 日日夜夜精品视频| 国产成人午夜视频网址| 在线视频国产区| 亚洲欧美在线x视频| 国产av精国产传媒| 日韩欧美在线视频免费观看| 黄色录像免费观看| 久久亚洲综合色| 青娱乐国产精品视频| 日韩精品成人一区二区在线| 91传媒免费视频| 欧美色图国产精品| 国产精品青青草| 欧美亚洲人成在线| 91chinesevideo永久地址| 免费黄色网址在线观看| 日韩精品免费综合视频在线播放| 国产美女三级无套内谢| 一本一道波多野结衣一区二区| 欧美三级 欧美一级| 欧美国产在线观看| 一区二区不卡免费视频| 国产精品 日产精品 欧美精品| 亚洲一二三区av| 国产精品一区毛片| 欧美亚洲色图视频| 一区二区三区在线电影| 日韩av一级大片| 伊人久久大香线蕉综合网蜜芽| av成人在线电影| 亚洲黑人在线| 国产精品三级久久久久久电影| av成人 com a| 欧美日本精品在线| 成人短视频在线观看| 日韩一区二区精品视频| 九一在线视频| 亚洲精品丝袜日韩| 少妇一区二区三区四区| 日韩欧美一区二区视频| 国产精品欧美激情在线| 欧美色成人综合| 中文字幕日韩第一页| 在线欧美日韩国产| 欧美一级淫片免费视频黄| 午夜视频在线观看一区| 免费一级特黄特色大片| 一区二区三区在线播| 国产成人av免费在线观看| 中文字幕中文字幕在线一区 | 亚洲一线二线三线视频| 国语对白在线播放| 亚洲欧美日韩人成在线播放| 娇小11一12╳yⅹ╳毛片| 国产精品理论片| 大胸美女被爆操| 国产精品美女久久久久aⅴ国产馆| www在线观看免费视频| 久久久久久久久久电影| 香蕉视频久久久| 亚洲国产精品成人久久综合一区 | 色135综合网| 伊人久久大香线蕉午夜av| 欧美gay男男猛男无套| 亚洲小说欧美另类激情| 欧美一区不卡| 97干在线视频| 亚洲在线电影| 欧美激情成人网| 美女诱惑一区二区| 国产成年人视频网站| 狠狠色丁香久久婷婷综合_中| 五月天婷婷在线观看视频| 国产成人精品一区二区三区网站观看| 免费看91视频| 91蜜桃网址入口| 公肉吊粗大爽色翁浪妇视频| 亚洲欧美综合色| 国产一级视频在线| 一本大道久久a久久精品综合| 成人黄色免费网| 欧美一级国产精品| 午夜一区在线观看| 色综合伊人色综合网站| free性欧美hd另类精品| 992tv成人免费视频| 天天综合网站| 亚洲精品女av网站| 亚洲国产国产| 中国成人亚色综合网站| 激情国产一区| 美女黄色片视频| 国产精品一区二区91| 日本精品一二三| 久久精品视频免费| 唐朝av高清盛宴| 在线观看一区二区视频| 99久久精品免费看国产交换| 亚洲激情免费观看| 思思99re6国产在线播放| 欧美国产乱视频| 欧美色片在线观看| 99re视频在线播放| 欧美精选视频在线观看| wwwwww欧美| 男女男精品网站| 黄色免费看视频| 国产精品久久久久久亚洲毛片| www.youjizz.com亚洲| 欧洲在线/亚洲| 手机av免费在线观看| 自拍偷拍亚洲在线| 忘忧草在线日韩www影院| 成人看片人aa| 国产亚洲一区| 欧美一级视频免费看| 精品一区二区三区香蕉蜜桃 | 午夜福利123| 久久久久九九视频| 国产大片aaa| 欧美一区二区国产| 1024免费在线视频| 欧美一性一乱一交一视频| 日韩一二三区| 一区二区三区国产福利| 日韩高清欧美激情| 中文字幕在线观看网址| 一区二区三区高清| 国产尤物在线观看| 伊人久久久久久久久久久久久| 77thz桃花论族在线观看| 成人在线视频福利| 日本久久精品| 女性隐私黄www网站视频| 99国产精品一区| 69精品久久久| 日韩一区二区在线看片| 91精品大全| 国产精品久久久久久久久久久新郎 | 在线成人黄色| 中文字幕无码毛片免费看| 亚洲丝袜另类动漫二区| 在线免费观看日韩视频| 国产亚洲一区二区精品| 日韩在线影院| 日韩欧美一区二区视频在线播放 | 午夜精品久久久久久久蜜桃app| 国产欧美熟妇另类久久久 | 日韩久久久久久久久| 精品国产三级电影在线观看| 91在线中文| 成人av资源| 国产精品啊啊啊| 中文文字幕文字幕高清| 亚洲国产中文字幕在线视频综合| 精品人妻久久久久一区二区三区| 久久精品国产一区二区电影| 亚洲最大的免费视频网站| 亚洲视频精品一区| 精品系列免费在线观看| 肉色超薄丝袜脚交69xx图片 | 日韩中文字幕综合| 久久久亚洲天堂| 成人资源在线| 亚洲国产精品久久久久婷蜜芽| 99久久精品免费精品国产| 毛片毛片女人毛片毛片| 亚洲欧美激情精品一区二区| 成人日韩在线观看| 一区二区精品免费视频| 国产综合色精品一区二区三区| 欧美人与禽zozzo禽性配| 精品久久一二三区| 在线黄色的网站| 亚洲精品自在在线观看| 国产精品一区一区| 日韩精品一区二区三| 亚洲人成人99网站| 成人精品国产亚洲| 在线观看三级网站| 成人av网站在线观看| 久久久精品毛片| 久久久精品免费视频| 欧美jizz19性欧美| youjizzxxxx18| 依依成人精品视频| 婷婷五月综合激情| 国产精品十八以下禁看| 在线一区免费| 亚洲AV无码国产成人久久| 欧美精品一级二级| bbw在线视频| 亚洲一区二区精品在线| 国产iv一区二区三区| 亚洲s码欧洲m码国产av| 日韩有码在线观看| 欧美大片网址| 日本高清久久久| 精品女厕一区二区三区| 日本高清中文字幕在线| 国产综合动作在线观看| 麻豆国产精品一区二区三区| 久久久精品国产sm调教网站| 亚洲午夜色婷婷在线| 136福利精品导航| 福利在线一区二区三区| 午夜一区二区三区在线观看| 1pondo在线播放免费| 九九九九精品| 国产乱码字幕精品高清av| 国产又粗又爽视频| 欧美国产日韩免费| 日韩一区电影|