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

Java Web服務性能優化實踐

開發 后端
本文介紹如何提升 Java Web 服務性能,主要介紹了三種方法:一是采用 Web 服務的異步調用,二是引入 Web 服務批處理模式,三是壓縮 SOAP 消息。重點介紹在編程過程中如何使用異步 Web 服務以及異步調用和同步調用的差異點。本文還示范了如何在項目中使用以上三種方法,以及各種方法所適合的應用場景。

簡介: 本文介紹如何提升 Java Web 服務性能,主要介紹了三種方法:一是采用 Web 服務的異步調用,二是引入 Web 服務批處理模式,三是壓縮 SOAP 消息。重點介紹在編程過程中如何使用異步 Web 服務以及異步調用和同步調用的差異點。本文還示范了如何在項目中使用以上三種方法,以及各種方法所適合的應用場景。

Java Web 服務簡介

Web 服務是一種面向服務架構的技術,通過標準的 Web 協議提供服務,目的是保證不同平臺的應用服務可以互操作。Web 服務(Web Service)是基于 XML 和 HTTP 通訊的一種服務,其通信協議主要基于 SOAP,服務的描述通過 WSDL、UDDI 來發現和獲得服務的元數據。 這種建立在 XML 標準和 Internet 協議基礎上的 Web 服務是分布式計算的下一步發展方向,Web 服務為那些由不同資源構建的商業應用程序之間的通信和協作帶來了光明的前景,從而使它們可以彼此協作,而不受各自底層實現方案的影響。

JAX-RPC 1.0 是 Java 方面的 Web 服務的原始標準 , 但是由于 JAX-RPC 1.0 對 Web 服務功能的認識有一定的局限,于是 JAX-WS 2.0 應用而生。JAX-WS 2.0 開發工作的主要目標是對各項標準進行更新,成功實現了業界對 JAX-RPC 1.X 的各種期望。此外,JAX-WS 2.0 直接支持 XOP/MTOM,提高了系統附件傳送能力以及系統之間的互操作性。

實例剖析Web服務性能瓶頸

通過以上簡述不難體會到,Web 服務以其 XML + HTTP 的松耦合、平臺無關的特性,集萬般寵愛于一身,必將成為未來數據共享的基礎。但與此同時我們也應當認識到世間完事萬物均有其矛盾的兩面性:有優點,必將存在缺點,Web 服務亦是如此。就像當初 JAVA 大行其道的時候性能成為其致命詬病一樣,Web 服務也同樣面臨性能問題,似乎“性能問題”天生就是“平臺無關”揮之不去的冤家。但問題終歸要解決,實踐是檢驗和分析問題的唯一途徑,讓我們先來創建一個簡單的 Web 服務再來審視和分析隱含其中的性能問題。

創建服務

創建服務 Java Bean: 首先我們創建一個盡可能簡單的書店服務 Bean,服務的內容只有一個 qryBooksByAuthor,即根據作者 (Author) 查詢其名下的書籍 (List<Book>)。

圖 1. 書店服務 Bean(BookStoreSrvBean)

Java Web 服務性能優化實踐

服務 Input- 作者 (Author) 的實體類 :

圖 2. 作者實體類 (Author)

Java Web 服務性能優化實踐

服務出參 Output- 書籍 (Book) 列表的實體類:

圖 3. 書籍實體類 (Book)

Java Web 服務性能優化實踐

至此我們的服務代碼已經完成,我們不在此討論此服務的業務合理性,創建此服務的目的只是舉一個盡可能簡單的實例以分析 web 服務的性能。

下面的任務就是開發 Web 服務了,手工編寫及發布符合規范的 Web 服務過程極為繁瑣,在此使用 IBM 的 Rational Software Architect(后面簡稱 RSA)來進行 Web 服務的服務器端以及客戶端的開發。

發布 Web 服務

創建動態 Web 項目 : 發布 Web 服務的前提當然需要一個 J2EE 的 Web 項目,打開 RSA->File->New->Dynamic Web Project, 項目名稱為 testWebService, 其余選項根據需要進行選擇 ( 注意需要選擇加入 Web 項目到 EAR)。創建好的 Web 項目和 EAR 項目效果如下 :

圖 4. Web 項目以及應用項目的結構

Java Web 服務性能優化實踐

