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

91精品国产经典在线观看| 一级黄色大片免费观看| 欧美大片网址| 日本精品一级二级| 亚洲日本精品| 色一情一乱一乱一区91av| 久久久久一区| 久久夜色精品国产亚洲aⅴ| 在线精品视频播放| 九色成人搞黄网站| 亚洲国产精品综合小说图片区| 久久99精品国产99久久| 在线播放亚洲精品| 亚洲美女视频在线免费观看| 中文字幕亚洲天堂| 理论片大全免费理伦片| 成人国产激情在线| 欧美日韩国产专区| 免费在线精品视频| 久久精品蜜桃| 国产成人免费高清| 国产精品免费视频久久久| 免费毛片在线播放免费| 欧美理论在线播放| 日韩成人在线播放| 色综合久久久无码中文字幕波多| 午夜激情成人网| 亚洲一区二区五区| 亚洲一区二区在线看| 涩爱av在线播放一区二区| 国产成人精品亚洲日本在线桃色| 国产精品网址在线| 日韩精品――中文字幕| 欧美国产另类| 中文字幕综合在线| 亚洲AV无码国产精品| 美女的胸无遮挡在线观看| 亚洲免费在线电影| 亚洲欧美日韩另类精品一区二区三区| 亚洲 欧美 精品| 国产成人免费视频网站 | 亚洲视频在线观看视频| 亚洲av永久无码精品| 香蕉成人app| 欧美一级电影网站| 午夜xxxxx| 日韩av黄色| 欧美色偷偷大香| 天天色综合社区| 国产成人77亚洲精品www| 色一情一乱一乱一91av| 无码aⅴ精品一区二区三区浪潮| 国产亚av手机在线观看| 一区二区在线看| 免费在线精品视频| 欧美videossex| 亚洲综合色成人| 欧美大黑帍在线播放| 婷婷色在线播放| 亚洲自拍与偷拍| 人妻av中文系列| 蜜桃视频www网站在线观看| 天天亚洲美女在线视频| 国产美女网站在线观看| 欧美办公室脚交xxxx| 午夜电影一区二区| 97超碰青青草| 色豆豆成人网| 欧美日韩视频在线观看一区二区三区 | 黄瓜视频污在线观看| 自拍亚洲一区| 在线国产精品视频| 永久免费看mv网站入口| 亚洲午夜激情在线| 欧美亚洲另类视频| 在线观看国产区| 精品一区二区三区香蕉蜜桃| 亚洲综合在线播放| 人成网站在线观看| 久久影院视频免费| 亚洲v国产v在线观看| 蜜桃视频在线观看免费视频网站www| **性色生活片久久毛片| 中文字幕第50页| 川上优av中文字幕一区二区| 色综合天天综合狠狠| 国产一区二区在线观看免费视频| 另类视频一区二区三区| 亚洲白拍色综合图区| 国产女主播喷水高潮网红在线| 日韩精品dvd| 欧美高清视频在线观看| 亚洲精品男人的天堂| 久久国产精品99久久人人澡| 都市激情久久久久久久久久久| 亚洲精品成人电影| 国产日韩综合av| 男人添女人下部视频免费| 免费成人直播| 日韩一区二区视频在线观看| 蜜桃av免费看| 国产精品啊v在线| 日韩免费观看av| 性生交生活影碟片| 国产目拍亚洲精品99久久精品| 久久久久久久免费视频| 免费成人美女女| 日韩精品在线看片z| 丰满少妇高潮一区二区| 亚洲网站视频| 国产日韩在线看片| 蜜桃免费在线| 亚洲国产一区视频| 亚洲综合20p| 精品久久久中文字幕| 欧美激情一区二区三区久久久| 最近日韩免费视频| www国产精品av| 日韩一区二区高清视频| 激情久久一区二区| 亚洲精品中文字| 久久久久久久久艹| 久久精品72免费观看| 欧洲精品在线一区| 激情黄产视频在线免费观看| 日韩一级二级三级精品视频| 性欧美精品男男| 嫩草成人www欧美| 狠狠色综合色区| 色婷婷av在线| 91精品国产综合久久福利软件| 亚洲午夜久久久久久久国产| 国产欧美日韩综合一区在线播放 | 99久久香蕉| 久久视频在线播放| 在线观看日批视频| 国产欧美精品国产国产专区| 狠狠爱免费视频| 欧美aaaaa级| 性欧美xxxx视频在线观看| 国产福利小视频| 亚洲欧美日韩成人高清在线一区| 污片在线免费看| 不卡一区综合视频| 国产久一一精品| 香蕉视频在线看| 欧美午夜精品免费| 成人信息集中地| 麻豆精品一区二区综合av| 丝袜足脚交91精品| 国产69精品久久久久9999人| 中文字幕日韩av| 伊人免费在线观看| 国产精品久久久久婷婷| 性chinese极品按摩| 日韩成人激情| 91在线观看免费| 中文av资源在线| 日韩精品一区在线| 国产成人亚洲欧洲在线| 91在线免费视频观看| 国产a级一级片| 精品中文一区| 国产精品中文久久久久久久| 欧美成年黄网站色视频| 欧美一级日韩免费不卡| 国产在线观看免费av| 懂色中文一区二区在线播放| 欧美深夜福利视频| 亚洲制服一区| 国产精品中文在线| 污污的网站在线免费观看| 亚洲成avwww人| 国产成人无码一区二区在线播放| 国产清纯在线一区二区www| 中文字幕 91| 欧美日一区二区在线观看 | 欧美xxxx中国| 99三级在线| 波多视频一区| 日韩视频免费在线| 丰满人妻妇伦又伦精品国产| 日韩欧美精品中文字幕| 色偷偷男人天堂| 丁香六月久久综合狠狠色| 国产一区二区三区精彩视频| 久久亚洲成人| 国产精品一区二区欧美黑人喷潮水 | 日韩欧美黄色| 国产日韩在线亚洲字幕中文| 成人性生交大片免费看网站| 亚洲视频国产视频| 亚洲国产www| 色网综合在线观看| 欧美激情图片小说| 91社区在线播放| xxx中文字幕| 久久久久免费| 波多野结衣av一区二区全免费观看| 网友自拍区视频精品| 国产主播在线一区| 日韩欧美精品一区二区三区| 精品久久久91| 欧美另类自拍| 欧美大片在线观看| 在线观看视频二区| 懂色av一区二区三区| 在线观看亚洲网站| 国产性色一区二区| 岛国精品资源网站| 国产自产视频一区二区三区| 毛片av免费在线观看| 欧美午夜一区二区福利视频| 水蜜桃亚洲精品| 亚洲精品国产setv| 国产精品免费视频一区二区| 少妇高潮一区二区三区99| 欧美一区二区影院| 蜜臀av国内免费精品久久久夜夜| 伊人亚洲福利一区二区三区| 香蕉国产在线视频| 日韩视频在线你懂得| 一级片aaaa| 欧洲视频一区二区| 97久久久久久久| 亚洲电影一级黄| 欧美成人精品欧美一级| 国产精品色婷婷久久58| 亚洲成人日韩在线| av不卡在线观看| 波多野结衣办公室双飞| 国产一区二区三区精品视频| 一级淫片在线观看| 麻豆成人久久精品二区三区红| 欧美日韩中文在线视频| 中文精品在线| 欧美一级视频免费看| 亚洲无线视频| 九一国产精品视频| 亚洲精品人人| 日韩欧美视频网站| 国产精品免费看| jizzjizz国产精品喷水| 一区二区福利| 日韩中文字幕三区| 久久狠狠婷婷| 看欧美ab黄色大片视频免费| 久久99伊人| 午夜dv内射一区二区| 日韩在线a电影| 日本 片 成人 在线| 蜜桃久久久久久| 青青草原国产在线视频| 久久er99热精品一区二区| 91视频这里只有精品| 黄页视频在线91| 91性高潮久久久久久久| 国产黄色精品网站| 亚洲乱妇老熟女爽到高潮的片| k8久久久一区二区三区| 大地资源二中文在线影视观看 | 麻豆一区在线观看| 亚洲你懂的在线视频| 欧美黑吊大战白妞| 午夜成人免费电影| 亚洲s码欧洲m码国产av| 欧美午夜在线观看| 国产免费黄色大片| 精品国产乱码久久久久久浪潮| 少妇人妻一区二区| 国产性猛交xxxx免费看久久| 日本a级在线| 久久99热精品这里久久精品| 国产自产自拍视频在线观看| 国产精品吊钟奶在线| 日韩精品第二页| 国产精品成人一区二区三区| 免费视频国产一区| 亚洲一区二区三区精品视频| 欧美日韩一区自拍 | 妺妺窝人体色www聚色窝仙踪| 亚洲成av人片在线观看无码| 少妇高潮av久久久久久| 欧美日韩国产首页| 囯产精品一品二区三区| 国产午夜精品全部视频播放| 黄色在线论坛| 2019中文字幕免费视频| 欧美aaaaaaaa| 国产免费高清一区| 精品视频免费在线观看| 成人在线免费高清视频| 久久国产日韩| 一区二区三区人妻| 国产婷婷精品av在线| 91视频综合网| 91福利视频久久久久| www.激情五月.com| 一区二区三区黄色| 久久久123| 国产欧美在线播放| 首页亚洲中字| 热久久最新地址| 日本欧美一区二区在线观看| 国产精品日日摸夜夜爽| 国产精品无码永久免费888| 国产乡下妇女做爰毛片| 欧美剧情电影在线观看完整版免费励志电影 | sm捆绑调教视频| 黑人狂躁日本妞一区二区三区| 97人妻精品一区二区三区| 亚洲女成人图区| 黄色污污视频在线观看| 国产在线不卡精品| 国产伦精品一区二区三区千人斩 | 精品久久国产老人久久综合| 大乳在线免费观看| 91精品成人久久| 中文字幕区一区二区三| 在线观看日韩羞羞视频| 老司机免费视频久久| ass极品水嫩小美女ass| 中文字幕中文在线不卡住| 中文字幕在线欧美| 日韩av网址在线| 男女在线视频| 91免费版网站在线观看| 欧美超碰在线| 在线视频日韩一区 | 亚洲国产精品女人久久久| av免费在线免费观看| 91精品视频免费| 久久视频在线| 欧美一级视频在线| 国产精品久久久久影院色老大| 久久青青草原亚洲av无码麻豆| 亚洲国产另类久久精品| a国产在线视频| 粉嫩av一区二区三区免费观看| 亚洲理论电影网| 欧美精品 - 色网| 亚洲视频在线观看一区| 国产影视一区二区| 日韩视频在线免费观看| 欧美天堂一区| 婷婷视频在线播放| 狠狠色狠狠色合久久伊人| 韩国一级黄色录像| 欧美电影在线免费观看| 成人免费高清| 国产精品高清一区二区三区| 韩国av一区| 在线免费观看污视频| 欧美午夜视频在线观看| 男生女生差差差的视频在线观看| 热久久这里只有精品| 精品久久电影| 天天摸天天舔天天操| 亚洲人成网站影音先锋播放| 国产精品自拍电影| 欧美精品手机在线| 亚洲专区**| 91精品91久久久中77777老牛| 久久这里只有精品视频网| 成年人视频免费| 日韩亚洲欧美中文在线| 日本精品在线观看| 日本欧美黄色片| 国产欧美日韩综合| 国产精品久久777777换脸| 欧美www在线| 激情小说亚洲色图| 99视频在线免费| 亚洲日穴在线视频| 手机av在线免费观看| 国产精品高精视频免费| 亚洲国产精品久久久天堂| 日本一区二区免费视频| 色诱视频网站一区| 精品176二区| 精品一区二区日本| 久久99热99| 日韩久久久久久久久| 中文字幕久热精品在线视频| 久久免费精品| 国产精品免费成人| 亚洲欧美日韩国产一区二区三区 | 欧美日韩黄色一级片| 国产精品视频一区二区三区不卡| 国产夫妻性生活视频| 日本一区二区不卡| 欧美一区久久| 亚洲精品成人无码| 精品国产a毛片| 欧洲亚洲精品| 精品人妻一区二区三区四区在线| 国产精品欧美极品| 亚洲欧美丝袜中文综合| 91九色国产视频| 久久久人人人|