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

一致性哈希算法的權衡

原創 精選
開發 前端
一致性哈希算法都在努力平衡鍵的分布、內存使用、查找時間和構建時間(包括節點添加和刪除成本)。只有權衡,沒有完美的一致性哈希算法。?

一致性哈希(Consistent Hashing)是一種特殊的哈希算法,主要用于解決分布式系統中節點動態變化時的數據分布問題。它在保持數據分布均勻的同時,盡量減少節點加入或離開時需要重新分配的數據量。一致性哈希算法在許多場景下都非常有用,例如在緩存系統、負載均衡器、數據庫分片等應用中。

1.一致性哈希解決的問題

問題:

有一個鍵值對的集合,還有一些用于鍵值存儲的服務器例如 memcached,Redis,MySQL等等。在沒有全局存儲目錄的條件下,如何把Key發布到不同服務器上,然后可以找到它。

2. 那些一致性哈希算法

2.1 模N哈希

首先,選擇一個哈希函數來將鍵(字符串)映射為一個整數。這往往排除了像 SHA-1或 MD5這樣的加密算法,因為其計算成本較高。MurmurHash 以及 xxHash等非加密哈希函數都是不錯的選擇。

如果您有 N 個服務器,您可以使用 hash 函數散列密鑰,并取得結果的整數模 N。server := serverList[hash(key) % N]

這種設置很容易解釋, 計算成本很低。如果 N 是2的冪,那么只需要比特掩碼即可。

圖片圖片

但是,局限也是顯然的。模N哈希難以應對服務器的數量變化。理想的哈希函數當面臨添加或刪除一個服務器時,應該只移動1/n的鍵,不需要移動的鍵不要移動。

2.2 環哈希

環哈希(ring-based consistent hashing)的基本思想是,每個服務器被映射到一個具有哈希函數的圓上的一個點,可以把圓看作所有的整數0,1,2......2^32-1 的集合。要查找給定鍵的服務器,需要對該密鑰執行散列并在圓上找到該點。然后向前掃描,直到找到任何服務器的第一個哈希值。實際上,每個服務器會在哈希環上出現多次。這些額外的點稱為“虛擬節點”或“ vnode”。這減少了服務器之間的負載差異。對于少量的 vnode,不同的服務器可以分配不同數量的鍵。

Ketama 是一個 memcached 客戶段,它使用環哈希來跨服務器實例的鍵分布。一個ketama算法的go 語言參考實現如下:

func (c Continuum) Hash(thing string) string {

    if len(c.ring) == 0 {
        return ""
    }

    h := hashString(thing)

    var i uint
    switch c.hash {
    case HashFunc1:
        i = search(c.ring, h)
    case HashFunc2:
        i = uint(sort.Search(len(c.ring), func(i int) bool { return c.ring[i].point >= h }))
        if i >= uint(len(c.ring)) {
            i = 0
        }
    }

    return c.ring[i].bucket.Label
}

環哈希算法很簡單。為了查看給定鍵存儲在哪個節點上,鍵被哈希為一個整數。搜索已排序的節點,以查找大于鍵哈希的最小節點,然后在映射中查找該節點哈希值,以確定它來自哪個節點。

圖片圖片

但是,即便使用了環哈希算法,節點之間的負載分布仍然是不均勻的。例如,每臺服務器有100個副本 ,負載標準差約為10% 。桶大小的99% 置信區間是平均負載(即鍵總數/服務器數量)的0.76至1.28。這種可變性使容量規劃變得棘手。如果將每臺服務器的副本數量增加到1000個節點,標準差減少到3.2% ,而99% 的置信區間減少到0.92到1.09。這需要大量的內存消耗。對于1000個節點,幾乎要4 MB 的數據,O (log n)搜索也會面臨大量的緩存未命中情況。

2.3 跳躍哈希

跳躍哈希(Jump Hashing)克服了環哈希的缺點: 它沒有內存開銷,實際上是完美的密鑰分發。桶的標準差為0.00000764% ,99%的置信區間為0.9999998至1.00000002。

跳躍哈希的go語言參考實現如下:

int32_t JumpConsistentHash(uint64_t key, int32_t num_buckets) {
    int64_t b = --1, j = 0?
    while (j < num_buckets) {
        b = j?
        key = key * 2862933555777941757ULL + 1?
        j = (b + 1) * (double(1LL << 31) / double((key >> 33) + 1))?
    }
    return b?
}