創建 Web 服務: 選中導入的 com.ibm.test.ws.srv.BookStoreSrvBean,右鍵 New->Other->Web Service 來創建并發布 Web 服務。創建的時候選擇常用的 JAX-WS 標準 , 并選擇生成 WSDL 文件。由于 Web 服務的創建不是本文重點,此部分內容暫且省略。服務創建完成之后就可以發布到上一步建好的 Web 項目中了。

創建客戶端

使用 RSA,客戶端的創建工作將會非常簡單:右鍵點擊上面生成的 WSDL 文件 ->Web Services->Generate Client

圖 5. 創建客戶端界面

Java Web 服務性能優化實踐

在此界面,根據實際情況選擇 server,JAX-WS 標準以及 Client 代碼的目標項目,然后點擊下一步。

圖 6. 輸入客戶端信息

Java Web 服務性能優化實踐

此界面暫時使用默認配置,某些特殊選項將在后面章節進行描述。

客戶端調用

由于 JAX-WS 規范大部分的 stub 調用代碼是實時生成的,我們只需要修改客戶端 WSDL 的 port 就可以用以下代碼進行 Web 服務的調用。這里修改 WSDL 端口的目的是讓客戶端調用 RSA 提供的 TCP/IP Monitor 的虛擬端口,這樣我們就可以很輕易地看到 Web 服務實際的調用以及返回的 SOAP 消息了。

客戶端調用代碼如下 :

圖 7. 客戶端調用代碼

Java Web 服務性能優化實踐

使用 TCP/IP Monitor 看到的 SOAP 消息如下 :

圖 8. Web 服務調用產生的 SOAP 消息

Java Web 服務性能優化實踐

#p#

Java Web 服務性能分析

從以上實例我們可以看到,Web 服務的調用與傳統的 RPC 還是有較大差異的。最大的特點是調用雙方使用 XML 格式的 SOAP 規范消息進行傳輸,這樣以文本進行傳輸的好處是拋棄了私有協議,無論調用雙方是何種平臺,只要能夠構造以及解析 XML 文本,并且存在雙方都支持的傳輸協議,那么調用就成為了可能。而 XML 的日益規范以及 HTTP 協議的普及更是給這兩個必要條件提供了堅強的后盾,Web 服務成為未來通用的服務提供標準已是不爭的事實。

但是相信使用過 Web 服務的人都曾經經受過其性能不佳的窘境,原因為何我們結合剛才的實例可以分析出以下幾點:

● SOAP 文本消息轉化導致效率低下

從剛才的 TCP/IP Monitor 監測到的 request 以及 response 的消息我們可以看到,在發送消息時,我們傳入了 Author 對象,在實際的調用發生時,這個 Author 對象會被轉化成 XML 格式的 SOAP 消息,此消息在到達 Server 端會被解析并重新構造成 Server 端的 Author 對象。Response 也是同理,Books List 也會經歷 XML 序列化和反序列化的過程。最糟糕的是,這種過程會在每一次調用的時候都會發生,這種構造以及解析的過程都會極大地消耗 CPU,造成資源的消耗。

●SOAP 文本消息傳輸導致傳輸內容膨脹

以 request 參數 Author 為例,必要的信息僅僅是”Bruce Eckel”這幾個字節,但轉化成 XML 消息后,可以從 SOAP 消息看到,多了很多 SOAP 規范的標簽,這些信息會導致需要傳輸的內容急劇增大,幾個字節很可能會變成幾千字節。當調用頻度和參數內容增多的時候,這種傳輸內容的膨脹將不是一個可以忽略的影響,它不但會吃掉網絡的帶寬,還會給 Server 的數據吞吐能力造成負擔,后果可想而知。

●同步阻塞調用在某些情況下導致性能低下

同步阻塞調用是指客戶端在調用 Web 服務發送 request 后一直處于阻塞狀態,客戶端線程就會掛起,一直處于等待狀態,不能進行其他任務的處理。這樣就會造成線程的浪費,如果相應線程占用了一些資源,也不能夠及時釋放。

這個問題在純客戶端訪問 Server 端的情況下并不明顯,但如果是兩個 Server 端之間進行 Web 服務調用的話,阻塞模式就會成為調用 Server 端的性能瓶頸。

Web 服務性能優化實踐

使用異步方式調用 web 服務

