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

一波三折,APM監(jiān)控系統(tǒng)對于OSGI架構(gòu)的探索實踐

原創(chuàng)
開發(fā) 架構(gòu)
當我們的監(jiān)控系統(tǒng)遇到了OSGI架構(gòu)系統(tǒng)也是碰撞出了激烈的火花,足足用了兩天的時間,才搞定了各種水土不服。我把期間的各種酸甜苦辣記錄下來,希望為奮斗在APM一線的同行們提供一點點幫助。

2017年我們一直在做分布式服務(wù)跟蹤系統(tǒng)的升級改造,為了更好的服務(wù)于廣大的開發(fā)和運維人員,能夠在數(shù)以千萬計的微服務(wù)系統(tǒng)中快速的發(fā)現(xiàn)問題、定位問題。一年下來,接入了上千個系統(tǒng),快的幾分鐘,慢的不到10分鐘,最多就是處理一下jar包依賴沖突問題,所以能這么迅速的推廣。不過前幾天遇到一個客戶,他們的系統(tǒng)采用的是OSGI的框架。OSGI這個詞相信大部分人是聽過沒用過的。

當我們的監(jiān)控系統(tǒng)遇到了OSGI架構(gòu)系統(tǒng)也是碰撞出了激烈的火花,足足用了兩天的時間,才搞定了各種水土不服。我把期間的各種酸甜苦辣記錄下來,希望為奮斗在APM一線的同行們提供一點點幫助。

在整個過程中,我們遇到了四個技術(shù)關(guān)鍵點:

  • 把一個普通的jar包Bundle化。
  • OSGI的類加載機制。
  • 引入第三方非Bundle化的jar包。
  • 通過Activator在Bundle的啟動和停止實現(xiàn)回調(diào)。

項目背景

首先我簡單介紹下兩個項目的背景:

監(jiān)控系統(tǒng):這是一個利用動態(tài)字節(jié)碼技術(shù),自動的無侵入的對目標系統(tǒng)實行秒級實時監(jiān)控,監(jiān)控內(nèi)容包括但不限于容量、性能、成功率、調(diào)用鏈、應(yīng)用拓撲等,詳細內(nèi)容請參考:http://os.51cto.com/art/201709/552641.htm。

目標系統(tǒng):分為兩部分,第一部分以war包形式發(fā)布,部署到Web容器內(nèi),接收http請求;第二部分采用OSGI架構(gòu),每一個Bundle是一個業(yè)務(wù)服務(wù)(可以理解為Bundle就是微服務(wù))。這兩部分通過servlet的橋接方式連接,其中一些公用Bundle(如slf4j)會放在war包的指定目錄中,每個業(yè)務(wù)Bundle不需要再單獨引入。這個架構(gòu)是我在解決了所有問題之后才總結(jié)出來的,在這里提前拋出是為了方便理解后邊的內(nèi)容。

剛開始的時候,我們就把它當做一個普通的系統(tǒng)來接入,把我們的jar包放到了目標系統(tǒng)war包的WEB-INF/lib下,加入啟動腳本,再啟動系統(tǒng),可以看到我們的jar打印出的啟動日志,然后就沒有然后了,除了那一行日志,沒有任何效果。這個時候,我就意識到了OSGI系統(tǒng)不是這么玩的,于是開始OSGI的漫漫探索之路......

當看到OSGI的每一個Bundle包都是用單獨ClassLoader負責加載時,我仿佛找到了解決方案。

我們把監(jiān)控jar包打到了每一個業(yè)務(wù)的Bundle里邊,然后重啟,結(jié)果監(jiān)控成功了,問題解決了。

從純技術(shù)角度來看貌似是沒什么問題,然而噩夢才剛剛開始。由于監(jiān)控jar包打入了業(yè)務(wù)Bundle內(nèi),帶來了兩個比較棘手的問題:第一,技術(shù)上每個業(yè)務(wù)Bundle都需要這么去引入,加大了開發(fā)工作量,這個和我們極致的設(shè)計理念是不符的;第二,業(yè)務(wù)上每一個業(yè)務(wù)Bundle就成為了一個單獨應(yīng)用,客戶方表示我們這個是一個應(yīng)用,而不是多個應(yīng)用。