跳躍哈希也很快。循環執行 O (ln n)次,比環哈希的 O (log n)二分查找快一個常量,甚至更快,計算完全在幾個寄存器中完成,不需要支付緩存未命中的開銷。該算法使用鍵的哈希值作為隨機數生成器的種子。然后,它使用隨機數字在桶列表中“跳轉”,最后的一個桶是結果。

圖片圖片

跳躍哈希的主要限制是它只返回范圍為桶數量-1的整數,且不支持任意的桶名。如果使用環哈希,即使兩個不同的實例以不同的順序接收它們的服務器列表,得到的密鑰映射仍然是相同的。使用跳躍哈希的一個方法是提供一個節點編號,而不是服務器名稱。其次,它只能正確地添加和刪除范圍上端的節點,這意味著它不支持任意節點刪除。例如,不能使用它在 memcached 實例集中分發鍵,因為其中一個實例可能會崩潰,而無法從可能的目的列表中刪除崩潰的節點。

環哈希提供了任意桶的添加和刪除能力,但代價是使用高內存以減少負載差異。跳轉哈希提供了有效的完美負載分割,但是在更改節點計數時降低了靈活性。

2.4 多探測器一致性哈希

多探測器一致性哈希(Multi-Probe Consistent Hashing)的基本思想是,不要對節點進行多次哈希處理,使內存使用量增加,而是只對節點進行一次哈希處理,但在查找時對鍵 進行 k 次哈希處理,并返回所有查詢中最接近的節點。K 值由期望的方差決定。

一個多探測器一致性哈希算法的go 語言參考實現如下:

// Hash returns the bucket for a given key
func (m *Multi) Hash(key string) string {
    bkey := []byte(key)

    minDistance := uint64(math.MaxUint64)

    var minhash uint64

    h1 := m.hashf(bkey, m.seeds[0])
    h2 := m.hashf(bkey, m.seeds[1])

    for i := 0; i < m.k; i++ {
        hash := h1 + uint64(i)*h2
        prefix := (hash & m.prefixmask) >> m.prefixshift

        var node uint64
    FOUND:
        for {
            uints := m.bhashes[prefix]

            for _, v := range uints {
                if hash < v {
                    node = v
                    break FOUND
                }
            }

            prefix++
            if prefix == uint64(len(m.bhashes)) {
                prefix = 0
                // wrapped -- take the first node hash we can find
                for uints = nil; uints == nil; prefix++ {
                    uints = m.bhashes[prefix]
                }

                node = uints[0]
                break FOUND
            }
        }

        distance := node - hash
        if distance < minDistance {
            minDistance = distance
            minhash = node
        }
    }

    return m.bmap[minhash]
}

多探測器一致性哈希提供 O (n)空間(每個節點一個條目) ,以及 O (1)添加和刪除節點,局限時查找變慢了。

圖片圖片

對于1.05的峰均比,這意味著負載最重的節點最多比平均值高5%),k 為21。使用復雜的數據結構,可以得到從 O (k logn)到 O (k)的總查找成本。作為對比,要使環哈希的等效峰均比為1.05,每個節點需要700 ln n 副本。對于100個節點,這意味著超過一兆字節的內存。

2.5 交會哈希

交會哈希(Rendezvous Hashing)也叫最高隨機權哈希,其基本思想是將節點和鍵在一起執行哈希函數,并使用提供最高哈希值的節點。

圖片圖片

其缺點是很難避免遍歷所有節點的 O (n)查找開銷。以下是來自go語言實現的查找示例:

func (r *Rendezvous) Lookup(k string) string {
    khash := r.hash(k)

    var midx int
    var mhash = xorshiftMult64(khash ^ r.nhash[0])

    for i, nhash := range r.nhash[1:] {
        if h := xorshiftMult64(khash ^ nhash); h > mhash {
            midx = i + 1
            mhash = h
        }
    }

    return r.nstr[midx]
}

即使交會哈希的查找復雜的是 O (n),內部循環也沒有那么昂貴。根據節點的數量,它可以很容易地實現“足夠快”。

2.6 磁懸浮哈希

