精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美日韩一区二区三区在线视频| 91国偷自产一区二区三区的观看方式| 99re精彩视频| 尤物视频在线看| 成人91在线观看| 国产精品久久久久久久久久新婚 | 久久青草国产手机看片福利盒子| 国产精品久久久久77777| 欧美久久久久久久久久久久| 亚洲+变态+欧美+另类+精品| 欧美精品久久久久久久久老牛影院 | 精品国产乱码久久久久久1区二区| 青草在线视频| 国产精品视频观看| 久久精品第九区免费观看| 在线播放成人av| 亚洲国产二区| 不卡伊人av在线播放| 成人免费看aa片| 国产一区 二区| 色狠狠色狠狠综合| 亚洲国产精品无码观看久久| 美女av在线播放| 国产亚洲一区二区在线观看| 国产精品麻豆免费版| 一本色道久久综合无码人妻| 新67194成人永久网站| 久久6免费高清热精品| 欧美人与禽zoz0善交| 日韩大胆成人| 亚洲第一视频网站| 久久久久久久久久久影视| 91p九色成人| 欧美性猛交xxxx久久久| 真人抽搐一进一出视频| av免费在线免费| 中文字幕亚洲一区二区va在线| 欧美日韩一区二区视频在线观看| 欧美在线精品一区二区三区| 国产精品影视在线观看| 91久久嫩草影院一区二区| 中文字幕乱码一区二区| 日韩国产欧美在线播放| 日本久久久久久久久久久| 91视频免费网址| 黄色一区二区三区四区| 欧美精品性视频| 中文字幕资源站| 99热国内精品| 久久亚洲国产精品成人av秋霞| 无码人妻aⅴ一区二区三区69岛| 欧美日韩另类图片| 日韩精品极品在线观看播放免费视频| 少妇熟女视频一区二区三区 | 玖玖国产精品视频| 日韩免费av在线| 欧美激情一区二区三区免费观看| 日韩黄色小视频| 国产美女91呻吟求| 一级特黄aaa| 国产一区二区在线观看免费 | 精品人妻一区二区三区浪潮在线| 国产乱码精品一区二区三区av| 91网站在线免费观看| 国产夫绿帽单男3p精品视频| 国产.精品.日韩.另类.中文.在线.播放| 999国内精品视频在线| 亚洲精品18在线观看| 成人av网站在线| 麻豆av一区二区三区| 久色视频在线| 国产精品三级av在线播放| 黄色高清视频网站| av成人 com a| 日本韩国欧美国产| 精品亚洲一区二区三区四区| 91麻豆精品| 亚洲第一精品久久忘忧草社区| 国产精品无码永久免费不卡| 国产一区二区欧美| 精品国产欧美成人夜夜嗨| 少妇久久久久久被弄高潮| 亚洲激情另类| 国产91精品青草社区| 日韩黄色片网站| 国产一区二区三区蝌蚪| 国产欧美日韩在线播放| 国产在线黄色| 亚洲美女视频在线| 久久9精品区-无套内射无码| 欧美v亚洲v综合v国产v仙踪林| 欧美日韩性生活| 美女露出粉嫩尿囗让男人桶| 国产精品一区二区三区av麻| 欧美插天视频在线播放| 中文字幕一区二区人妻电影| 韩国三级电影一区二区| 久久偷窥视频| 在线观看电影av| 日本精品视频一区二区| 国产伦理在线观看| av一区二区在线播放| 欧美激情啊啊啊| 中文字幕精品一区二区精| 成人精品亚洲人成在线| 五月天丁香综合久久国产 | 91亚洲自偷观看高清| 国内精品久久久久| 亚洲中文字幕在线观看| 91亚洲国产成人精品一区二三 | 欧美高清hd18日本| aa片在线观看视频在线播放| 欧美一区成人| 国产精品稀缺呦系列在线| 三级网站在线看| 亚洲免费电影在线| 中文字幕在线观看第三页| 久久久免费毛片| 欧美理论电影在线播放| 中文人妻熟女乱又乱精品| 91麻豆123| 久久亚洲精品无码va白人极品| aa亚洲一区一区三区| 尤物九九久久国产精品的分类| 久久免费激情视频| 成人av影院在线| 大胆欧美熟妇xx| 久久久久久久久成人| 中文字幕免费精品一区高清| 中文字幕免费在线观看视频| av激情亚洲男人天堂| 成人午夜免费在线视频| 九九99久久精品在免费线bt| 久久久精品电影| 亚洲一级视频在线观看| 国产精品亲子伦对白| 日日碰狠狠丁香久燥| 亚洲人成网亚洲欧洲无码| 97视频在线观看视频免费视频| 亚洲精品视频专区| 亚洲影视在线观看| 亚洲欧美激情一区二区三区| 91成人精品| 亚洲综合精品一区二区| 超碰在线观看免费版| 欧美一区二区三区四区五区 | 欧美日韩一区二区在线播放| 亚洲 欧美 日韩在线| 在线精品一区二区| 国产日韩久久| 手机在线观看av| 亚洲精品在线看| 男人天堂视频网| 久久精品亚洲一区二区三区浴池| 欧美一区二区中文字幕| 伦理一区二区三区| 日本国产一区二区三区| 美女毛片在线看| 欧美图片一区二区三区| 美女网站视频色| 激情五月婷婷综合| wwwwww欧美| 里番精品3d一二三区| 欧美一级片一区| 成年人视频网站在线| 欧美视频三区在线播放| 精品在线观看一区| 国产二区国产一区在线观看| 国产精品igao激情视频| 涩爱av色老久久精品偷偷鲁| 97香蕉超级碰碰久久免费的优势| 日本一区视频| 欧美精选午夜久久久乱码6080| 男人操女人的视频网站| 不卡一区二区三区四区| 一区二区三区国产免费| 亚洲女同中文字幕| 精品一区二区三区自拍图片区 | 2020国产精品久久精品不卡| av丝袜在线| 一本色道久久综合狠狠躁篇怎么玩 | 欧美电影影音先锋| 日本特黄一级片| 欧美经典一区二区三区| 欧美69精品久久久久久不卡 | 亚洲大尺度视频在线观看| 在线观看日韩精品视频| 精品一区二区三区香蕉蜜桃| 91九色丨porny丨国产jk| 欧美呦呦网站| 国产一区二区不卡视频| 欧美jizz18| 欧美诱惑福利视频| 91高清在线观看视频| 亚洲欧洲一区二区三区久久| 国产免费av电影| 色婷婷av一区| 午夜偷拍福利视频| 综合av第一页| 成人免费毛片糖心| 国产不卡一区视频| 亚欧激情乱码久久久久久久久| 激情久久中文字幕| 亚洲在线不卡| 欧美日韩播放| 国产女人水真多18毛片18精品| 日韩伦理一区二区| 日韩av色在线| av男人的天堂在线观看| 久久五月天综合| 91亚洲欧美| 亚洲精品自拍视频| 亚洲第九十九页| 7777精品久久久大香线蕉| 福利网址在线观看| 午夜亚洲福利老司机| 国产av 一区二区三区| 国产精品网友自拍| 人妻精品久久久久中文| 99久久精品免费观看| 色欲欲www成人网站| 国产在线一区二区综合免费视频| 亚洲欧美视频二区| 三级不卡在线观看| 午夜精品久久久内射近拍高清| 亚洲国产导航| 久久精品xxx| 亚洲国产一成人久久精品| 亚洲精品8mav| 欧美丝袜丝交足nylons172| 美女精品国产| 色天下一区二区三区| 精品国产免费一区二区三区 | 亚洲成人激情视频| 午夜精品在线播放| 欧美成人三级电影在线| www.黄色一片| 精品国产乱码久久久久久影片| 国产喷水吹潮视频www| 欧美一区二区视频免费观看| 国产又粗又猛又黄又爽无遮挡 | 性xxxx视频播放免费| 精品不卡在线视频| 日日躁夜夜躁白天躁晚上躁91| 亚洲国产日韩一区| 四虎在线免费观看| 亚洲女成人图区| 丁香婷婷在线| 中文字幕在线看视频国产欧美在线看完整 | 亚洲精品自拍动漫在线| 欧美精品xxxxx| 亚洲国产精品综合小说图片区| 国产性生活网站| 亚洲第一福利视频在线| 婷婷激情五月网| 日本乱码高清不卡字幕| 中文字幕在线网址| 91精品国产综合久久久久久漫画| 国产毛片毛片毛片毛片毛片| 精品日韩av一区二区| 精品国产av一区二区三区| 精品久久国产字幕高潮| 亚洲 国产 欧美 日韩| 亚洲人成啪啪网站| 欧美成人三区| 欧美黑人巨大精品一区二区| 国产乱码午夜在线视频| 国产成人免费av| 成人午夜888| 国产欧美一区二区在线播放| sdde在线播放一区二区| 日本美女爱爱视频| 免播放器亚洲| 中文字幕在线视频精品| 成人福利视频网站| 少妇无套高潮一二三区| 亚洲精品你懂的| 久久精品免费在线| 91精品办公室少妇高潮对白| 国产日韩欧美视频在线观看| 亚洲成人精品久久久| 91欧美在线视频| 久久久久久久久中文字幕| 成人在线爆射| 99视频在线| 欧美一级本道电影免费专区| 欧洲精品视频在线| 肉色丝袜一区二区| 年下总裁被打光屁股sp | 国产一区在线不卡| 日韩片在线观看| 中文字幕一区二区在线观看| 日韩毛片在线播放| 欧美精品第1页| 日av在线播放| 欧美另类99xxxxx| 久久野战av| 国产色综合一区二区三区| 久久福利综合| 国产三区在线视频| 国产超碰在线一区| 色偷偷www8888| 日韩欧美有码在线| 国产黄色一区二区| 一区二区三区天堂av| 91色在线看| 95av在线视频| 人人狠狠综合久久亚洲婷婷| 久久久性生活视频| 国产精品一区二区在线观看不卡 | 蜜桃在线一区二区| 色av吧综合网| 忘忧草在线www成人影院| 国产欧美日韩伦理| 狠狠入ady亚洲精品| 第一区免费在线观看| 国产午夜精品久久久久久免费视| 久久久久久久蜜桃| 91精品国产综合久久香蕉的特点| 888av在线| 国产精品99久久久久久白浆小说| 日韩欧美中文字幕电影| 精品一区二区三区无码视频| 国产一区二区电影| 搜索黄色一级片| 欧美日韩国产成人在线91| 精华区一区二区三区| 欧美在线不卡区| 欧美成人午夜77777| 欧美一级片免费播放| 久久99国内精品| 一级肉体全黄裸片| 欧洲激情一区二区| 能在线看的av| 国产精品久久一| 国产区精品区| 亚洲成人av免费看| 国产精品黄色在线观看| 人妻中文字幕一区二区三区| 亚洲性生活视频在线观看| av一区在线| 翔田千里亚洲一二三区| 美女视频一区在线观看| 一区二区三区在线播放视频| 777午夜精品视频在线播放| v片在线观看| 91中文字幕在线| 国产一区二区三区自拍| 不卡的一区二区| 亚洲午夜激情av| 天天射天天操天天干| 欧美怡春院一区二区三区| 欧美另类69xxxxx| gai在线观看免费高清| 最近中文字幕一区二区三区| av网站免费大全| 欧美精品福利在线| 精品国产午夜肉伦伦影院| 无码精品国产一区二区三区免费| 国产亚洲制服色| 91国产免费视频| 九九热精品视频在线播放| 国产精品白丝一区二区三区| 欧美在线一区视频| 久久精品视频免费| 91午夜交换视频| 欧美激情精品久久久久久变态| 久久a级毛片毛片免费观看| 精品国产免费av| 国产精品看片你懂得 | 亚洲九九九在线观看| av成人在线播放| 成人在线免费高清视频| 99久久精品国产麻豆演员表| 久久国产香蕉视频| 欧美日本在线视频中文字字幕| 日韩激情啪啪| 欧美一级视频在线| 精品国产999| 老司机精品影院| 国产一区二区三区四区五区在线| 日韩精品乱码av一区二区| 青青草激情视频| 亚洲少妇激情视频| 日韩欧美中文在线观看| 亚洲成熟丰满熟妇高潮xxxxx| **网站欧美大片在线观看| 亚洲AV第二区国产精品| 91热福利电影| 久久性色av| 久久99久久久| 在线电影av不卡网址| 国产伦精品一区二区三区免费优势| 亚洲三级视频网站| 亚洲午夜av在线| 在线激情免费视频| 久久精品五月婷婷| 国产精品一区二区三区乱码| www.久久久久久久| 久久久久免费视频|