先需要強調一點的是,這里的異步方式指的是客戶端的異步,無論客戶端是同步還是異步,都對服務端沒有任何影響。我們期望的理想結果是:當客戶端發送了調用請求后不必阻塞等待 server 端的返回結果。最新的 JAX-WS 標準中增加了這一異步調用的特性,更好的消息是,RSA 工具中也對 JAX-WS 的這一特性進行了支持,這樣就極大地方便了我們進行異步調用客戶端的創建。

其實講客戶端配置為異步模式極其簡單,只要在 RSA 生成 Client 端代碼時將‘ Enable asynchronous invocation for generated client ’ 選中即可 , 如下圖 :

圖 9. 異步客戶端創建選項

[[106648]]

這樣在生成的客戶端的 BookStoreSrvBeanService 中就會多了 qryBooksByAuthorAsync 的異步方法。既然是異步方法,回調 (Call Back) 就是必不可少的,在下面的異步客戶端測試代碼中可以看到匿名內部類作為回調 handler 的具體使用方法 :

圖 10. 異步客戶端調用示例代碼

Java Web 服務性能優化實踐

測試代碼的輸出結果如下:

圖 11. 異步調用控制臺輸出

Java Web 服務性能優化實踐

可以看到,當 Web 服務沒有返回時,客戶端仍然有機會做自己的輸出 :“not done yet, can do something else…”。有些人可能會認為作為客戶端此處的輸出并無實際意義,但試想如果一個 server 作為客戶端去訪問一個 Web 服務,如果在服務等待期間能夠有機會脫離阻塞狀態執行自己需要的代碼,甚至可以使用 wait 等方法釋放被當前線程占用的資源,那么對于此 server 來說這將是一個對性能提升起到本質作用的因素。

使 web 服務支持批處理模式

● 批處理模式簡介

批處理顧名思義是采用一次性處理多條事務的方式來取代一次一條事務的傳統處理方式。Java Database Connectivty (JDBC) 中提供了大量的批處理 API 用于優化數據庫操作性能,例如 Statement.executeBatch() 可以一次性接收并執行多條 SQL 語句。批處理思想可以方便的移植到 Web 服務調用場景以達到優化 Web 服務調用響應的目的。通過實際 Web 服務調用時間戳分析不難看出網絡通訊是 Web 服務性能的瓶頸之一,因此通過減少網絡通訊開銷來優化 Web 服務性能,批處理模式是其中較為直接的一種實現方式。

批處理模式適應性

批處理模式雖然作用顯著,但是也不適合所有場景。使用批處理模式處理 Web 服務請求時需要考慮一下幾點:

1.不同 Web 服務執行時間差異性

不同 Web 服務執行時間不盡相同,因此在同時處理多 Web 服務請求時需要考慮這種時間差異性。一般情況下是等待最長處理時間的 Web 服務執行完畢后匯總所有 Web 服務執行結果從而返回到客戶端,因此存在批處理多 Web 服務反而比順序單次調用 Web 服務消耗更長時間可能性。需要在采用批處理模式前對 Web 服務性能有清晰的了解,盡可能將性能參數相似的 Web 服務納入批處理,而分別處理執行時間差異較大的 Web 服務。一般建議將性能差異在 30% 以內的多 Web 服務可以考慮納入批處理。比方說 AccountWebService 中有一個獲取用戶賬戶列表的 Web 服務 getUserAccounts,這個 Web 服務執行需要 15 秒,另外 UserWebService 中有一個獲取用戶目前 pending 的待處理通知 getUserPendingNotifications,這個 Web 服務執行需要 2 秒時間,我們可以看到這兩個 Web 服務執行時間差異較大,因此在這種情況下我們不建議將這兩個 Web 服務納入批處理。而 AccountWebService 中有一個增加第三方用戶賬號的 Web 服務 addThirdPartyNonHostAccount,該 Web 服務執行需要 3 秒,此時就就可以考慮能將 getUserPendingNotifications Web 服務和 addThirdPartyNonHostAccount 放在一個批處理中一次性調用處理。

2.不同 Web 服務業務相關性

一般情況下建議考慮將存在業務相關性的多 Web 服務放入批處理中,只有業務存在相關性的多 Web 服務才會涉及到減少調用次數以提高應用系統性能的需求。比方說用戶在增加第三方賬號 addThirdPartyNonHostAccount 以后會默認自動發送一條 pending 的 notification 給用戶用以提示用戶來激活增加的賬號,因此這種場景下可以完美的將 addThirdPartyNonHostAccount Web 服務和 getUserPendingNotifications Web 服務放入一個批處理中,在用戶增加完三方賬號后系統自動刷新 pending notification 區域以提示用戶激活賬號。UserWebService 中有一個獲取用戶主賬號的 Web 服務 getUserHostAccounts 和獲取用戶三方賬號的 Web 服務 getUserNonHostAccounts,MetaDataService 中有一個獲取國家金融機構假期數據的 Web 服務 getFinacialAgencyHolidays,該 Web 服務明顯和 getUserHostAccounts,getUserNonHostAccounts 不存在業務上相關性,因此不應該將它們納入批處理。

