• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 181, 文章 - 2, 評論 - 85, 引用 - 0
            數(shù)據(jù)加載中……

            網(wǎng)格實踐: 在 SOA/Web 服務環(huán)境中監(jiān)視和發(fā)現(xiàn)網(wǎng)格服務-----使用 Globus Toolkit 4 中的開放源碼信息服務

            本文將簡要介紹 Globus Monitoring 和 Discovery Service(MDS)。本文討論了構(gòu)成 MDS 的組件,并介紹了在網(wǎng)格環(huán)境中其他服務通常是如何與 MDS 進行交互的。在閱讀本文之后,您應該可以配置 Globus MDS 并注冊服務,以及 為 MDS 配置其他信息提供者。您將學習如何組織信息并按照 MDS 的層次結(jié)構(gòu)來配置多個 Index Services,從而構(gòu)成網(wǎng)格的 Index Service。

            Globus Monitoring 和 Discovery Service

            Globus Monitoring 和 Discovery System(MDS)是一組 Web 服務,用來監(jiān)視和發(fā)現(xiàn)網(wǎng)格中的可用資源和服務。顧名思義,人們通常會認為資源發(fā)現(xiàn)的過程就是發(fā)現(xiàn)新的資源。然而,在網(wǎng)格環(huán)境中,資源發(fā)現(xiàn)是確定哪些網(wǎng)格資源最適合完成某個任務的過程,要求時間最短,利用資源的效率最高。這個過程是從識別可以滿足或超過當前作業(yè)需求的資源開始的。這通常是可用資源的某個子集。

            接下來,我們需要通過選擇最適合的資源來細化這個清單。這個選擇過程需要靜態(tài)和動態(tài)的信息。通常,靜態(tài)信息(例如 CPU 數(shù)量、時鐘速度、物理內(nèi)存總量、虛擬內(nèi)存以及可用磁盤空間)可以幫助確定哪些資源能夠滿足或超過任務的需求。在細化這個清單時,也要考慮一些動態(tài)信息。動態(tài)信息包括可用 CPU 的個數(shù),隊列中等待執(zhí)行的作業(yè)個數(shù),當前資源的利用率。現(xiàn)在這已經(jīng)成為一個調(diào)度問題,必須考慮業(yè)務策略、優(yōu)先級和服務級別協(xié)定(SLA)。

            調(diào)度并不是本文的重點,因此讓我們保留整個主題改天再來討論。Globus MDS 提供了有關(guān)資源的信息,這樣就可以制定智能的調(diào)度決策,從而最好且最有效地利用可用資源。MDS 也可以監(jiān)視資源,在狀態(tài)發(fā)生變化時通知感興趣的團體,并根據(jù)預先定義的條件采取行動。







            Index 和 Trigger Service

            我們對 MDS 所搜集到的有關(guān)資源的狀態(tài)進行監(jiān)視。搜集這些信息的 MDS 服務稱為 Index Service。MDS Index Service 的工作方式與注冊表非常相似。它搜集信息,然后將其作為資源屬性發(fā)布。它通過一個 Web 服務接口將所搜集的信息提供給客戶機。客戶機可以向 MDS 查詢信息,或者訂閱所感興趣的資源屬性,即表明如果這些屬性的值發(fā)生了變化,它們非常樂于被及時通知。這些信息代表了資源屬性的配置和狀態(tài)。Globus MDS 可以監(jiān)視資源,并跟蹤所選擇的資源屬性。它可以通知訂閱者屬性值發(fā)生了變化。

            這種功能是由另外一個名為 Trigger Service 的 MDS 服務提供的。它與 MDS Index Service 類似,都要從資源中搜集數(shù)據(jù),但是它同時還要對所搜集的數(shù)據(jù)進行監(jiān)視,這樣就可以在數(shù)據(jù)到達某個極限值時執(zhí)行某些預定的操作。Trigger Service 的配置就是訂閱某些屬性,并指定當某個屬性值達到某個預定的極限時應該采取什么操作。要采取的操作可以非常復雜,例如當利用率太高時提供更多資源;也可以非常簡單,例如通知系統(tǒng)管理員某個文件系統(tǒng)已經(jīng)滿了。MDS Trigger Service 通過 Web 服務提供此功能。客戶機使用這個 Web 服務來注冊觸發(fā)器事件。為了進行注冊,客戶機要提供程序的名字、一個 XPath 查詢表達式以及一個值。當 XPath 查詢所返回的值等于注冊時所提供的值時,就運行這個程序。MDS Trigger Service 通過對所搜集到的信息和在 MDS Trigger Service 注冊和配置文件中所指定的條件進行比較,來提供這種功能。


            位置 1. Trigger Service 注冊和配置文件的位置
            												
            																		
            $GLOBUS_LOCATION/etc/globus_wsrf_mds_trigger/trigger_registration_aggregation.xml
            
            												
            										

            這個配置文件使用 XPath 查詢表達式的格式定義了一些規(guī)則。每個規(guī)則都有一個當滿足該條規(guī)則時所要執(zhí)行的操作,以及該操作重復的頻率。下面這個例子實現(xiàn)了觸發(fā)器規(guī)則、相關(guān)操作以及頻率的語法,這些都是在前面的觸發(fā)器注冊和配置文件中指定的。


            清單 1. Trigger Service 注冊的例子
            												
            																		
                   <trigger:TriggerRuleType>
                      <trigger:matchingRule>//*[local-name()='GLUECE']</trigger:matchingRule>
                      <trigger:actionScript>glue-trigger-action.sh</trigger:actionScript>
                      <trigger:minimumFiringInterval>600</trigger:minimumFiringInterval>
                   </trigger:TriggerRuleType>
            
            												
            										







            MDS Aggregation Framework

            MDS Index 和 Trigger Service 都是在 MDS Aggregation Framework 之上構(gòu)建的。MDS Aggregation Framework 用來構(gòu)造搜集和聚集數(shù)據(jù)的高層服務。這些聚集器服務將從各種資源搜集來的信息匯集到一個集中的位置。這個概念的范圍很廣,從在某個容器中運行的所有服務的集中注冊表,到一個網(wǎng)格范圍的 Index Service,這可以通過配置 Index Service 與其他 Index Service 一起來存放內(nèi)容。Index Service 可以按照一種層次化的方式進行配置,上層可以從底層的 Index Service 中提取信息。上層 Index Service 可以當作是這個層次中的上游資源,底層 Index Service 可以當作是下游資源。Index Service 在這個層次中的位置是在層次配置文件中使用上游和下游服務這兩個術(shù)語進行定義的。


            位置 2. MDS 層次文件的位置
            												
            																		
            
            $GLOBUS_LOCATION/etc/globus_wsrf_mds_index/hierarchy.xml 
            
            												
            										

            這個層次文件指定了上游和下游 Index Service 的 URL。下面這個樣例聲明中包括了主機名、端口和默認的 Index Service 的標識。清單 2 顯示了 Globus Toolkit 4 測試環(huán)境中上游和下游服務的聲明。


            清單 2. 上游和下游服務聲明的例子
            												
            																		
            
                 <upstream>https://gt4-primary:8443/wsrf/
                 services/DefaultIndexService</upstream>
            
                 ...
            
                 <downstream>https://gt4-secondary:8443/wsrf/
                 services/DefaultIndexService</downstream>
            
            												
            										







            MDS 資源屬性

            正如前面介紹的,用戶可以向 Globus MDS 查詢資源的屬性。這些資源屬性代表了資源的配置和狀態(tài)。我們可以為永久資源和臨時資源維護一些屬性。Globus MDS 中的信息通過為資源數(shù)據(jù)關(guān)聯(lián)一個超時時間來保證其反映最新情況。這個值被稱為生命周期。MDS Index Service 中保存的所有服務都有一個相關(guān)的生命周期。如果在這個生命周期指定的時間內(nèi)沒有更新,數(shù)據(jù)就過期了。這種方法可以通過只在相關(guān)的資源屬性進行更新時維護這些資源的配置和狀態(tài),從而對臨時資源進行處理。當資源不再可用時,資源屬性就不會更新了,這些信息就會超時并被刪除。







            MDS 資源特性

            Globus MDS Index Service 信息是作為一組 Web Services Resource Framework(WSRF)資源屬性進行維護的。客戶機可以使用 WSRF get-property 和 WS-Notification subscribe 操作來查詢信息或在信息發(fā)生變化時收到通知。這些信息也可以使用命令行工具 wsrf-get-propertywsrf-query 進行查詢。Globus MDS Index Service 通過用 XML 格式提供所請求的信息來對查詢進行響應。下面這個例子執(zhí)行了一個通用的 DefaultIndexService 查詢。–a 選項指定可以進行匿名驗證,–s 選項指定了服務的 URL,–z 選項定義了驗證類型可以是自己、主機或 none。請參閱 清單 3







            XPath 查詢

            查詢可能會產(chǎn)生非常大的 XML 文檔。XPath 可以用來幫助定位 XML 中的不同部分。下面讓我們來看幾個例子,以此展示怎樣擴充簡單查詢來搜集更詳細的信息。下面這個例子可以通過統(tǒng)計那些屬性匹配 FreeCPU 狀態(tài)的 ComputingElements,來查詢空閑 CPU 的個數(shù)。


            清單 4. 一個查詢空閑 CPU 的 wsrf 查詢
            												
            																		
            [globust@gt4-test sbin]$ wsrf-query -a -z none -s 
            https://127.0.0.1:8443/wsrf/services/DefaultIndexService
             
            "count(//*[local-name()='GLUECE']/glue:
            ComputingElement/ glue:State/@glue:FreeCPUs)"
            
            2
            
            												
            										

            利用前面的例子,下面這個查詢展示了一個布爾檢查,看是否有指定個數(shù)的 CPU 可用。請參閱 清單 5







            監(jiān)視服務

            我們已經(jīng)討論了上面這些物理資源的概念,但是 MDS 還要監(jiān)視服務的配置和狀態(tài)信息。MDS Index Service 會搜集有關(guān)容器上運行的其他服務的信息。服務指定了在 Aggregation Service 注冊信息時,要將哪些信息保存在 MDS 中。我們稍后會討論 Aggregation Service,但是首先介紹一下服務注冊這個主題。

            服務可以使用 mds-servicegroup-add 命令進行注冊。每個注冊后的服務都有一個類似于前面介紹過的生命周期屬性的生命周期。如果某個服務的注冊項在一段指定的生命周期中沒有更新,就會過期。更新生命周期的一種方法是在后臺運行 mds-servicegroup-add 命令,這樣它就可以持續(xù)在 MDS 中更新服務注冊項并刷新服務的生命周期了。

            MDS Aggregation Service 從所有的已注冊服務中搜集信息,并通過一個 Web 服務接口將這些服務信息提供給客戶機。Globus Toolkit 發(fā)行版本中提供了一個簡單的例子來展示如何在 MDS Aggregation Service 中注冊服務。這個例子使用了下面這個位置上的服務注冊定義文件。


            位置 3. MDS 聚集注冊文件的位置
            												
            																		
            $GLOBUS_LOCATION/etc/globus_wsrf_mds_
            aggregator/example-aggregator-registration.xml
            
            												
            										

            這個樣例聚集文件定義了服務的注冊表。每個注冊項都定義了一個網(wǎng)格資源、該資源應該注冊的服務組以及服務配置參數(shù)。這個文件可以與 mds-servicegroup-add 命令一起維護網(wǎng)格資源與 Index Service 之間的注冊。這個文件定義了 Index Service 的位置,它被稱為默認的 Service Group End Point Reference。


            清單 6. Index Service URL 被定義為默認的 Service Group End Point Reference
            												
            																		
            <defaultServiceGroupEPR>
               <wsa:Address>https://gt4-test.tacc.utexas.edu:8443/
               wsrf/services/DefaultIndexService</wsa:Address>
            </defaultServiceGroupEPR>
            
            												
            										

            example-aggregator-registration 文件中包含了 GRAM 和 RFT 服務的樣例注冊項。在 ServiceGroupRegistrationParameter 塊中定義的每個資源都要在 Index Service 中進行注冊。 清單 7 顯示了一個 GRAM 和 RFT Service 注冊項的例子。

            MDS Aggregation Service 也可以對外部信息源的信息進行聚合。這些信息源可以代表本地服務可能需要的遠程資源。本地服務可以查詢 MDS Index Service 來定位遠程資源,并確定這些資源的狀態(tài)。舉例來說,下面這個例子就展示了將 Hawkeye 在默認的服務組中注冊為一個信息源。Hawkeye 是一個外部信息源的例子。它使用 Condor 技術(shù)(例如 ClassAds)來搜集和存儲有關(guān) Condor 池中的資源的信息。清單 8 顯示了如何注冊 Hawkeye,這樣就可以通過 Index Service 來使用有關(guān) Condor 的信息了。


            清單 8. 聚集服務組的例子
            												
            																		
            <ServiceGroupRegistrationParameters
               xmlns="http://mds.globus.org/servicegroup/client" >
                <RegistrantEPR	`
                  xmlns:agg="http://mds.globus.org/aggregator/types"
                  xmlns:gram="http://www.globus.org/namespaces/2004/10/gram/job"
                  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
                  <wsa:Address>
                      https://gt4-test:8443/wsrf/services/mds/test/subsource/IndexServiceEntry
                  </wsa:Address>
                  <wsa:ReferenceProperties>
                     <gram:ResourceID>Hawkeye</gram:ResourceID>
                  </wsa:ReferenceProperties>
               </RegistrantEPR>
               <RefreshIntervalSecs>600</RefreshIntervalSecs>
               <Content xsi:type="agg:AggregatorContent"
                  xmlns:agg="http://mds.globus.org/aggregator/types">
                  <agg:AggregatorConfig xsi:type="agg:AggregatorConfig">
                     <agg:ExecutionPollType>
                        <agg:PollIntervalMillis>60000</agg:PollIntervalMillis>
                        <agg:ProbeName>globus-mds-cluster-hawkeye</agg:ProbeName>
                     </agg:ExecutionPollType>
                  </agg:AggregatorConfig>
                  <agg:AggregatorData/>
               </Content>
            </ServiceGroupRegistrationParameters> 
            
            												
            										

            當服務進行注冊時,它們可以提供搜集服務信息的程序名。這個程序稱為執(zhí)行聚集器,在清單 8 中是使用 ProbeName 的形式指定的。MDS Aggregator Service 可以查詢資源屬性信息,也可以訂閱資源屬性信息,這樣就可以推動后續(xù)的更新了。要注冊服務,可以使用位置 3 所給出的 example-aggregator-registration 文件作為 mds-servicegroup-add 命令的參數(shù)。下面這個例子展示了使用 mds-servicegroup-add 命令來注冊默認的 example-aggregator-registration.xml 文件中所定義的服務。–s 參數(shù)告訴 MDS 這些服務應該要進行注冊。請參閱 清單 9

            可以使用 wsrf-query 命令驗證服務是否成功注冊。下面這個例子顯示了一個 ContainerRegistryService 查詢,用來獲得容器中正在運行的服務的地址。要在另外一個環(huán)境中使用這個查詢,請?zhí)鎿Q URL 的主機名部分。


            清單 10. 使用 wsrf-query 命令查詢注冊表地址的例子
            												
            																		
            wsrf-query -s https://gt4-test.tacc.utexas.edu:8443/wsrf/
            services/ContainerRegistryService
             "/*/*/*/*[local-name()='Address']"
            
            												
            										







            MDS 聚集類型

            我們已經(jīng)介紹過 Web 服務會發(fā)布資源屬性。一個服務應該注冊的最小資源屬性集包括服務名、服務的版本號以及這個服務是何時啟動的。有些服務(例如 GRAM 或 RFT)會發(fā)布其他信息或更詳細的信息。MDS 中的信息是使用 3 個聚集器源(Aggregator Source)進行搜集的。這 3 個聚集源是 Query Aggregator、Subscription Aggregator 和 Execution Aggregator。

            前面用來展示服務組注冊的那個例子就是一個 Execution Aggregator。Query Aggregation Source 會對注冊的服務進行挑選來產(chǎn)生信息。Subscription Aggregation Source 訂閱服務數(shù)據(jù),這樣在服務數(shù)據(jù)值發(fā)生變化時,就可以接收到通知。Execution Aggregation Source 運行一個程序來搜集信息。發(fā)布資源屬性或用來搜集服務數(shù)據(jù)的程序有時稱為信息提供者(Informational Providers)。GRAM 就是一個信息提供者,因為它會發(fā)布有關(guān)網(wǎng)格資源的 CPU 和內(nèi)存信息,以及與作業(yè)隊列和所提交的作業(yè)有關(guān)的調(diào)度器信息。類似地,可靠文件傳輸服務(RFT)也是一個信息提供者,它發(fā)布的是有關(guān)傳輸器和服務器的狀態(tài)信息。除了這些信息提供者(它們都是 Globus 發(fā)行版中的一部分)之外,MDS 還可以與其他外部信息提供者進行集成,例如 Ganglia 和 Hawkeye。

            Ganglia 是一個分布式的監(jiān)視系統(tǒng),主要用來監(jiān)視高性能系統(tǒng),例如集群。Hawkeye 是一個監(jiān)視系統(tǒng),它使用 Condor 工具和 ClassAd 機制來收集有關(guān)分布式資源的信息。Ganglia 和 Hawkeye 使用 GLUE 模式的 CML 映射來搜集資源信息,并將這些信息發(fā)送到一個 GRAM 服務,這些信息將在這個服務中作為資源屬性發(fā)布。Ganglia 信息包括主機屬性,例如主機名、處理器、內(nèi)存、操作系統(tǒng)以及文件系統(tǒng),還有負載信息。如果在 gluerp XML 文件中定義并配置了適當?shù)男畔⑻峁┱撸琈DS 就可以匯集 Hawkeye 或 Ganglia 的信息。


            位置 4. GLUE 資源提供者的位置
            												
            																		
            $GLOBUS_LOCATION/etc/globus_wsrf_mds_
            aggregator/example-aggregator-registration.xml
            
            												
            										

            Globus 默認的配置說明沒有信息提供者。要指定 Hawkeye 或 Ganglia 作為信息提供者,請修改 gluerp.xml 文件中的適當項,這個文件位于 Globus 安裝目錄中的 etc/globus_wsrf_mds/usefulrp 目錄中。下面這個例子展示了指定 Hawkeye 作為信息提供者的正確定義。后面的例子將展示如何配置 Ganglia 作為信息提供者。


            清單 11. 信息提供者注冊項
            												
            																		
            <config xmlns="http://mds.globus.org/2004/10/gluerp-config">
               <defaultProvider>shell /usr/local/globus/globus-4.0.0/
               libexec/globus-mds-cluster-hawkeye </defaultProvider>
            </config>
            
               ...
            
            <config xmlns="http://mds.globus.org/2004/10/gluerp-config">
               <defaultProvider>java org.globus.mds.usefulrp.glue.
               GangliaElementProducer</defaultProvider>
            </config>
            
            												
            										







            webMDS

            我們在前面已經(jīng)看到可以使用 wsrf-query 命令來查詢 MDS 信息。實際上,MDS 信息也可以使用 webMDS 進行查看。webMDS 是一個用來查看 MDS 中所包含的資源屬性信息的前端。webMDS 是一個 servlet,它可以查詢 Globus MDS Index Service,并使用 XSLT 轉(zhuǎn)換對數(shù)據(jù)進行格式化,從而可以很好地在 Web 瀏覽器中顯示。

            Web 管理員可以使用 HTML 表單選項定制 webMDS。他們可以配置不同的插件來搜集數(shù)據(jù),并使用 XSLT 轉(zhuǎn)換對這些數(shù)據(jù)進行格式化,從而創(chuàng)建自己的定制視圖。webMDS 可以配置為從 MDS 中的各種源搜集信息,并使用 XSL 轉(zhuǎn)換對這些信息進行過濾。如果 Globus Toolkit 是使用默認配置安裝的,那么 webMDS 就可以查詢 MDS Index Service,而不用修改任何配置。我們測試環(huán)境中使用的 webMDS URL 如清單 12 所示。要在另外的環(huán)境中使用 webMDS,請使用您自己的主機名替換其主機名部分,如果您不是在默認端口上運行容器的,還需要修改端口號。


            清單 12. webMDS URL
            												
            																		
            http://gt4-test.tacc.utexas.edu:9080/webmds
            
            												
            										

            可以通過編輯下面的 indexinfo 文件并修改默認的 URL 來改變 webMDS URL :


            位置 5. MDS 聚集注冊文件的位置
            												
            																		
            $GLOBUS_LOCATION/lib/webmds/conf/indexinfo
            
            												
            										

            要部署 webMDS,首先為 Globus (GLOBUS_LOCATION) 和 Tomcat (CATALINA_HOME) 設(shè)置環(huán)境變量,然后使用下面的命令為 Tomcat 創(chuàng)建一個 context 文件:


            清單 13. 創(chuàng)建 webMDS context 文件
            												
            																		
            $GLOBUS_LOCATION/lib/webmds/bin/webmds-create-contex-file
              \ $CATALINA_HOME/conf/Catalina/localhost
            
            												
            										

            在成功運行這個命令創(chuàng)建 context 文件之后,請重新啟動 Tomcat,以便使用新的配置信息。重新啟動 Tomcat 可以使用下面的命令:


            清單 14. 重啟 Tomcat 容器
            												
            																		
            $CATALINA_HOME/bin/shutdown.sh
            …
            $CATALINA_HOME/bin/startup.sh
            
            												
            										

            重啟 Tomcat 容器之后,可以在瀏覽器的地址欄中鍵入 webMDS 的 URL(請參閱清單 12)來訪問 webMDS。這個 URL 中需要替換上您安裝使用的主機名和端口號。注意,這是 Tomcat 中運行 webMDS 的 URL,而不是在 Globus 容器中運行的 MDS 服務的 URL。

            這個樣例表單是由 Globus 發(fā)行版提供的,用來展示 webMDS 的功能。也可以使用模板來創(chuàng)建新的定制請求。

            通過 webMDS 來查詢 Index Service 可以顯示在 Index Service 中注冊的資源。每個服務都提供了一種資源類型、惟一標識符和一個鏈接(指向更詳細的信息)。選擇資源項可以產(chǎn)生有關(guān)資源的詳細信息。我們已經(jīng)介紹過 GRAM 和 RFT 服務都在 Index Service 中進行了注冊。圖 1 是一個顯示與 RFT 服務有關(guān)的詳細信息的例子。


            圖 1. RFT 服務的 webMDS 信息
            RFT 服務的 webMDS 信息

            如果 GRAM 配置用來與資源管理器一起使用,例如 LSF、PBS 或 Condor,那么每個資源都會存在這樣一個注冊項。

            圖 2 和圖 3 顯示了與 LSF 服務有關(guān)的詳細信息。


            圖 2. globus-mds-LSF 例子 1
            globus-mds-LSF

            圖 3. globus-mds-LSF 例子 2
            LSF 服務組

            圖 4 顯示了與 Condor 服務有關(guān)的詳細信息。


            圖 4. globus-mds-condor_cluster 例子
            Condor 服務組

            webMDS 是 MDS Index Service 的一個簡單易用的接口。我們在前面已經(jīng)展示了 mds-servicegroup-add 命令可以用來在 MDS 中注冊服務,聚集源可以配置為對來自服務和外部信息提供者的信息進行匯集。這些信息提供者運行了一個程序來搜集信息,它們都是 Execution Aggregators。這很容易展示,可以手工運行信息提供者,并驗證這些信息和格式與通過 webMDS 所提供的信息和格式完全相同。下面這個例子顯示了 Hawkeye 信息提供者的情況,這是由清單 8 中下面這一行定義的:

            												
            														<agg:ProbeName>globus-mds-cluster-hawkeye</agg:ProbeName>
            
            												
            										

            請參見 清單 15







            結(jié)束語

            我們首先概要介紹了 Globus MDS,然后了解了某些底層服務的詳細知識。Index Service 是一個注冊表,負責搜集信息并以資源屬性的形式來發(fā)布這些信息。Trigger Service 使客戶機可以訂閱資源屬性,并在數(shù)據(jù)達到某個極限值時執(zhí)行預定義的操作。這些服務都是構(gòu)建在 Aggregation Service 之上的,后者也可以對來自外部信息源的信息進行聚集。這些信息可以匯集到一個集成的注冊表中,稱為網(wǎng)格 Index Service。Index Service 以編程方式向客戶機提供了資源屬性信息,這可以通過 Web 服務、命令行接口或瀏覽器來接收。

            posted on 2006-04-17 04:00 wsdfsdf 閱讀(1104) 評論(0)  編輯 收藏 引用 所屬分類: 技術(shù)文章

            欧美亚洲色综久久精品国产| 久久久久久久亚洲Av无码| 久久久久久国产精品美女| 美女久久久久久| 精品久久久久久中文字幕人妻最新| 国产综合久久久久久鬼色| 久久国产午夜精品一区二区三区| 亚洲熟妇无码另类久久久| 国产福利电影一区二区三区久久久久成人精品综合 | 国产亚洲色婷婷久久99精品| 青青青青久久精品国产| 久久AV高潮AV无码AV| 久久丝袜精品中文字幕| 久久精品国产精品亚洲毛片| 无码人妻少妇久久中文字幕| 久久精品人人做人人爽97| 精品久久久无码人妻中文字幕| 精品久久久久久| 亚洲国产另类久久久精品黑人| 久久夜色撩人精品国产| 国产成人无码精品久久久免费| 久久亚洲欧美国产精品| 亚洲乱码精品久久久久..| 久久精品国产一区二区电影| 精品久久久久久久久中文字幕| 色偷偷偷久久伊人大杳蕉| 久久精品无码一区二区WWW| 国产精品久久久久a影院| 久久AAAA片一区二区| 一本一道久久精品综合| 久久精品国产精品青草app| 国产午夜精品久久久久免费视| 久久久亚洲欧洲日产国码二区| 无码国内精品久久人妻| 久久av无码专区亚洲av桃花岛| 久久无码人妻一区二区三区午夜| 国内精品久久久久久久久电影网| 中文成人久久久久影院免费观看| 亚洲?V乱码久久精品蜜桃| 国产精品中文久久久久久久| 一级做a爰片久久毛片看看 |