所以還是要解決之前的問題,把整個目標系統(tǒng)所有的Bundle當做一個應(yīng)用去接入監(jiān)控。

我不熟悉目標系統(tǒng)和OSGI架構(gòu),客戶開發(fā)方又不了解監(jiān)控系統(tǒng)的原理和實現(xiàn)過程,經(jīng)過了長時間的各種嘗試和交流,仍沒有絲毫進展。于是我們決定采用一個最原始,最簡單,最笨,也是最有效的方法,從“hello world”開始。

當一個系統(tǒng)出現(xiàn)問題,你又不知道問題出在哪部分的時候,要么把這些“部分”一個一個去掉,直到發(fā)現(xiàn)沒有“問題”為止;要么從“零”開始,然后一個一個的加入,直到出現(xiàn)“問題”為止,我們采取了后者。

首先,針對我們的監(jiān)控jar包去掉基于動態(tài)字節(jié)碼的自動監(jiān)控,采用編程式的直接API調(diào)用,并且將API接口做了Mock,去掉了所有的第三方依賴。修改目標系統(tǒng)的代碼,在希望被監(jiān)控的方法中直接調(diào)用監(jiān)控API。打包,部署,啟動,被監(jiān)控Bundle不能啟動,報錯......

  1. Missing Constraint: Import-Package: com..................sgm...... 

經(jīng)過和對方開發(fā)人員的溝通和網(wǎng)上查閱OSGI相關(guān)資料,了解到這是一個OSGI打包的規(guī)范問題。

之前我們的監(jiān)控jar包是沒有按照OSGI的規(guī)范去打包的,打的只是一個普通的jar包,所以在OSGI框架下,其他的Bundle是無法訪問到我們的jar包中的類,造成啟動報錯的問題。這里遇到了我們第一個要解決的主要問題:

1. 普通jar包Bundle化

先看下邊的兩張圖:

 

上邊的兩張圖是jar包中META-INF/MANIFEST.MF文件,第一張圖是普通jar包,第二圖是具有OSGI規(guī)范的jar包。既然知道了,那這樣的OSGI的包怎么打?我們用maven來編譯,順理成章的就找到了maven-Bundle-plugin的這個插件,使用很簡單,代碼如下:

  1. <plugin> 
  2. <groupId>org.apache.felix</groupId> 
  3. <artifactId>maven-Bundle-plugin</artifactId> 
  4. <version>3.3.0</version> 
  5. <extensions>true</extensions> 
  6. <executions> 
  7. <execution> 
  8. <id>Bundle-manifest</id> 
  9. <phase>process-classes</phase> 
  10. <goals> 
  11. <goal>manifest</goal> 
  12. </goals> 
  13. </execution> 
  14. </executions> 
  15. <configuration> 
  16. <instructions> 
  17. <Import-Package>org.slf4j</Import-Package> 
  18. <Export-Package>com.wangyin.sgm.client</Export-Package> 
  19. <Bundle-RequiredExecutionEnvironment>JavaSE-1.6</Bundle-RequiredExecutionEnvironment> 
  20. </instructions> 
  21. </configuration> 
  22. </plugin>

在這么多屬性中, Import-Package和Export-Package尤其重要,一個jar包就是一個Bundle,Bundle和Bundle之間的訪問全靠這兩個屬性來控制。

Import-Package:說明了這個Bundle jar需要調(diào)用外部其他Bundle的哪些包(package)。

Export-Package: 說明了這個Bundle jar可以提供哪些包(package)供其他Bundle去調(diào)用。

當一個Bundle啟動的時候,會分為Resolved(解析),Installed(安裝),Started(激活)等幾個步驟,解析就是檢查jar是不是正常,安裝的時候會把Export-Package中的指定的包進行注冊,這就知道哪些包由哪些Bundle來提供,激活的時候會檢查當前這個Bundle的Import-Package依賴的包是不是都有對應(yīng)的Bundle來提供,否則激活失敗。

修改監(jiān)控客戶端,把父項目,子項目,子子項目全部按照OSGI規(guī)范打包,又是一遍部署重啟,這次被監(jiān)控的業(yè)務(wù)Bundle沒有報錯,而是監(jiān)控客戶端啟動報錯:

  1. Missing Constraint: Import-Package: org.slf4j 

