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

揭密首個面向IaaS的查詢語言:ZStack Query Language(ZQL)

企業動態 IaaS
為了簡化UI工作并為運維人員提供一種更加靈活的資源查詢方式,ZStack在2.6版本中推出了首個面向IaaS的查詢語言 —— ZStack Query Language,簡稱ZQL。

   為了簡化UI工作并為運維人員提供一種更加靈活的資源查詢方式,ZStack在2.6版本中推出了***面向IaaS的查詢語言 —— ZStack Query Language,簡稱ZQL。

背景

        IaaS管理著海量的數據中心資源,如何對這些資源進行靈活快速的查詢是運維人員面臨的一個難題。在以往的IaaS軟件中,往往只對單個資源的某些字段提供有限的API查詢支持,例如可以通過虛擬機的IP字段查詢,這不足夠也不靈活。運維人員在做復雜查詢時往往得繞開IaaS軟件直接查詢其后端數據庫,這既要求運維人員要了解IaaS資源的內部關系,又帶來了數據庫誤操作的風險。

        從ZStack正式發布的***個版本ZStack0.6開始,我們就致力在API層面提供跟數據庫級別的查詢功能,ZStack的每個資源都包含一個Query API,能夠通過資源的自身字段以及資源的關聯資源字段進行查詢。例如

QueryVmInstance name~=web-vm state=Running

這里查詢所有名字包含web-vm字符串,正在運行中的VM。又例如

QueryVmInstance vmNics.eip.vip.ip='22.22.22.22'

EIP是虛擬機的關聯資源,這里查詢網卡綁定了EIP為22.22.22.22的虛擬機。

Query API功能強大:

        用戶可以通過count參數返回滿足查詢條件資源數量,類似SQL的count();

        通過fields參數指定要返回的字段,類似SQL的uuid,name from;

        通過sortBy、sortDirection參數指定排序的字段和方向,類似SQL的order by;

        通過start、limit參數實現分頁查詢,類似SQL的limit和offset。

        Query API除了使用方便外,定義也很簡單。程序員在ZStack中增加了一種新資源后,只需要在代碼中定義如下class:

@AutoQuery(replyClass = APIQueryVmInstanceReply.class, inventoryClass = VmInstanceInventory.class)

public class APIQueryVmInstanceMsg extends APIQueryMessage {

}

不需要寫任何實現,對應資源就具有了Query API。

ZStack內部包含一個Query Service負責處理所有資源的Query API,將他們翻譯成相應的SQL語句,在查詢條件中包含關聯資源條件時會生成對應的Join子句。

基于Query API, ZStack0.6版本就包含了超過400萬個單項查詢條件,組合查詢條件數為400萬的階乘。極大的方便了運維和復雜UI的設計。但Query API仍然包含一些缺陷:

        查詢條件之間只能是AND邏輯,無法執行OR邏輯,條件之間也無法加括號實現復雜邏輯組合

        不支持類似SQL中的sub query子句

        單個API只能查詢一種資源,查詢多種資源時需要調用多個API

        不支持跟監控系統的查詢語言整合

        隨著ZStack UI的場景越來越豐富,Query API的限制使得UI端的工作越來越多,很多場景需要多次調用Query API進行數據組合。例如在監控Top 5頁面(用于檢測系統中CPU、內存、磁盤、網絡等資源使用率***5個資源的頁面),需要先采用Query API將虛擬機、物理機等資源信息查詢回來,再調用監控系統ZWatch的API查詢對應的監控數據。

Query API在未來的ZStack版本中會一直保留并維護,其后端實現已經從原來的Query Service替換成ZQL。

ZStack Query Language

        使用過著名issue管理系統JIRA的開發者都知道JIRA在進行高級搜索的時候提供一種查詢語言JQL (JIRA Query Language),能夠使用一種類似SQL的DSL(Domain Specific Language)對JIRA中ticket的各個字段進行高效的查詢。ZQL跟JQL類似,也是一種類似SQL的DSL,先來看一個例子:

query vminstance where name='webvm' or vmnics.ip='192.168.0.10' or (vmnics.eip = '172.20.100.100' (cpuNum >= 8 or clusterUuid in ('fe13b725c80e45709f0414c266a80239','73ca1ca7603d454f8fa7f3bb57097f80')))

在這個簡單例子中,可以看到很多熟悉的SQL元素,例如and/or條件、括號、>=/in操作符等。ZQL可以看作SQL的一個子集外加ZStack根據自身需求進行的增強的查詢語言。它的基本結構如下:

QUERY queryTarget (WHERE condition+)? restrictBy? returnWith? groupBy? orderBy? limit? offset? filterBy? namedAs?

query關鍵詞

一條ZQL語句通常以query關鍵字開頭,queryTarget表示要查詢的資源或資源字段的集合。前面的例子中vminstance代表虛擬機,例如host代表物理機、zone代表區域,所有可被查詢的資源都有自己的名稱。如果不希望返回資源的所有字段,只希望獲得資源的一個或多個字段,實現類似SQL的uuid,name from ...的功能,可以在資源名后指定字段名,多個字段名用逗號隔離,例如:

query vminstance.uuid,name,cpuNum

該查詢返回所有虛擬機的UUID、名稱以及CPU數量。

除了query關鍵字,查詢也能以count和sum關鍵字開頭,前者返回滿足查詢條件資源的總數,后者可以對資源的某個字段進行求和。例如:

vminstance where cpuNum > 8

返回系統中CPU數量超過8核的虛擬機的總數。

sum vminstance.memorySize by name where cpuNum > 8 

用虛擬機名字對CPU核數超過8個的虛擬機進行分組,對它們的memorySize字段進行求和。如果系統中有兩個10CPU8G的虛擬機都名為webvm,則求和后返回webvm虛擬機總內存使用數為16G。翻譯成SQL則為:

sum(memorySize) from vminstance where cpuNum > 8 group by name

WHERE從句

ZQL的WHERE從句跟SQL的WHERE從句類似,支持and/or邏輯操作符、括號組合,條件的比較符支持=,!=,>,>=,<, <=, like, not like, is null, is not null, in, not in,查詢條件名為資源的字段名。跟SQL不一樣的地方在于,ZQL的查詢條件可以是關聯資源的字段,例如:

query vminstance where 

vmNics.eip.vip.ip='22.22.22.22'

注意where從句前無需寫類似SQL的from xx從句,因為query vminstance已經限定了被查詢的資源

這里vip跟eip關聯,eip跟vmnic關聯,vmnic又跟vminstance關聯,則我們可以指定vip的IP作為查詢條件。這正是ZQL的強大之處,對于多個關聯資源的查詢,無需調用多次API在應用端組合數據,也無需像SQL一樣寫復雜的join從句,只需要像編程一樣通過點號(.)引用另一個資源即可, ZQL的翻譯器會自動將跨資源引用翻譯成對應的SQL join從句。

WHERE從句可以包含子查詢,類似于SQL的sub query功能,例如:

query vminstance where vmNics.l3NetworkUuid in (query l3network.uuid 

where ipRanges.networkCidr='10.1.0.0/24')

這里找出所有CIRD為10.1.0.0/24的三層網絡上運行的虛擬機。

上面這個例子也可以用更簡單的方法實現:query vminstance where vmNics.l3network.ipRanges.networkCidr='10.1.0.0/24',這里只是為了演示子查詢功能

GROUP BY、ORDER BY、LIMIT、OFFSET 子句

跟SQL一樣,ZQL支持GROUP BY、ORDER BY、LIMIT、OFFSET關鍵字,以實現分組、排序、分頁等功能。

GROUP BY:

通過虛擬機的區域UUID和集群UUID分組,統計各區域中各集群中虛擬機的數量。

vminstance group by zoneUuid,clusterUuid