磁懸浮哈希(Maglev Hashing)源自谷歌,其中一個主要目標是與環哈希或交會哈希相比,擁有較快查找速度和較低的內存使用。該算法有效地生成了一個查找表,允許在恒定的時間內查找節點。這樣做的兩個缺點是生成一個關于節點故障的新表的速度很慢,這也有效地限制了后端節點的最大數量。

圖片圖片

磁懸浮哈希的另一個目標是在添加和刪除節點時實現“最小干擾”,而不是優化。對于磁懸浮哈希作為軟件負載平衡器的場景來說,這就足夠了。

磁懸浮哈希中關于構造查找表的go語言參考實現如下:

func New(names []string, m uint64) *Table {
    offsets, skips := generateOffsetAndSkips(names, m)
    t := &Table{
        n:              len(names),
        skips:          skips,
        currentOffsets: offsets,
        originOffsets:  make([]uint64, len(names)),
        m:              m,
    }

    // save first currentOffsets to originOffsets, for reset
    copy(t.originOffsets, t.currentOffsets)
    t.lookup = t.populate(m, nil)

    return t
}

查找表實際上是節點的隨機排列。查找對鍵進行哈希運算,并檢查該位置的條目。這是帶有一個小常量的 O (1)復雜度,只是對鍵執行哈希的時間。

主流的一致性哈希算法的對比如下:

圖片圖片

3. 一致性哈希的典型應用場景

一致性哈希算法一般應用在分布式系統之中。在分布式系統中,機器節點和數據都很多,節點可能會頻繁地增加或故障宕機,導致數據無法取得。為了解決這個問題,出現了使用一致性哈希算法來規劃數據的存放節點的方法。

3.1 服務副本

分布式系統中的服務副本使用一致性哈希算法來為給定的鍵選擇輔助(或更多)節點。這可以是為了防止節點故障,也可以僅作為第二個節點進行查詢以減少延遲。有些策略使用完整的節點復制,即每個服務器有兩個完整的副本,而其他策略則跨服務器復制鍵。

我們總是能夠以可預測的方式變更鍵或鍵的哈希,并執行完整的第二次查找,但也需要注意在同一個節點上的副本鍵。

有些算法可以直接選擇多個節點進行備份或復制。對于環哈希,使用傳遞到圓上的下一個節點; 對于多探針一致性哈希,使用下一個最接近的節點。交會哈希采取下一個最高(或最低)的節點。跳躍哈希是有點棘手,但它也是可以做到的。

同樣,選擇復制策略也充滿了權衡。

3.2 加權主機

在添加具有不同權重的服務器方面,一致哈希算法的簡單性和有效性各不相同。也就是說,將更多(或更少)負載發送到一個服務器,而不是發送給其他服務器。使用環哈希,可以按照所需的負載縮放副本的數量,但這會極大地增加內存使用。

跳躍哈希 和 多探測器一致性哈希在使用和維持現有的性能保證方面更加棘手。雖然總是可以添加引用原始節點的第二個“影子”節點,但是當負載倍數不是整數時,此方法將失效。一種方法是按一定數量縮放所有節點計數,但這會增加內存和查找時間。

磁懸浮哈希通過改變表的構造過程來獲得權重,這樣權重較大的節點可以更頻繁地在查找表中選擇條目。

加權交會哈希用于為交會哈希算法添加權重,即選擇按權重比例縮放的最高組合哈希。

3.3 負載均衡

使用一致性哈希進行負載平衡是一個很有吸引力的想法。但根據算法的不同,這最終可能不會比隨機分配好,隨機分配會導致分布不平衡。

除了磁懸浮哈希之外,還有兩種一致哈希的負載平衡方法。

一個是基于有界負載的一致性哈希算法。由于鍵分布在服務器之間,因此會檢查負載,如果某個節點已經負載過重,則跳過該節點。這種算法可以到 HAProxy 的復雜均衡器上,也可以作為一個獨立的軟件包使用。

對于選擇連接到哪些后端的客戶端而言,谷歌提出了一種稱為“確定性的子設置”的算法,在其SRE book 中有詳細信息。

4. 一句話小結

一致性哈希算法都在努力平衡鍵的分布、內存使用、查找時間和構建時間(包括節點添加和刪除成本)。只有權衡,沒有完美的一致性哈希算法。

責任編輯:武曉燕 來源: 喔家ArchiSelf
相關推薦

2021-02-05 08:00:48

哈希算法?機器