有了剛才的經(jīng)驗,一看就知道是沒有slf4j,可是對方開發(fā)人員反饋slf4j是有的,他們自己也在用,這就奇怪了。

這時我發(fā)現(xiàn)還有在監(jiān)控客戶端里MANIFEST.MF的一句話org.slf4j;version="[1.7,2)",version這個詞引起了我的注意。

原來在目標系統(tǒng)里的slf4j是1.5版本,而監(jiān)控客戶端要求1.7版本,slf4j降級再試,這次目標系統(tǒng)成功調(diào)用到了監(jiān)控客戶端的API,打印出了日志,萬里長征終于邁出了第一步。但這只是一個Mock的版本,真正的監(jiān)控程序還沒有加入。

先小結(jié)一下:首先在OSGI的框架下,所有jar必須按照OSGI的規(guī)范去打包,否則不能使用;其次要對Import-Package和Export-Package配置好,需要依賴外部哪些包,自己又可以提供哪些包供外部使用,同時注意版本,依賴時一般都是要高于哪個版本。

接下來,就要加入真正的代碼跑一跑,根據(jù)前面的經(jīng)驗還是要慢慢來,我們分兩步加入代碼,第一次先加入監(jiān)控代碼,待成功后加入網(wǎng)絡(luò)傳輸部分的代碼,后邊遇到的坑讓我們發(fā)現(xiàn)這個決定是正確的。

打包部署啟動調(diào)用這個流程已經(jīng)很熟練了,報錯還是如期出現(xiàn)了,這次報錯的是com.lmax的disruptor這個第三方開源jar包:

  1. Missing Constraint: Import-Package: sun.misc 

納尼?sun.misc沒有?這不是jdk里的嗎,為什么會沒有呢?于是,又是一番資料查找,終于明白了其中的道理。

這里就要講到OSGI的類加載機制了,它并不是我們常說的雙親委托機制。關(guān)于這個問題,網(wǎng)上已經(jīng)有很多文章介紹了,但這里我還是結(jié)合這個例子簡單的說一下。

2. OSGI的類加載機制

首先每一個Bundle(jar)都會被一個單獨的ClassLoader去加載,當一個Bundle的ClassLoader嘗試去加載一個類的時候:

  1. 如果這個類的包名是java.*開頭的,那么直接交給bootstrap ClassLoader去加載。
  2. 查看這個類是否在OSGI的配置文件中有org.osgi.framework.bootdelegation屬性定義,如果定義了,交給bootstrap ClassLoader去加載這個類。
  3. 查看這個類是否在OSGI的配置文件中有org.osgi.framework.system.packages屬性定義,如果定義了,交給父類加載器去加載,一般就是AppClassLoader。
  4. 查看這個類是否在本Bundle的MANIFEST.MF文件的Import-Package中定義,如果定義了,交給Export-Package這個類的Bundle去加載。
  5. 在上邊條件都不滿足的時候,那這個類就是自己的Bundle的內(nèi)部類,由自己的ClassLoader去加載。

現(xiàn)在我們來看一下,下邊這張圖是disruptor的MANIFEST.MF文件:

在disruptor里使用了sun.misc.Unsafe類,在啟動disruptor的時候,需要加載sun.misc.Safe,那么1,2,3點都不滿足,命中了第4點,就開始尋找?guī)в蠩xport-Package的Bundle,那肯定找不到。

遵循上邊的原則,在配置文件中加入了org.osgi.framework.bootdelegation=javax.*,sun.*,同時又把disruptor中的Import-Package刪掉了,問題成功解決了,又向勝利邁進了一步。

接下來,就要把網(wǎng)絡(luò)傳輸這部分加入進來了,系統(tǒng)就可以監(jiān)控了,數(shù)據(jù)需要發(fā)送出來才可以真正的使用。有了之前的經(jīng)驗,感覺應(yīng)該問題不大,然而現(xiàn)實情況并不是這樣……

當把這部分代碼和依賴加入后,各種的Missing Constraint: Import-Package: xxx。我發(fā)現(xiàn)所有的依賴的第三方j(luò)ar都在里邊,為什么還會報錯,我開始懷疑是這些第三方j(luò)ar本身的問題。