ORDER BY:

查詢所有虛擬機,使用cpuNum字段降序排序。

1.query vminstance order by cpuNum desc

LIMIT、OFFSET:

使用limit和offset實現分頁:

query vminstance limit 100 offset 10

多資源查詢

對于多個資源的查詢,可以通過多條query查詢語句實現,語句之間使用分號分隔,例如:

query vminstance where name = 'my-vm';

query host where cpuNum > 10;

query zone;

則一次調用即可返回三種資源的查詢結果。由于返回的結果是一個map的JSON結構,為了方便獲得對應語句的查詢結果,可以使用named as關鍵字對查詢語句命名,例如:

query vminstance where name = 'my-vm' named as 'vm';

query host where cpuNum > 10 named as 'host';

query zone named as 'zone';

則在返回的JSON map中,可以通過vm、host、zone作為key獲得對應語句的查詢結果。

合并監控查詢 (return with從句)

在ZStack中使用了兩種數據庫:關系數據庫存放元數據,時序數據庫存放監控數據。由于不同數據庫查詢方式不一樣,在ZQL之前,用戶要查詢一個資源的監控數據,需要先通過Query API獲得該資源的元數據,再通過ZWatch的查詢API獲得其監控數據。例如要查詢一個名為webvm虛擬機的CPU使用率監控數據,要執行如下API:

QueryVmInstance fields=uuid name=webvm

GetMetricData namespace=ZStack/VM metricName=CPUUsedUtilization labels=VMUuid=QueryVmInstance返回的UUID offsetAheadOfCurrentTime=60

ZQL通過return with子句解決這個問題。return with是一種插件機制,它允許子系統 通過插件將自身的查詢條件注入ZQL中,ZQL會先執行關系數據庫查詢,將滿足條件資源的原數據查詢出來后,再將資源的主鍵(primary key)作為輸入條件調用實現return with子句的插件,***將插件的查詢結果一并返回給ZQL的調用者。

上述查詢虛擬機監控數據的需求可以通過一條ZQL語句實現:

query vminstance.hostUuid,uuid where name = 'webvm' return with (zwatch{resultName='webvm-cpu',metricName='CPUAllUsedUtilization',offsetAheadOfCurrentTime=60})

返回:

{

    "results": [

        {

            "inventories": [

                {

                    "hostUuid": "f8271f58468b4281a212a43e530b5535",

                    "uuid": "05781209d24341ac84fc055ae71820ac"

                }

            ],

            "returnWith": {

                "webvm-cpu": [

                    {

                        "labels": {

                            "VMUuid": "05781209d24341ac84fc055ae71820ac"

                        },

                        "time": 1533280402,

                        "value": 0.8

                    },

                    {

                        "labels": {

                            "VMUuid": "05781209d24341ac84fc055ae71820ac"

                        },

                        "time": 1533280462,

                        "value": 0.8

                    }

                ]

            }

        }

    ],

    "success": true

}

        這里我們用一條ZQL語句中即返回了我們感興趣的元數據字段:uuid和hostUuid,也返回了該虛擬機的監控數據。細心的讀者已經注意到我們在ZWatch查詢字段中指定了參數resultName='webvm-cpu',并且在返回的JSON map中監控數據的key也是webvm-cpu。跟named as關鍵字一樣,這是為了執行多條ZWatch查詢子句時方便檢索返回結果準備的。 ZStack UI使用非常復雜的ZQL查詢語句,例如在TOP 5頁面,一條ZQL查詢包含多達13個ZWatch查詢:

ZQLQuery zql="query vmInstance.uuid,name where zoneUuid='89e148fb667c404dbc5309a2e956fa28' hypervisorType='KVM' type='UserVm' state='Running' return with (zwatch{resultName='CPUAllUsedUtilization',metricName='CPUAllUsedUtilization',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid\")',functions='top(num=5)'},zwatch{resultName='MemoryUsedInPercent',metricName='MemoryUsedInPercent',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid\")',functions='top(num=5)'},zwatch{resultName='MemoryFreeInPercent',metricName='MemoryFreeInPercent',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid\")',functions='top(num=5)'},zwatch{resultName='DiskAllReadOps',metricName='DiskAllReadOps',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid\")',functions='top(num=5)'},zwatch{resultName='DiskAllWriteOps',metricName='DiskAllWriteOps',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid\")',functions='top(num=5)'},zwatch{resultName='DiskAllReadBytes',metricName='DiskAllReadBytes',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid\")',functions='top(num=5)'},zwatch{resultName='DiskAllWriteBytes',metricName='DiskAllWriteBytes',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid\")',functions='top(num=5)'},zwatch{resultName='NetworkOutBytes',metricName='NetworkOutBytes',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid,NetworkDeviceLetter\")',functions='top(num=5)'},zwatch{resultName='NetworkInBytes',metricName='NetworkInBytes',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid,NetworkDeviceLetter\")',functions='top(num=5)'},zwatch{resultName='NetworkOutPackets',metricName='NetworkOutPackets',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid,NetworkDeviceLetter\")',functions='top(num=5)'},zwatch{resultName='NetworkInPackets',metricName='NetworkInPackets',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid,NetworkDeviceLetter\")',functions='top(num=5)'},zwatch{resultName='NetworkOutErrors',metricName='NetworkOutErrors',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid,NetworkDeviceLetter\")',functions='top(num=5)'},zwatch{resultName='NetworkInErrors',metricName='NetworkInErrors',offsetAheadOfCurrentTime=60,period=6,functions='average(groupBy=\"VMUuid,NetworkDeviceLetter\")',functions='top(num=5)'})"

上例是在ZStack CLI中執行時的例子,使用\對引號轉義

當資源特別多時,時序數據庫查詢性能可能成為多條ZWatch查詢的性能瓶頸,故return with會通過并發的方式執行插件,默認并發度為10。例如上述例子中的13條ZWatch查詢會在10個線程中并發執行。用戶可以通過全局配置zql.returnWith.concurrency更改并發度,例如

UpdateGlobalConfig category=query name=zql.returnWith.concurrency value=15

限制查詢 (restrict by從句)

        ZStack的企業管理模塊包含一個功能,可以對管理綁定某個區域,使得該管理員只能管理該區域內的資源,這就要求我們的ZQL對該管理員的查詢請求只返回與其綁定區區中的資源。

        對于虛擬機這樣的資源,其元數據本身就帶zoneUuid字段用于標識所在區域。但對于eip這樣的資源,其元數據并無任何字段表示區域屬性,區域屬性是由其所在的三層網絡或綁定的虛擬機確定的。例如要查詢某個區域內的eip,可以使用:

# 通過與虛擬機的綁定關系查詢

query eip where vmNic.vmInstance.zoneUuid = '52fdad0a2c0d4131a6c0fc6c1b7141a6'

# 通過所在三層網絡確定

query eip where vip.l3Network.zoneUuid = '52fdad0a2c0d4131a6c0fc6c1b7141a6'

        無論那種方式,都需要調用者了解知道eip跟zone之間的關聯關系,這對API的使用者提出了非常苛刻的要求。ZQL通過restrict by從句解決這個問題。跟return with從句類似,restrict by也是個插件框架,它允許其它服務通過插件解讀restrict by從句中指定的條件,向生成的SQL中注入額外條件。例如上面的eip例子通過restrict by從句可以寫成:

query eip restrict by (zone.uuid='52fdad0a2c0d4131a6c0fc6c1b7141a6')

        這里調用者無需知道eip跟zone之間的邏輯關系,restrict by的路徑插件會自動計算兩者的邏輯關系,并生成對應的SQL join從句。這里eip既可以通過所在三層網絡,也可以通過綁定的虛擬機確定和區域的關系,插件會自動計算路徑權重,使用權重***的路徑生成SQL語句。

        對于eip這個例子,插件會選取通過三層網絡的關系生成SQL語句。因為eip可能沒有跟虛擬機綁定,但其一定處于某個三層網絡,故三層網絡這條路徑的權重更高。

        restrict by支持多個條件,通過逗號分隔,多個條件之間是AND關系。

        除了給ZQL調用者使用外,restrict by插件在ZStack內部也被其它服務廣泛使用。例如賬號系統會通過插件在普通賬戶調用ZQL的時候注入跟賬號關聯的SQL語句,使得普通賬號只能查詢到屬于該賬號的資源;又例如SNS服務會通過插件注入語句讓ZQL只能查詢到非系統類型的接收端。

未來

        ZQL為ZStack提供了一種類似SQL的IaaS查詢語言,并且能夠通過return with插件框架跟其它非關系數據庫系統進行查詢整合。在未來的版本中我們還會繼續豐富其功能,目前有兩個方向:

filter by從句

        雖然return with的ZWatch插件能讓我們在查詢資源元數據的同時查詢其監控數據,但還不能將監控數據作為元數據的查詢條件,例如無法通過一條ZQL實現查詢某個集群中所有CPU使用率超過90%的虛擬機。這在未來版本中會通過filter by從句實現,例如:

query vminstance where clusterUuid = '33e26bd547d149fbb190436cc9aca824' filter by (zwatch{metricName='CPUAllUsedUtilization', offsetAheadOfCurrentTime=60, threshold>90})

同樣,filter by從句會實現成類似return with的插件框架,用于整合非關系數據庫的查詢條件。

智能CLI

        ZQL有大量的從句,每個ZStack又有大量的可查詢字段,目前ZStack CLI可以對Query API的可查詢字段進行補全,但ZQL還暫時無法補全。未來版本中,我們會對CLI進行在增強,使其對所有查詢條件可以進行提示和補全。

歡迎大家在ZStack官網下載頁面

http://www.zstack.io/product_downloads/

進行免費的下載安裝和試用。

責任編輯:張燕妮 來源: 互聯網
相關推薦

2018-08-15 09:55:35

IaaS查詢ZStack

2018-08-13 16:15:41

2009-06-18 09:47:50

2015-08-06 11:10:46

開源IaaS軟件ZStack本地存儲

2020-06-02 18:03:25

ZStack超融合一體機裸金屬

2018-07-02 17:53:16

ZStack

2009-09-14 14:20:36

LINQ ORM

2010-02-23 10:58:43

EucalyptusIaaS云服務

2010-03-01 17:47:53

Python語言

2017-05-17 10:46:33

華為公有云IaaS

2012-06-25 09:20:05

IaaS云計算

2019-12-13 10:14:43

開發技能代碼

2024-04-02 07:32:58

Go語言接口

2010-01-22 10:26:40

C++語言

2014-07-29 10:49:23

Swift

2012-03-30 14:15:50

GoogleGo

2021-02-04 12:40:55

勒索軟件VovalexD語言

2010-08-24 16:00:43

C語言

2011-06-02 09:47:11

C語言重構

2015-07-13 10:19:35

運維ZStackIaaS
點贊
收藏

51CTO技術棧公眾號