3.盡量避免將存在依賴關系的多 Web 服務放入同一個批處理中

將多個存在依賴關系的多 Web 服務放入同一批處理中需要專門考慮、處理多 Web 服務彼此間的依賴關系,進而無法將方便的這些 Web 服務并發執行而不得不串行執行有依賴關系的 Web 服務,最悲觀情況下批處理響應時間將是批處理中所有 Web 服務串行執行時間和。原則上即使批處理中 Web 服務間存在依賴關系,通過動態指定依賴關系也可以實現多 Web 服務的批處理調用。但是這樣將大大增加批處理實現的技術復雜性,因此不建議如此操作。

4.多線程方式處理批處理 Web 服務請求

批處理模式在服務實現端一般通過多線程處理方法來并發處理多個 Web 服務調用請求。通過集中的解析器解析批處理模式請求,之后針對每一個 Web 服務調用會啟動一個單獨的線程來處理此 Web 請求,同時會有一個總的線程管理器來調度不同 Web 服務執行線程,監控線程執行進度等。在所有線程執行完成后匯總 Web 服務執行結果返回客戶端。

批處理實現方式

批處理實現方式一般有兩種:靜態批處理模式,動態批處理模式:

靜態批處理模式實現較為簡單,但是相對缺乏靈活性。靜態批處理的核心思想就是在已有 Web 服務的基礎上通過組合封裝的方式來得到批處理的目的。舉例來說將系統中已有的 Web 服務請求結構組合成一個新的數據對象模型作為 Web 服務批處理請求結構,在客戶端進行批處理調用時通過初始化批處理請求數據對象,并將特定的 Web 服務請求對象賦值給批處理請求對象屬性的方式。同理在服務實現端在生成批處理響應數據對象時也是通過將具體 Web 服務的響應組合起來生成并返回客戶端。

動態批處理模式實現較為復雜,但也能提供更大的操作靈活性。動態批處理模式一般需要應用采用 Java 反射 API 開發具有容器功能的批處理實現框架。客戶端可以動態的向容器中增加 Web 服務調用請求,比方說客戶端可以動態的將 addThirdPartyNonHostAccount,getUserPendingNotifications 兩個 Web 服務加入到這個容器中然后發起一個框架提供的批處理 Web 服務調用請求。該批處理 Web 服務在實現端將解析容器并將其中的各個 Web 服務請求抽取解析并啟動獨立的線程來處理。

#p#

壓縮SOAP

當 Web Service SOAP 消息體比較大的時候,我們可以通過壓縮 soap 來提高網絡傳輸性能。通過 GZIP 壓縮 SOAP 消息,得到二進制數據,然后把二進制數據作為附件傳輸。以前常規方法是把二進制數據 Base64 編碼,但是 Base64 編碼后的大小是二進制數據的 1.33 倍。辛苦壓縮的,被 Base64 給抵消差不多了。是否可以直接傳輸二進制數據呢? JAX-WS 的 MTOM 是可以的,通過 HTTP 的 MIME 規范, SOAP message 可以字符,二進制混合。我們在 client 和 server 端各注冊一個 handler 來處理壓縮和解壓。 由于壓縮后的 SOAP 消息附件與消息體中的部分不是基于 MTOM 自動關聯的,需要單獨處理附件。在生成 client 端和 server 端代碼的時候需要 enable MTOM。 Handler 具體代碼在本文代碼附件中, test.TestClientHanlder, test.TestServerHanlder。 寫好了 handler 了之后還要為 service 注冊 handler。

客戶端 handler 樣例代碼如下:

客戶端代碼

  1. public boolean handleMessage(MessageContext arg0) {  
  2.         SOAPMessageContext ct = (SOAPMessageContext) arg0;  
  3.         boolean isRequestFlag = (Boolean) arg0  
  4.                 .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);  
  5.         SOAPMessage msg = ct.getMessage();  
  6.         if (isRequestFlag) {  
  7.             try {  
  8.                 SOAPBody body = msg.getSOAPBody();  
  9.                 Node port = body.getChildNodes().item(0);  
  10.                 String portContent = port.toString();  
  11.                 NodeList list = port.getChildNodes();  
  12.                 for (int i = 0; i < list.getLength(); i++) {  
  13.                     port.removeChild(list.item(i));  
  14.                 }  
  15.                 ByteArrayOutputStream outArr = new ByteArrayOutputStream();  
  16.                 GZIPOutputStream zip = new GZIPOutputStream(outArr);  
  17.                 zip.write(portContent.getBytes());  
  18.                 zip.flush();  
  19.                 zip.close();  
  20.                 byte[] arr = outArr.toByteArray();  
  21.                 TestDataSource ds = new TestDataSource(arr);  
  22.                 AttachmentPart attPart = msg.createAttachmentPart();  
  23.                 attPart.setDataHandler(new DataHandler(ds));  
  24.                 msg.addAttachmentPart(attPart);  
  25.             } catch (SOAPException e) {  
  26.                 e.printStackTrace();  
  27.             } catch (IOException e) {  
  28.                 e.printStackTrace();  
  29.             }  
  30.         }  
  31.         return true;  
  32.     } 

Web 服務端 handler 樣例代碼如下:

服務端代碼

  1. public boolean handleMessage(MessageContext arg0) {  
  2.         SOAPMessageContext ct = (SOAPMessageContext) arg0;  
  3.         boolean isRequestFlag = (Boolean) arg0  
  4.                 .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);  
  5.         SOAPMessage msg = ct.getMessage();  
  6.         if (!isRequestFlag) {  
  7.             try {  
  8.                 Object obj = ct.get("Attachments");  
  9.                 Attachments atts = (Attachments) obj;  
  10.                 List list = atts.getContentIDList();  
  11.                 for (int i = 1; i < list.size(); i++) {  
  12.                     String id = (String) list.get(i);  
  13.                     DataHandler d = atts.getDataHandler(id);  
  14.                     InputStream in = d.getInputStream();  
  15.                     ByteArrayOutputStream out = new ByteArrayOutputStream();  
  16.                     GZIPInputStream zip = new GZIPInputStream(in);  
  17.                     byte[] arr = new byte[1024];  
  18.                     int n = 0;  
  19.                     while ((n = zip.read(arr)) > 0) {  
  20.                         out.write(arr, 0, n);  
  21.                     }  
  22.                     Document doc = DocumentBuilderFactory.newInstance()  
  23.                             .newDocumentBuilder()  
  24.                             .parse(new ByteArrayInputStream(out.toByteArray()));  
  25.                     SOAPBody body = msg.getSOAPBody();  
  26.                     Node port = body.getChildNodes().item(0);  
  27.                     port.appendChild(doc.getFirstChild().getFirstChild());  
  28.                 }  
  29.             } catch (SOAPException e) {  
  30.                 e.printStackTrace();  
  31.             } catch (IOException e) {  
  32.                 e.printStackTrace();  
  33.             } catch (SAXException e) {  
  34.                 e.printStackTrace();  
  35.             } catch (ParserConfigurationException e) {  
  36.                 e.printStackTrace();  
  37.             }  
  38.         }  
  39.         return true;  
  40.     } 

在 web.xml 中 service-ref 部分添加 handler. Server 端 handler 也是同樣添加。

配置代碼

  1. <handler-chains>  
  2.             <handler-chain>  
  3.                 <handler>  
  4.                     <handler-name>TestClientHandler</handler-name>  
  5.                     <handler-class>test.TestClientHandler  
  6.  </handler-class>  
  7.                 </handler>  
  8.             </handler-chain>  
  9.         </handler-chains> 

原文鏈接:IBM developerworks

責任編輯:林師授 來源: IBM developerworks
相關推薦

2011-07-19 10:46:49

Windows 7優化

2023-03-08 18:43:50

GPU模型隔離

2021-11-18 10:05:35

Java優化QPS

2010-01-08 09:43:23

SQL Server分Analysis Se

2021-05-19 08:04:11

ASP.Net服務性原則

2022-05-31 10:51:12

架構技術優化

2011-07-22 09:50:34

云服務云計算

2022-11-10 08:16:19

java性能服務性能

2014-03-19 14:34:06

JQuery高性能