打開這些jar文件的MANIFEST.MF文件查看,果然如此,我們依賴的這些jar有多一半都不是Bundle化的jar包,這里就涉及到了本文第三個要解決的核心問題。

3. OSGI如何加載第三方非Bundle化的jar包

OSGI如何加載第三方非Bundle化的jar包,有如下幾種方式:

  • 通過父類加載器加載,也就是配置org.osgi.framework.system.packages。
  • 將jar轉(zhuǎn)換成Bundle,然后Export-Package。
  • 把jar打包進引用方的Bundle。

第一種方式需要目標系統(tǒng)配置,同樣不符合我們的設(shè)計理念,顯然不合適,于是我們首先嘗試了第二種方式,重新打包那些非Bundle的第三方j(luò)ar。

在這個過程中,我們發(fā)現(xiàn)這絕對是個苦逼的活,需要找到源碼,下載源碼,修改pom,有的找源碼很費勁,有的還是ant編譯的,有的雖然是maven管理,但又依賴了父項目……

總之想順利的重新打包是個很費勁的事??磥碇皇O碌谌龡l路了,這又要退回到之前第一個問題,如何打一個Bundle jar。

之前我們是把maven工程的每一個子項目分別Bundle化,如果要把第三方j(luò)ar打入Bundle,那就有可能一個第三方j(luò)ar被多次打入不同的子項目Bundle,造成浪費。

所以決定放棄對原有項目的每個子項目單獨Bundle化的方案,而是新建一個子項目,由這個子項目引入所有的其他子項目和第三方依賴jar,把他們所有打成一個大的Bundle jar。

  1. <Import-Package>org.osgi.framework,org.slf4j</Import-Package> 
  2. <Export-Package>com.wangyin.sgm.client</Export-Package> 
  3. <Private-Package>com.wangyin.*,com.lmax.disruptor.*,…… 
  4. </Private-Package>

看一下上邊的配置,比之前多了一個Private-Package,就是說哪些Package是這個Bundle的內(nèi)部包,也就是要打入最后Bundle jar的東西。

現(xiàn)在通過編程式API直接調(diào)用的方式已經(jīng)可以監(jiān)控到目標系統(tǒng)了,最后要做的就是引入運行時字節(jié)碼增強技術(shù)。

還是按照常規(guī)的方式,把我們的Agent通過javaagent方式啟動,有了之前的經(jīng)驗,我知道這個是被bootstrap ClassLoader加載的,于是就直接在org.osgi.framework.bootdelegation中加入了監(jiān)控Agent的包名。

結(jié)果啟動正常,但是無法自動監(jiān)控,看了日志后發(fā)現(xiàn)是監(jiān)控客戶端沒有啟動。監(jiān)控客戶端的啟動是通過在每個類加載的時候,嘗試性的使用它的類加載去加載監(jiān)控客戶端的啟動類。

如果可以加載上,那么就啟動成功了,因為啟動程序是放在了啟動類的static塊中,且啟動類是一個單例模式,記錄著被監(jiān)控應(yīng)用的信息。

從這個啟動日志來分析,被監(jiān)控系統(tǒng)有200多個Bundle,每個Bundle啟動都去加載監(jiān)控客戶端,然后我們希望監(jiān)控客戶端被它自己的類加載器去加載。這里就是本文第四個核心問題。

4. 如何在Bundle啟動的時候去做一些初始化操作

在OSGI的規(guī)范里提供了一個叫BundleActivator的接口,里邊有start和stop兩個方法,顧名思義,在Bundle啟動和停止的時候會回調(diào)這兩個方法,這就好辦了,我們可以在start方法中實現(xiàn)啟動監(jiān)控客戶端的代碼。

  1. <instructions> 
  2. <Bundle-Activator>com.wangyin.sgm.client.Activator</Bundle-Activator> 
  3. <Import-Package>org.osgi.framework,org.slf4j</Import-Package> 
  4. <Export-Package>com.wangyin.sgm.client</Export-Package> 
  5. <Private-Package>com.wangyin.*,com.lmax.disruptor.*,org.apache.flume.* 
  6.         ,org.apache.avro.*,com.thoughtworks.*, 
  7.         ,org.apache.commons.compress.*,org.apache.commons.lang.* 
  8.         ,org.codehaus.jackson.*,org.jboss.netty.*,org.apache.velocity.* 
  9.         ,org.xerial.snappy,org.tukaani.xz.* 
  10. </Private-Package> 
  11. <Bundle-RequiredExecutionEnvironment>JavaSE-1.6</Bundle-RequiredExecutionEnvironment> 
  12. </instructions>