正在播放国产对白害羞| 熟妇人妻无乱码中文字幕真矢织江| 国产精品视频在线观看免费| 一区二区电影在线观看| 91精品国产入口在线| 亚洲黄色网址在线观看| 无码精品在线观看| 免费在线一区观看| 久久视频免费在线播放| 日韩少妇一区二区| 免费观看成人性生生活片| 国产精品国产三级国产aⅴ入口| 91最新国产视频| 国产乡下妇女做爰| 欧美疯狂party性派对| 日韩欧美色综合网站| 免费观看成人网| 伊人在我在线看导航| 久久亚洲精华国产精华液| 91精品久久久久久久久中文字幕| 日本一区二区欧美| 水蜜桃久久夜色精品一区| 精品日韩在线一区| 亚洲第一中文av| 2001个疯子在线观看| 中文字幕不卡的av| 精品欧美日韩在线| 国产又粗又猛视频| 午夜在线一区二区| 精品中文字幕视频| 你懂得视频在线观看| 日韩成人一级| 日韩一区二区视频| 美女喷白浆视频| 91吃瓜在线观看| 亚洲欧美日韩综合aⅴ视频| 日本精品一区二区三区不卡无字幕| www.成人精品| 久久国产欧美日韩精品| 欧美在线一级va免费观看| 免费中文字幕在线观看| 欧美国产一级| 国产亚洲精品日韩| 亚洲成人av免费在线观看| 视频在线亚洲| 7777精品伊人久久久大香线蕉 | 中文字幕欧美视频| 国精产品一区一区三区四川| 欧美日韩国产在线看| 国产精品啪啪啪视频| 免费看a在线观看| 中文字幕电影一区| 视频一区视频二区视频| 理论视频在线| 久久精品欧美日韩| 欧美日韩精品久久| 蜜桃视频在线免费| 久久先锋影音av| 久久大片网站| 天天色综合av| k8久久久一区二区三区 | 欧美美女操人视频| 国产乱国产乱老熟300| 综合国产精品| 久久6免费高清热精品| 波多野结衣家庭教师| 久久久久久影院| 不卡伊人av在线播放| 人妻人人澡人人添人人爽| 亚洲乱码电影| 欧美日韩成人网| 久久久精品国产sm调教| 亚洲大片在线| 国产91精品久久久久久| 天天干天天操天天操| 轻轻草成人在线| 国产免费成人av| 国产男男gay网站| 国产高清不卡一区二区| 国产精品一区免费观看| 色呦呦免费观看| 久久影音资源网| 人禽交欧美网站免费| 69久久精品| 一区二区三区视频在线观看| 欧美视频免费看欧美视频| 91av亚洲| 欧美日韩国产一级二级| 在线观看你懂的视频| 白白在线精品| 国产亚洲美女久久| www.xxxx日本| av不卡在线看| 国产精品一区二区三区成人| 国产成人精品亚洲精品色欲| 99久久99久久综合| 亚洲精品欧美精品| 女人黄色免费在线观看| 日韩欧美一区视频| 亚洲图片 自拍偷拍| 蜜桃久久久久| 中文字幕亚洲图片| 免看一级a毛片一片成人不卡| 香蕉久久久久久久av网站| 国产精品一区久久久| 国产91绿帽单男绿奴| 国产亚洲一区二区三区在线观看| 亚洲精品偷拍视频| 伊人网在线播放| 91精品国产色综合久久| 少妇毛片一区二区三区| 亚洲综合五月| 情事1991在线| www.国产.com| 国产精品福利一区二区| 免费无遮挡无码永久视频| 久久青草视频| 精品国产乱码久久久久久图片| 亚洲日本精品视频| 在线成人h网| 成人有码视频在线播放| 四虎影视在线观看2413| 又紧又大又爽精品一区二区| 青青草av网站| 久久香蕉精品香蕉| 欧美成人三级视频网站| 在线观看国产成人| 久久色.com| 东北少妇不带套对白| 国产精久久久| 在线播放亚洲激情| 六月丁香婷婷综合| 粉嫩绯色av一区二区在线观看| 亚洲精品欧美精品| 性欧美freehd18| 日韩电影网在线| 精品午夜福利视频| 国内精品久久久久影院色| 深夜福利成人| 国产日韩另类视频一区| 日韩精品在线影院| 国产午夜小视频| 成人毛片老司机大片| 成人午夜免费剧场| 欧美视频在线视频精品| 亚洲午夜精品久久久久久性色| 偷偷操不一样的久久| 粉嫩蜜臀av国产精品网站| 亚洲天堂第一区| 欧美日韩午夜电影网| 欧美成人精品不卡视频在线观看| 亚洲最大成人av| 中文av一区二区| 日韩av片网站| 成人三级视频| 国产精品自产拍高潮在线观看| 国产精品二线| 欧美视频中文字幕| 东京热无码av男人的天堂| 免费观看在线综合| 亚洲欧洲免费无码| 午夜不卡一区| 久久成年人视频| 99热在线只有精品| 一区二区三区在线免费视频| 两性午夜免费视频| 午夜欧美精品久久久久久久| 91原创国产| 蜜臀av国内免费精品久久久夜夜| 精品福利在线导航| 久久夜靖品2区| 久久综合九色综合欧美就去吻| 日本熟妇人妻xxxxx| av在线不卡免费观看| 国产日韩欧美电影在线观看| av中文字幕在线观看| 日韩欧美在线不卡| 久草国产精品视频| 久久精品人人爽人人爽| 色18美女社区| 亚洲午夜电影| 欧美一级爱爱| 亚洲我射av| 久久青草福利网站| 久久米奇亚洲| 91精品国产综合久久精品性色| 欧美黄色一级网站| 久久精品视频免费观看| 伊人影院综合在线| 欧美福利视频| 久久久久久久久四区三区| 国产福利一区二区三区在线播放| 久久中文久久字幕| 无码精品视频一区二区三区| 欧美日韩在线直播| 久久国产精品二区| 亚洲国产高清不卡| 国产51自产区| 日本欧美在线观看| 国产真实老熟女无套内射| 国产精品片aa在线观看| 成人黄色在线播放| 女厕盗摄一区二区三区| 久久久国产视频91| 亚洲人妻一区二区| 欧美一卡2卡三卡4卡5免费| 台湾佬中文在线| 亚洲激情图片一区| 日本二区在线观看| 国产91精品一区二区麻豆网站 | 日本亚洲天堂网| 黄色三级中文字幕| 日韩精品诱惑一区?区三区| 国产精品三区www17con| 青青青国产精品| 91av在线免费观看| а√天堂8资源在线官网| 亚洲欧美国产另类| 国精产品一品二品国精品69xx| 欧美视频一区二区三区四区| 中文字幕一区二区三区精品| 亚洲欧洲综合另类| 夜夜春很很躁夜夜躁| 99久久婷婷国产精品综合| 日本国产一级片| 日日欢夜夜爽一区| 久久久一本二本三本| 综合一区av| 中文字幕av日韩精品| 国产探花在线精品| 久久精品日产第一区二区三区| 欧美区一区二区| 91精品视频专区| 成人久久网站| 国产精品福利在线观看网址| 久久男人天堂| 久久人91精品久久久久久不卡| 国产区在线看| 最近2019中文字幕mv免费看 | 日韩av午夜在线观看| 男人操女人逼免费视频| 亚洲高清自拍| 国产高清不卡无码视频| 1024精品久久久久久久久| 伊人久久av导航| 全球成人免费直播| 性欧美videosex高清少妇| 色橹橹欧美在线观看视频高清 | 中文精品一区二区| 欧美日韩精品免费观看| 免费成人网www| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 欧美成人午夜激情在线| 黄色的网站在线观看| 久久精品精品电影网| 免费黄色在线观看| 美女啪啪无遮挡免费久久网站| 黄网站在线播放| 久久91精品国产91久久久| 色呦呦在线免费观看| 欧美激情免费观看| www.8ⅹ8ⅹ羞羞漫画在线看| 久久久中精品2020中文| 国产粉嫩在线观看| 5566成人精品视频免费| 亚洲播播91| 国产精品久久久久久网站| 成人国产综合| 成人乱人伦精品视频在线观看| 韩国三级大全久久网站| 丁香五月网久久综合| 久久精品福利| 欧美日本韩国一区二区三区| 国产尤物久久久| 异国色恋浪漫潭| 国产精品地址| 北条麻妃69av| 日本欧美一区二区| 无套白嫩进入乌克兰美女| 粉嫩高潮美女一区二区三区| 亚洲狠狠婷婷综合久久久久图片| 国产欧美一区二区精品忘忧草| 日本裸体美女视频| 亚洲韩国一区二区三区| 香蕉影院在线观看| 欧美精品九九99久久| 成人免费一级视频| 亚洲欧洲日产国产网站| 日本在线视频站| 欧美精品videossex88| 亚洲人成午夜免电影费观看| 国产日韩欧美日韩| 老牛影视av一区二区在线观看| 日韩aⅴ视频一区二区三区| 天天天综合网| 国产精品va无码一区二区| 蜜桃视频在线观看一区| 黑人玩弄人妻一区二区三区| 久久精品男人的天堂| 久久久久久久久久久网| 色呦呦日韩精品| 国产精品欧美亚洲| 精品亚洲国产成av人片传媒| 黄av在线免费观看| 欧美一级在线亚洲天堂| 精品久久国产一区| 乱一区二区三区在线播放| 午夜精品一区二区三区国产 | 久久久久久久无码| 国产精品你懂的在线| 国产精品美女毛片真酒店| 欧美偷拍一区二区| 欧美一级特黄aaaaaa| www.亚洲一区| 欧美成人ⅴideosxxxxx| 99视频在线免费观看| 热久久天天拍国产| 日韩av在线第一页| 国产精品资源网| 99精品全国免费观看| 欧美日韩中文字幕| 午夜精品久久久久久久96蜜桃 | 右手影院亚洲欧美| 亚洲女女做受ⅹxx高潮| 中文字幕+乱码+中文乱码91| 日韩成人av网址| 欧美另类tv| 成人在线免费观看视视频| 欧美禁忌电影网| 亚洲熟妇av一区二区三区漫画| 国产黄色精品视频| 天天做夜夜爱爱爱| 欧美系列在线观看| 九色在线播放| 欧美影院在线播放| 日韩av三区| 日韩视频免费播放| 丁香婷婷综合五月| 黑人巨大精品一区二区在线| 欧美精品在线观看一区二区| av中文资源在线| 国产成人+综合亚洲+天堂| 色愁久久久久久| 777久久久精品一区二区三区| 成人黄色在线看| 国产一级中文字幕| 亚洲аv电影天堂网| 密臀av在线| 国产精品亚洲不卡a| 亚洲午夜极品| 伊人久久一区二区三区| 亚洲成人资源网| 欧美一区二区公司| 韩剧1988免费观看全集| 精品欧美午夜寂寞影院| 亚洲熟妇国产熟妇肥婆| 99热99精品| 日韩在线视频不卡| 国产亚洲精品高潮| 四虎国产精品成人免费影视| 免费观看黄色大片| 国产成人午夜精品5599| 国产亚洲精品久久久久久打不开| 欧美精品一区二区三区在线播放 | 91a在线视频| 亚洲精品蜜桃乱晃| mm1313亚洲国产精品无码试看| 欧美激情一区二区三区不卡| 一级黄色片在线看| 欧美精品在线免费| 成人h动漫免费观看网站| 国产极品尤物在线| 国产亚洲欧美日韩俺去了| 中国女人真人一级毛片| 久久精品国产一区| 综合中文字幕| 欧美 国产 综合| 欧美国产欧美综合| 99热这里只有精品66| 国内精品久久久久伊人av| 最新亚洲精品| 国产福利在线免费| 一区二区三区成人| 欧美扣逼视频| 亚洲tv在线观看| aa国产精品| 国产成人免费在线观看视频| 欧美成人艳星乳罩| 亚洲黄色中文字幕| 大桥未久一区二区三区| 99国产精品久久| 伊人久久成人网| 欧美精品videosex牲欧美| 欧美伦理影院| 激情av中文字幕| 在线观看日韩一区| 欧美另类tv| 亚洲一区尤物| 99re视频精品| 国产又粗又猛又黄|