2009-11-05 10:45:58

WCF服務

2025-09-08 11:20:00

2017-09-26 14:56:57

MongoDBLBS服務性能

2012-04-26 14:08:52

2021-07-06 12:07:27

Go 服務性能

2014-12-10 10:12:02

Web

2021-06-30 10:16:54

微服務架構測試

2019-08-12 14:46:56

Web服務器性能

2020-03-23 15:15:57

MySQL性能優化數據庫

2009-11-06 17:10:34

WCF服務性能計數器

2010-07-06 09:07:09

點贊
收藏

51CTO技術棧公眾號

我不卡神马影院| 成人bbav| 国产剧情一区在线| 久久男人的天堂| 国产交换配乱淫视频免费| 久久r热视频| 亚洲人成在线播放网站岛国| 国产女人水真多18毛片18精品| 欧美在线观看不卡| 婷婷精品进入| 日韩精品在线免费播放| 国产成年人视频网站| 青青在线视频| 欧美激情一二三区| 国产福利久久| 97av免费视频| 国产乱码精品| 久久99精品久久久久久青青91| 97人妻精品一区二区三区免 | 激情六月丁香婷婷| 免费黄色在线网站| 久久综合九色综合欧美98| 亚洲综合中文字幕在线观看| 中文字幕日韩免费| 亚洲国产免费看| 久久精品中文字幕电影| 国产福利短视频| 国产美女亚洲精品7777| 91久久久免费一区二区| 日本免费成人网| 日本www在线观看| 国产亚洲美州欧州综合国| 国产精品一区二区你懂得| 国产又粗又黄又爽| 日韩电影在线免费看| 91国产美女在线观看| 久草资源在线视频| 亚洲91中文字幕无线码三区| 中文字幕国产精品| 波多野结衣 在线| 麻豆成人入口| 亚洲激情小视频| 国产精品一区二区在线免费观看| 91麻豆精品一二三区在线| 日本高清不卡视频| 3d动漫一区二区三区| 毛片网站在线看| 亚洲另类春色国产| 亚洲AV无码成人精品一区| 99视频在线观看地址| 国产免费久久精品| 日本午夜精品电影| 你懂的在线视频| 26uuu国产在线精品一区二区| 国产乱子伦精品| 丰满少妇被猛烈进入| 国产精品123| 99在线高清视频在线播放| www.麻豆av| 成人午夜视频福利| 国产成人av一区二区三区| 欧美特级特黄aaaaaa在线看| 大桥未久av一区二区三区中文| 亚洲xxxx在线| 亚洲美女综合网| 不卡的av电影| 欧美一区观看| 在线免费av电影| 亚洲欧美日韩国产中文在线| av电影一区二区三区| 午夜av在线播放| 午夜精品aaa| 漂亮人妻被中出中文字幕| 最新欧美电影| 欧美片在线播放| 韩国三级与黑人| 精品一区二区男人吃奶| 亚洲精品一区二区三区婷婷月| 中文字幕一二三四区| 精品国精品国产自在久国产应用| 中文字幕精品在线| 欧美黄色aaa| 日韩一级大片| 国产精品video| 国产熟女精品视频| 99在线精品一区二区三区| 日本在线观看一区二区| 巨大荫蒂视频欧美另类大| 亚洲高清一区二区三区| 国产精品无码一本二本三本色| 狂野欧美性猛交xxxx| 日韩欧美国产一区在线观看| 黄色a一级视频| 三级电影一区| 高清在线视频日韩欧美| 波多野结衣黄色网址| 国产麻豆精品在线| 六月婷婷久久| 黄色免费在线看| 精品露脸国产偷人在视频| 久久黄色片网站| 欧美人体视频| 久久大大胆人体| 国产熟妇一区二区三区四区| 国产乱码精品1区2区3区| 久久综合九色欧美狠狠| 大地资源网3页在线观看| 欧美性猛交xxxx乱大交3| 中文国产在线观看| 自拍欧美一区| 欧美—级高清免费播放| 中文字幕一区二区三区四区视频| 成人三级伦理片| 一本一本a久久| 日韩脚交footjobhdboots| 欧美一卡二卡在线| 日韩福利在线视频| 亚洲制服少妇| 成人精品一二区| 欧美午夜电影一区二区三区| 欧美日韩中文字幕综合视频| 精品人妻无码中文字幕18禁| 欧美色图国产精品| 欧美性受xxxx白人性爽| 亚洲精品字幕在线观看| 中文字幕亚洲区| 自拍偷拍 国产| 私拍精品福利视频在线一区| 久久99久久99精品免观看粉嫩| 亚洲午夜无码久久久久| 91捆绑美女网站| 成人免费性视频| 秋霞影院一区| 久久国产精彩视频| 91亚洲国产成人久久精品麻豆| 久久久久久免费网| 欧美综合在线播放| 国产伦精品一区二区三区在线播放| 久久亚洲综合国产精品99麻豆精品福利 | 亚洲欧美另类图片小说| 欧美成人福利在线观看| 欧美丝袜一区| 国产精品99蜜臀久久不卡二区| 午夜视频福利在线| 亚洲成人免费观看| 亚洲成年人在线观看| 午夜久久黄色| 99视频在线免费观看| 免费电影网站在线视频观看福利| 欧美一区二区三区在线| 日韩一级片av| 国产精品18久久久久久久网站| 超碰超碰超碰超碰超碰| 亚洲91网站| 久久久久亚洲精品国产| 日韩一级免费视频| 欧美日韩国产精品| a视频免费观看| 母乳一区在线观看| 欧美一区二区综合| 国产精品亲子伦av一区二区三区| 在线午夜精品自拍| 一区二区www| 亚洲欧美日本在线| 国产精品亚洲一区二区无码| 亚洲国内欧美| 明星裸体视频一区二区| 成人h在线观看| 久久精品2019中文字幕| 国产富婆一级全黄大片| 亚洲国产成人精品视频| 国产在线观看无码免费视频| 久久中文欧美| 久久精品国产精品亚洲精品色| 免费一级欧美片在线观看网站| 性欧美视频videos6一9| 免费在线黄色影片| 欧美日韩1区2区| 久久久久久免费观看| 91在线视频播放| 亚洲精品性视频| 国产在线欧美| 图片区小说区区亚洲五月| 精品一区视频| 欧美在线视频一区| 欧美成年黄网站色视频| 精品国产sm最大网站| 中文字幕高清在线免费播放| 国产精品二三区| 中国黄色片视频| 日本不卡中文字幕| 毛片av在线播放| 国精一区二区| 成人av网站观看| 美女色狠狠久久| 97在线免费观看| 巨大荫蒂视频欧美另类大| 亚洲国产精品yw在线观看 | 久久亚洲影院| 国产一区二区三区播放| 猛男gaygay欧美视频| 亚洲a区在线视频| 欧美第一视频| 韩国美女主播一区| 日本综合在线| 亚洲人成在线观看| 亚洲AV无码精品自拍| 在线观看不卡视频| 日本三级午夜理伦三级三| 国产精品污www在线观看| 久久久久成人精品无码中文字幕| 久久激情五月激情| 免费在线激情视频| 欧美日韩在线大尺度| 小说区图片区图片区另类灬| 国产精品极品在线观看| 亚洲影院色在线观看免费| 我爱我色成人网| 97精品久久久| 欧美黑人猛交的在线视频| 色爱精品视频一区| 国产中文在线观看| 亚洲国产成人av在线| 国产99久久九九精品无码免费| 在线观看91精品国产入口| 欧美a∨亚洲欧美亚洲| 亚洲一区二区综合| 日韩精品123区| 国产精品久久久久久一区二区三区 | 黑森林福利视频导航| 伊人激情综合| 欧美在线观看视频免费| 亚洲欧美综合久久久| 一区不卡视频| 精品国产一区二区三区小蝌蚪 | 亚洲av无码专区在线播放中文| 另类中文字幕网| 色www免费视频| 青青青爽久久午夜综合久久午夜| 欧美a在线视频| 免费在线欧美黄色| 99热成人精品热久久66| 欧美综合二区| 成人免费xxxxx在线视频| 久久资源在线| 亚洲激情在线观看视频| 蜜桃视频一区二区| 一本岛在线视频| 久久精品国产亚洲一区二区三区| 免费一区二区三区在线观看| 美国欧美日韩国产在线播放| 午夜dv内射一区二区| 秋霞午夜av一区二区三区| 杨幂毛片午夜性生毛片| 免费成人在线观看视频| 污网站免费在线| 国内成人精品2018免费看| 欧美一级特黄aaa| 国产一区二区三区精品欧美日韩一区二区三区 | 日本高清xxxx| 中文字幕免费一区二区三区| 国产精品视频一二三四区| 狠久久av成人天堂| 黄色动漫网站入口| 日韩和的一区二区| 色戒在线免费观看| 国产成人啪免费观看软件| 国产国语老龄妇女a片| av影院午夜一区| 欧美丰满老妇熟乱xxxxyyy| 国产精品免费av| 少妇影院在线观看| 亚洲h在线观看| 波多野结衣理论片| 7777女厕盗摄久久久| 亚洲va欧美va| 亚洲男人av电影| 欧美人xxx| 久久久久久久香蕉网| 亚洲女同av| 成人精品aaaa网站| 久久动漫网址| 亚洲欧洲免费无码| 国产精品v日韩精品v欧美精品网站| 精品国产一区三区| 美国十次了思思久久精品导航| gogo亚洲国模私拍人体| 91蜜桃免费观看视频| 激情高潮到大叫狂喷水| 午夜精品视频一区| 在线观看视频二区| 精品国产91洋老外米糕| 在线看免费av| 国内精品国产三级国产在线专| 欧美与亚洲与日本直播| 99在线观看| 日韩精品诱惑一区?区三区| 精品成在人线av无码免费看| 日本午夜精品一区二区三区电影| 一区二区三区四区影院| 国产欧美日产一区| 久一区二区三区| 欧美人动与zoxxxx乱| 日本一本草久在线中文| 欧美人与物videos| 一区在线影院| 韩国成人一区| 最新国产精品久久久| 九色porny91| 91在线观看下载| 麻豆国产尤物av尤物在线观看 | 乌克兰美女av| 99国产精品一区| 久久免费精彩视频| 欧美丰满美乳xxx高潮www| 九色在线视频蝌蚪| 欧美精品aaa| 日韩一区二区三区色| 一本久久a久久精品vr综合 | 麻豆tv在线观看| 中文字幕日本乱码精品影院| 在线观看污污网站| 亚洲精品国产综合区久久久久久久 | 丁香一区二区| 伊人网在线免费| 精品一区二区三区蜜桃| 粉嫩精品久久99综合一区| 欧美性少妇18aaaa视频| 深夜福利视频网站| 欧美激情中文字幕乱码免费| 国产一区二区三区| 中文字幕一区二区三区有限公司 | 欧美在线视频你懂得| 亚洲av成人无码久久精品老人 | 性日韩欧美在线视频| 亚洲国产一区二区三区网站| 天天做天天爱天天高潮| 九九视频精品免费| 国产探花在线视频| 欧美午夜精品电影| 69av亚洲| 国产在线拍揄自揄视频不卡99| 不卡av一区二区| 欧美成年人视频在线观看| 国产精品福利一区二区| 91女人18毛片水多国产| 久久久精品日本| 视频精品二区| 国产xxxx振车| av电影在线观看不卡| 黄色在线观看国产| 亚洲午夜未满十八勿入免费观看全集| 深夜成人福利| 午夜精品亚洲一区二区三区嫩草| 日韩成人dvd| 999精品久久久| 欧美成人福利视频| 国产伦理精品| 欧美亚洲精品日韩| 免费亚洲电影在线| 全网免费在线播放视频入口| 日韩视频一区二区三区| 丁香花电影在线观看完整版| 久久久国产精品一区二区三区| 久久aⅴ国产紧身牛仔裤| 国产精品高清无码在线观看| 欧美揉bbbbb揉bbbbb| 国产黄色小视频在线| 国产日产精品一区二区三区四区| 美女黄色成人网| 日韩欧美视频免费观看| 欧美一级一区二区| 蜜臀久久精品| 亚洲欧洲一区二区| 国产成人在线色| 欧美在线观看不卡| 久久在线精品视频| 久久视频在线观看| 欧美一级特黄a| 亚洲自拍欧美精品| 欧美女同网站| 91亚洲国产成人精品性色| 亚洲精品1区2区| 18啪啪污污免费网站| 日韩欧美视频在线| 日韩不卡免费高清视频| 黄色一级视频播放| 91免费国产在线| 96亚洲精品久久久蜜桃| 2019中文字幕在线| 偷拍欧美精品| 免费黄色在线视频| 欧美刺激脚交jootjob| 欧美va在线| 欧美无砖专区免费| 欧美国产一区在线| 三级小视频在线观看| 国产日韩精品在线| 国产精品久久久亚洲一区| 日韩三级在线观看视频|