上邊的Bundle-Activator這個標簽,指定這個Bundle的Activator是哪個類。

至此所有的問題都得到了解決,這次OSGI應(yīng)用接入APM監(jiān)控足足花掉了兩天的時間。

由于負責監(jiān)控系統(tǒng)的人員并沒有使用過OSGI,被監(jiān)控目標系統(tǒng)的開發(fā)人員也不知道監(jiān)控的原理是什么,一開始我們都以兩個產(chǎn)品整體去接入,做了許多的無用功,耽誤了很多時間。

從這個案例可以看出,當你所做的東西需要應(yīng)用到一個你不熟悉的技術(shù)領(lǐng)域的時候,又不可能有足夠的時間去學(xué)習(xí)這個領(lǐng)域的知識,有一個最好的辦法就是改造你所做的系統(tǒng),從零開始,逐漸加碼,去適應(yīng)那個不熟悉的領(lǐng)域。

千萬不要想著能整體一下解決所有問題,因為可能要解決所有問題有100個技術(shù)點需要去修改,這100個問題同時暴露,你只有把它們同時都修改了,才能看到你的成果,這是根本不可能的事情。

而這100個問題一個個暴露出來,把一個不可能完成的大任務(wù)拆分成若干個可完成的小任務(wù),修改一個,看到一步成功的效果,問題就得到了解決。

作者簡介:

[[215901]]

張晨, 資深研發(fā)工程師,目前任職京東金融,曾任職于搜狐等互聯(lián)網(wǎng)公司,擅長Java底層技術(shù)的研發(fā)及疑難問題的定位。從2015年開始從事智能運維監(jiān)控平臺的研發(fā)與實踐,參與并主導(dǎo)了APM等產(chǎn)品的研發(fā)與應(yīng)用,經(jīng)歷了多次618和雙11的千萬級TPS的運維保障,支撐了京東金融的大量業(yè)務(wù)應(yīng)用。

[[215902]]

沈建林,曾在多家知名第三方支付公司任職系統(tǒng)架構(gòu)師,致力于基礎(chǔ)中間件與支付核心平臺的研發(fā),主導(dǎo)過 RPC 服務(wù)框架、數(shù)據(jù)庫分庫分表、統(tǒng)一日志平臺,分布式服務(wù)跟蹤、流程編排等一系列中間件的設(shè)計與研發(fā),參與過多家支付公司支付核心系統(tǒng)的建設(shè)。現(xiàn)任京東金融集團資深架構(gòu)師,負責基礎(chǔ)開發(fā)部基礎(chǔ)中間件的設(shè)計和研發(fā)工作。擅長基礎(chǔ)中間件設(shè)計與開發(fā),關(guān)注大型分布式系統(tǒng)、JVM 原理及調(diào)優(yōu)、服務(wù)治理與監(jiān)控等領(lǐng)域。

責任編輯:王雪燕 來源: 51CTO
相關(guān)推薦

2009-07-29 09:07:51

Linux驅(qū)動開源操作系統(tǒng)微軟

2020-02-12 16:50:32

MySQL備份數(shù)據(jù)庫

2020-08-06 17:16:47

抖音Tiktok美國

2010-07-05 09:41:30

美國云計算

2018-05-26 23:03:07

中興芯片特朗普

2021-10-29 05:39:46

歐盟英偉達收購

2020-07-14 13:17:23

GitHub宕機服務(wù)中斷

2021-01-01 09:03:44

故障HAProxy服務(wù)器

2021-11-04 18:27:02

緩存架構(gòu)Eureka

2014-09-02 10:19:22

IT程序員

2014-09-29 14:35:57

WIFI物聯(lián)網(wǎng)RFID

2021-09-01 13:46:07

GitHub Copi漏洞代碼訓(xùn)練

2021-12-26 00:13:24

Log4jLogback漏洞

2010-10-21 14:38:07

網(wǎng)絡(luò)融合

2014-08-19 09:34:01

2015-11-17 12:56:33