2020-07-20 08:30:37

算法哈希分布式系統

2021-07-27 08:57:10

算法一致性哈希哈希算法

2016-12-19 18:41:09

哈希算法Java數據

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-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

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

2018-03-13 08:20:48

區塊鏈數據安全

2021-11-12 08:38:26

一致性哈希算法數據結構

2023-12-05 14:44:01

2022-01-27 08:31:20

一致性哈希

2019-10-11 23:27:19

分布式一致性算法開發

2021-08-13 07:56:13

Raft算法日志
點贊
收藏

51CTO技術棧公眾號

深夜成人在线| 欧美高清成人| 99精品视频免费观看视频| 日韩精品免费综合视频在线播放| 好男人www社区| a视频在线免费看| 波波电影院一区二区三区| 国产成人涩涩涩视频在线观看| 女教师淫辱の教室蜜臀av软件| 999国产精品一区| 欧美影片第一页| 亚洲精品国产suv一区88| 免费在线毛片| 国产一区在线视频| 欧美在线一级va免费观看| 欧美日韩色视频| 亚洲系列另类av| 日韩视频一区在线观看| 日本新janpanese乱熟| 国产区美女在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产一区亚洲二区三区| 久久99精品久久久久久野外| 91麻豆免费观看| 亚洲一区二区三区视频| 做爰视频毛片视频| 亚洲资源av| 欧美大片在线影院| 亚洲一二三四五六区| 欧洲亚洲视频| 精品国产a毛片| 日本高清久久久| 性欧美videohd高精| 亚洲成人777| 影音先锋成人资源网站| 激情视频在线观看免费| proumb性欧美在线观看| 国产激情美女久久久久久吹潮| 在线视频播放大全| 日本午夜一区二区| 国产精品av免费在线观看| 男人的天堂一区二区| 欧美日韩伊人| 久久国产精品久久久久| 国产3级在线观看| 成人免费在线观看av| 亚洲视频在线免费观看| 无遮挡aaaaa大片免费看| 粉嫩精品导航导航| 精品国产三级电影在线观看| 在线成人免费av| 国产在线一区不卡| 91精品国产综合久久小美女| 做a视频在线观看| 欧美成人一二区| 欧美色成人综合| 福利在线一区二区三区| 欧美精选视频一区二区| 欧美亚洲动漫制服丝袜| 88av.com| 亚洲免费一区| 日韩午夜激情av| 亚洲成年人av| 欧美电影在线观看免费| 日韩激情片免费| 少妇按摩一区二区三区| 最新国产精品视频| 中文字幕精品久久| 男人在线观看视频| 欧美国内亚洲| 韩国美女主播一区| 日韩在线播放中文字幕| 三级欧美韩日大片在线看| 国产精品aaaa| 国产绿帽刺激高潮对白| 国产999精品久久久久久| 国产精品自拍首页| 深夜福利在线观看直播| 国产日韩欧美高清在线| 特级黄色录像片| 国内高清免费在线视频| 欧美午夜激情小视频| 亚洲欧美国产日韩综合| 国产午夜亚洲精品一级在线| 亚洲精品在线一区二区| 中国美女乱淫免费看视频| 日韩中文在线电影| 国内精品在线一区| 久久久999久久久| 国产综合久久久久久鬼色| 99在线首页视频| 日本视频在线观看一区二区三区| 国产精品九色蝌蚪自拍| 日本一本中文字幕| 亚洲电影有码| 欧美v亚洲v综合ⅴ国产v| 波多野结衣一本| 亚洲精品久久| 日本一区二区不卡| 精品毛片一区二区三区| 久久婷婷色综合| 日韩欧美一级在线| 成人免费无遮挡| 日韩视频123| 免费污网站在线观看| 欧美激情91| 国产精品九九九| 男人天堂一区二区| 中文字幕在线观看一区| 91免费视频网站在线观看| 国产免费区一区二区三视频免费 | 一本色道久久| 91美女福利视频高清| 欧美偷拍视频| 一个色综合网站| 久久黄色片网站| 美女少妇全过程你懂的久久| 欧美激情喷水视频| 一级α片免费看刺激高潮视频| 91丨国产丨九色丨pron| 成人国产一区二区三区| 日韩一级特黄| 亚洲视频欧洲视频| 9i看片成人免费看片| 国产成人精品免费在线| 亚洲视频欧美在线| 国产精品专区免费| 亚洲精品99久久久久| 久久久国产成人| 国内久久精品视频| 亚洲 国产 欧美一区| 丁香六月综合| 精品偷拍一区二区三区在线看| 精品99久久久久成人网站免费| 精品一区二区在线播放| 亚洲欧美一区二区原创| 欧美成a人片在线观看久| 日韩电影中文字幕在线| 久久精品国产亚洲av香蕉| 国产精品一级在线| 91社在线播放| 国产精品原创巨作av| 午夜精品一区二区三区在线视频| av小说天堂网| 亚洲日本va午夜在线影院| 午夜国产一区二区三区| 精品国产91| 国产成人在线播放| 成人免费高清在线播放| 91久久精品国产91性色tv| 成人性生交大免费看| 久久裸体视频| 日韩欧美一区二区三区四区五区| 免费观看成人性生生活片| 亚洲人精品午夜在线观看| 日本免费在线观看视频| 久久久久久免费| 五月婷婷激情久久| 欧美三级美国一级| 国产在线观看不卡| 蜜桃视频在线观看www社区| 91精品国产综合久久久蜜臀图片| 久久久久亚洲AV成人| 成人中文字幕电影| 97超碰人人澡| 精品中文一区| 国产深夜精品福利| 丁香花在线电影小说观看| 日韩精品视频中文在线观看| 在线观看日本网站| 国产精品卡一卡二卡三| 国产又粗又猛大又黄又爽| 亚洲午夜精品久久久久久app| 精品国产综合久久| 澳门av一区二区三区| 久久久精品欧美| 色噜噜在线播放| 在线观看av一区| 国精品无码一区二区三区| www.亚洲精品| 久久久精品麻豆| 欧美日本久久| 国产福利一区二区三区在线观看| 国产精品高清乱码在线观看| 日韩性生活视频| 天天干天天爱天天操| 欧美日韩在线电影| 国产大片aaa| 国产欧美中文在线| 黑人无套内谢中国美女| 日日摸夜夜添夜夜添国产精品| 中文字幕中文字幕99| 精品福利一区| 国产精品亚洲自拍| а√天堂8资源中文在线| 一区二区三区视频观看| 性生活视频软件| 在线观看日产精品| 国产亚洲成人av| 国产女同互慰高潮91漫画| www日本在线观看| 亚洲综合精品四区| 五月天激情图片| 日韩精品免费| 精品久久精品久久| 精品国产亚洲日本| 国产精品爱啪在线线免费观看| 日本在线观看高清完整版| 亚洲最大在线视频| 乱精品一区字幕二区| 欧美日韩国产综合视频在线观看| 免费看日韩毛片| 亚洲激情图片qvod| 萌白酱视频在线| 久久久久国产精品厨房| 激情综合激情五月| 国产在线不卡视频| 天堂中文视频在线| 亚洲一区二区三区高清| www插插插无码免费视频网站| 色天天综合网| 日本10禁啪啪无遮挡免费一区二区| 99精品中文字幕在线不卡 | 日本在线视频www色| 精品国产91久久久久久浪潮蜜月| 久久精品午夜一区二区福利| 中文字幕久久精品一区二区 | 极品国产人妖chinesets亚洲人妖 激情亚洲另类图片区小说区 | 欧美日韩在线视频免费播放| 国产色产综合产在线视频| 老司机福利av| 91亚洲资源网| 日本一区二区在线免费观看| 国产91丝袜在线播放| 日本亚洲一区二区三区| 激情综合色丁香一区二区| 激情综合网俺也去| 日本中文一区二区三区| 免费在线观看的毛片| 久久精品主播| 国产成人黄色片| 香蕉久久夜色精品国产| 欧美变态另类刺激| 国产精品久久久久久模特| heyzo亚洲| 国产精品综合| 91av在线免费播放| 免费在线观看一区二区三区| 天天操天天摸天天爽| 欧美a一区二区| 天天插天天操天天射| 久久国产生活片100| 国产精品区在线| 狠狠网亚洲精品| 丰满少妇一区二区三区专区 | 亚洲精品成人无码| 国产日韩欧美激情| 精品一区二区在线观看视频| 亚洲另类色综合网站| 欧美交换国产一区内射| 亚洲第一精品在线| 欧美特黄aaaaaa| 欧美性色黄大片| 国产精品久久久久久免费免熟 | 国产探花一区二区三区| 国产91精品久久久久久久网曝门| 老司机午夜免费福利| 91亚洲国产成人精品一区二区三| 中文字幕免费看| 国产精品灌醉下药二区| 日韩视频中文字幕在线观看| 亚洲国产aⅴ天堂久久| 黑人精品无码一区二区三区AV| 欧洲人成人精品| 97在线公开视频| 欧美精品一区二区三区在线播放 | 色妞ww精品视频7777| 国产午夜精品一区| 精品国产午夜| 777久久精品一区二区三区无码 | 日韩电影免费网址| 人妻无码一区二区三区四区| 国产精品综合色区在线观看| 夜夜夜夜夜夜操| 99re热这里只有精品视频| 一本在线免费视频| 亚洲国产综合在线| 中文字幕免费视频观看| 日韩精品一区二区在线| 国产中文在线视频| 欧美猛少妇色xxxxx| 欧美人体一区二区三区| 91社区国产高清| 首页亚洲中字| 久久久久福利视频| 青青草成人在线观看| 亚洲精品激情视频| 亚洲欧洲国产日韩| 久久久久久久久久久久久av| 91麻豆精品国产综合久久久久久| 亚洲色大成网站www| 久久精品国产久精国产一老狼 | 日韩欧美在线观看视频| 91福利免费视频| 亚洲天堂成人在线| 91超碰在线播放| 成人欧美在线观看| 国产精品视频一区二区三区四蜜臂| 青青草视频国产| 久久99热国产| 成人在线一级片| 五月开心婷婷久久| 不卡的日韩av| www国产精品视频| 国产超碰精品| 狠狠综合久久av| 欧美日韩蜜桃| 久久6免费视频| 中文字幕国产一区二区| 国产午夜在线播放| 日韩欧美激情四射| 成人av免费| 国产精品视频区1| 激情五月综合网| 北条麻妃69av| 91一区二区三区在线播放| 天堂资源在线播放| 日韩精品专区在线影院观看| 黄色免费在线观看| 国产日韩中文字幕在线| 成人激情电影在线| 男人搞女人网站| 国产日韩欧美a| 最好看的日本字幕mv视频大全| 亚洲精品网站在线播放gif| 欧美巨大丰满猛性社交| 九九久久99| 中文一区在线| 99久久人妻无码中文字幕系列| 亚洲成人一区二区| 韩国av电影在线观看| 欧美激情精品久久久久久久变态| 免费一级欧美在线大片| www.国产二区| 成人三级在线视频| 日本在线视频免费观看| 亚洲精品国产拍免费91在线| 超碰在线公开| 久久精品一区二区三区不卡免费视频| 国产精品久久久一区二区| av网站免费在线播放| 91成人国产精品| 在线观看完整版免费| 国产人妖伪娘一区91| 久久久久久久久丰满| 国产伦精品一区二区三区妓女下载 | 另类小说视频一区二区| 亚洲欧美卡通动漫| 欧美一级夜夜爽| av在线不卡免费| 欧美日韩另类丝袜其他| 日本不卡一二三区黄网| а天堂中文在线资源| 日韩三级精品电影久久久| av影片在线| 日本一区二区三区四区在线观看| 美国三级日本三级久久99 | 91露出在线| 成人亚洲激情网| 欧美体内she精视频在线观看| 大尺度做爰床戏呻吟舒畅| 色综合天天综合网国产成人综合天| 东热在线免费视频| 亚洲自拍偷拍色片视频| 国产亚洲在线观看| 国产美女网站视频| 亚洲成人xxx| 欧美一区 二区 三区| 精品国产三级a∨在线| 成人午夜av电影| 天天综合久久综合| 成年无码av片在线| 日韩三区视频| 人人爽人人爽av| 欧美日韩国产中文精品字幕自在自线| 国产高清在线| 国产精品久久久久久免费观看 | 欧美精品午夜| 黑人巨大精品欧美| 91麻豆精品国产自产在线观看一区| 国模精品视频| 少妇高潮流白浆| 91麻豆精品在线观看| 国产精品一区二区黑人巨大| 7777免费精品视频| 国产高清久久| 右手影院亚洲欧美| 欧美成人vps| 高清亚洲高清| 91猫先生在线|