浪潮SC15

2010-01-21 17:05:21

互聯(lián)網(wǎng)

2018-05-26 15:50:15

2010-06-03 15:30:01

Windows2008

2023-07-14 13:32:05

點贊
收藏

51CTO技術(shù)棧公眾號

奇米精品一区二区三区在线观看| 卡通动漫精品一区二区三区| 中文字幕一区二区三区不卡| 91精品久久久久久久久久| 日本中文字幕免费在线观看| 国产66精品| 91福利在线播放| 国产911在线观看| 欧美3p视频在线观看| 久久精品国产精品亚洲精品| 国内精品一区二区三区| 阿v天堂2014| 超碰97久久| 欧美日韩国产综合草草| 日韩亚洲欧美视频| 99中文字幕一区| 国产成人免费在线观看不卡| 国产精品白嫩美女在线观看| 精品亚洲永久免费| 色爱综合网欧美| 日韩av在线网站| 黄色三级视频在线播放| 精品3atv在线视频| 亚洲成在线观看| 手机成人av在线| 可以直接在线观看的av| 成人美女在线视频| 91九色国产在线| 中文字幕网址在线| 国产欧美一区二区三区国产幕精品| 日韩中文理论片| 波多野结衣av在线观看| 群体交乱之放荡娇妻一区二区| 欧美一区二区三区性视频| 天天操天天爱天天爽| 在线观看的黄色| 亚洲18女电影在线观看| 一区二区三区四区免费观看| 亚洲麻豆精品| 国产欧美1区2区3区| 精品日本一区二区三区在线观看| 性做久久久久久久久久| 国产最新精品精品你懂的| 国产精品xxx视频| 国产女主播喷水视频在线观看 | 日韩视频一二区| 在线不卡中文字幕播放| 超碰人人草人人| 一区二区成人免费视频| 国产精品久久久国产盗摄| 日韩福利电影在线| 青青在线视频一区二区三区| 日韩av男人天堂| 在线播放一区| 97精品国产97久久久久久免费| 久久久久久蜜桃| 欧美日韩国产色综合一二三四| www.色综合| 色欲人妻综合网| 自拍视频亚洲| 欧美激情二区三区| 日本最新中文字幕| 99在线精品视频在线观看| 国产69精品久久久久9| www..com国产| 性8sex亚洲区入口| 国产激情久久久| 最近中文在线观看| 紧缚捆绑精品一区二区| 亚洲xxxx视频| 天堂网在线中文| 久久精品亚洲麻豆av一区二区| 色一情一乱一伦一区二区三欧美| 午夜激情视频在线| 亚洲精品视频免费看| 国产黄色激情视频| gay欧美网站| 欧美性猛交xxxx乱大交退制版| www.久久91| 一区二区三区视频免费视频观看网站 | 澳门av一区二区三区| 在线免费观看成人短视频| 午夜视频在线网站| www.豆豆成人网.com| 国产手机视频精品| 一本一本久久a久久| 欧美午夜影院| 欧美在线视频一区二区| 亚洲一级片免费看| 成人黄色综合网站| 欧美一区二区三区电影在线观看| 91九色综合久久| 伊人国产在线观看| 久久成人精品| 91在线观看免费高清| 天堂在线资源网| 国产欧美精品在线观看| 成人一区二区av| 成人美女黄网站| 91精品国产综合久久久蜜臀图片| 四虎精品一区二区| re久久精品视频| 欧美激情一区二区久久久| 激情五月婷婷网| 国产成人a级片| 亚洲7777| 日韩精品极品| 日韩一级高清毛片| 国产123在线| 亚洲第一网站| 成人一区二区电影| 欧洲亚洲精品视频| 亚洲在线视频一区| 日韩精品你懂的| 日韩精选在线| 久久99亚洲精品| 伊人影院中文字幕| 久久婷婷国产综合精品青草 | 污污内射在线观看一区二区少妇| 久久裸体网站| 国产成人精品日本亚洲专区61| www.成人免费视频| 中文字幕在线观看一区| 亚洲国产精品久久久久爰色欲| 日韩成人在线看| 日韩中文字幕亚洲| 波多野结衣一区二区三区在线| 成人黄色777网| 国产精品无码电影在线观看| 91精品在线免费视频| 亚洲视频专区在线| 超碰中文字幕在线| 成人美女视频在线看| 国产午夜精品视频一区二区三区| www.久久久.com| 亚洲天堂男人天堂女人天堂| 久久久久久少妇| 羞羞视频在线观看一区二区| 亚洲免费在线| 亚洲精品免费网站| 男人的天堂在线视频免费观看| 欧美亚洲一区三区| 久久亚洲AV无码专区成人国产| 国产一区二区三区的电影| 国产高清自拍一区| 激情网站在线| 精品免费视频一区二区| 久久久久久免费观看| 国产一区999| 永久免费看av| 成人资源在线播放| 久久久久久久久久久免费| www.好吊色| 亚洲一区二区欧美激情| 国产视频精品视频| 亚洲大片在线| 欧美日韩三区四区| 国产精品久久久久久吹潮| 这里只有精品视频在线| 亚洲在线免费观看视频| 亚洲欧洲在线观看av| 日本不卡一区二区在线观看| 91精品国产91久久久久久黑人| 川上优av一区二区线观看 | 日韩中文视频免费在线观看| 91激情在线观看| 亚洲欧美精品午睡沙发| 免费观看黄网站| 亚洲小说区图片区| 久久精品国产综合精品| 九九热线视频只有这里最精品| 最近2019年手机中文字幕| 国产又粗又黄又爽| 玉米视频成人免费看| 91精品啪在线观看国产| 鲁大师影院一区二区三区| 亚洲福利av| 日韩精品视频一区二区三区| 2019中文字幕在线观看| 国产成人天天5g影院在线观看| 欧美日韩国产在线播放网站| 久热这里有精品| 99re热视频精品| 午夜宅男在线视频| 国产精品v一区二区三区| 国产精品一区视频网站| 国产一区二区三区朝在线观看| 亚洲精品你懂的| 欧美激情区在线播放| 天堂a中文在线| 欧美猛男超大videosgay| 久久亚洲国产成人精品性色| 久久你懂得1024| 色婷婷激情视频| 亚洲视频二区| 手机在线视频你懂的| 日韩激情网站| 亚洲a成v人在线观看| 周于希免费高清在线观看| 久久久999精品免费| 亚洲av成人无码网天堂| 日韩一区二区电影在线| 色av性av丰满av| 亚洲综合精品久久| 国产传媒视频在线| 99re亚洲国产精品| 久久发布国产伦子伦精品| 爽爽淫人综合网网站| www.avtt| 一区二区免费不卡在线| 欧美一区二区视频在线| 999精品视频在这里| 国产日韩精品一区二区| 国产在线观看www| 欧美成人激情视频免费观看| 国产h视频在线观看| 亚洲精品国偷自产在线99热| 国产成人精品毛片| 精品视频资源站| 日日摸天天添天天添破| 亚洲h精品动漫在线观看| 国产精品视频一区二区三| 国产欧美一二三区| 亚洲乱码国产乱码精品精大量| 国产久卡久卡久卡久卡视频精品| 性欧美videossex精品| 国产精品日韩精品欧美精品| 日韩精品在线视频免费观看| 婷婷亚洲五月| 中文字幕中文字幕在线中一区高清| 亚洲最好看的视频| 精品在线视频一区二区三区| 91精品尤物| 99久久久久国产精品免费| 99精品视频在线免费播放| 国产精品视频一区二区三区四| 成人性生交大片免费观看网站| 亚州欧美日韩中文视频| 中文字幕中文字幕在线十八区 | 久久色精品视频| 美女又爽又黄免费| 成人小视频免费在线观看| 伊人五月天婷婷| 国产一区欧美日韩| www.久久com| 国产一区高清在线| 久久综合桃花网| 国产成人亚洲综合a∨婷婷| 三日本三级少妇三级99| 寂寞少妇一区二区三区| www.午夜av| 国产成人免费在线视频| 亚洲香蕉中文网| 99精品偷自拍| 成都免费高清电影| 欧美国产欧美综合| 污污视频网站在线免费观看| 亚洲欧洲精品天堂一级| 欧洲第一无人区观看| 有坂深雪av一区二区精品| 欧美成人综合色| 香蕉av福利精品导航| 精品欧美一区二区三区免费观看 | 中文字幕一区二区三区四区免费看 | 91麻豆精品视频| 中文字幕免费高清| 国产精品久久久久久久蜜臀| 午夜69成人做爰视频| 亚洲成a人v欧美综合天堂| 天天操中文字幕| 欧美性受xxxx| 99久久精品日本一区二区免费| 精品国产91洋老外米糕| 偷拍25位美女撒尿视频在线观看| 亚洲人高潮女人毛茸茸| 幼a在线观看| 色综合久久精品亚洲国产| 亚洲十八**毛片| 国产精品视频区| 国产福利资源一区| 日本在线观看一区二区| 伊人成综合网| 久久网站免费视频| 极品少妇xxxx精品少妇偷拍| 岛国av免费观看| 欧美国产精品久久| 精品99在线观看| 色天使久久综合网天天| jizz中国少妇| 亚洲人成五月天| 美足av综合网| 国产精品老女人精品视频| 亚洲无线观看| 一区二区三区电影| 国产精品综合| 老女人性生活视频| 国产精品午夜一区二区三区| 亚洲黄色在线观看| 国产视频精品久久| 欧美日本国产在线| 日韩av超清在线观看| 国产精品一码二码三码在线| 第一会所亚洲原创| 国产免费观看高清视频| 国内久久精品视频| b站大片免费直播| 亚洲国产日韩一区二区| 亚洲手机在线观看| 日韩大片免费观看视频播放 | 欧美日韩第一页| 全球最大av网站久久| 国产一区免费视频| 综合久久一区| 污污的视频免费| 久久精品网站免费观看| 久久一二三四区| 日韩一二三四区| 日本在线看片免费人成视1000| 欧美在线视频在线播放完整版免费观看| 成人日韩视频| 亚洲午夜精品久久久中文影院av| 亚洲欧美视频一区二区三区| 图片区偷拍区小说区| 中文字幕视频一区| 自拍偷拍精品视频| 亚洲香蕉成视频在线观看| 人成在线免费网站| av激情久久| 午夜亚洲福利| 国产精品嫩草影视| 国产精品不卡在线| 伊人久久亚洲综合| 一本色道久久88综合亚洲精品ⅰ | 欧美丰满少妇xxxbbb| yw在线观看| 国产精品96久久久久久| 自拍偷拍一区| 国产三区在线视频| 91偷拍与自偷拍精品| www成人在线| 日韩成人在线观看| 成人亚洲欧美| 欧美亚洲丝袜| 秋霞av亚洲一区二区三| 国产1区2区在线观看| 欧美日韩精品国产| 青青草视频在线观看| 青草热久免费精品视频| 亚洲永久精品唐人导航网址| 91看片就是不一样| 国产亚洲一区二区三区在线观看 | caoporn视频在线观看| 国产伦精品一区二区三区照片 | 精品视频97| 欧美成人三级在线播放| 欧美第一在线视频| 中文字幕日韩欧美在线视频| 在线免费看h| 日韩欧美一区二区三区四区| 日本不卡一区二区三区| 99自拍偷拍视频| 日韩欧美一区中文| 91豆花视频在线播放| 久久一区二区精品| 日本视频一区二区三区| 国产第一页浮力| 亚洲成人精品视频在线观看| 国产美女高潮在线| 天天综合狠狠精品| 国产做a爰片久久毛片| 国产在线视频在线观看| 亚洲欧美中文在线视频| 天堂综合在线播放| 日本久久久网站| 26uuu色噜噜精品一区二区| 午夜一级黄色片| 成年无码av片在线| 日韩精品导航| 亚洲精品综合在线观看| 亚洲一区二区高清| 免费av在线电影| 亚洲a在线观看| 国产精品毛片在线| 日本黄区免费视频观看| 精品久久久久久亚洲综合网 | av黄色一级片| 在线中文字幕一区| 最新黄网在线观看| 欧美一区二区高清在线观看| 国产精品中文欧美| 国产91国语对白在线| 蜜臀久久99精品久久久久久宅男| 欧美变态挠脚心| 911av视频| 欧美午夜精品久久久久久浪潮| 黄色网址视频在线观看| 久久五月天婷婷| 国产精品一二三四五| 日本黄色中文字幕| 欧美激情中文字幕乱码免费|