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

如何設(shè)計一個 RPC 系統(tǒng)

開發(fā) 前端
RPC是一種方便的網(wǎng)絡(luò)通信編程模型,由于和編程語言的高度結(jié)合,大大減少了處理網(wǎng)絡(luò)數(shù)據(jù)的復(fù)雜度,讓代碼可讀性也有可觀的提高。但是RPC本身的構(gòu)成卻比較復(fù)雜,由于受到編程語言、網(wǎng)絡(luò)模型、使用習(xí)慣的約束,有大量的妥協(xié)和取舍之處。

RPC是一種方便的網(wǎng)絡(luò)通信編程模型,由于和編程語言的高度結(jié)合,大大減少了處理網(wǎng)絡(luò)數(shù)據(jù)的復(fù)雜度,讓代碼可讀性也有可觀的提高。但是RPC本身的構(gòu)成卻比較復(fù)雜,由于受到編程語言、網(wǎng)絡(luò)模型、使用習(xí)慣的約束,有大量的妥協(xié)和取舍之處。本文就是通過分析幾種流行的RPC實現(xiàn)案例,提供大家在設(shè)計RPC系統(tǒng)時的參考。

由于RPC底層的網(wǎng)絡(luò)開發(fā)一般和具體使用環(huán)境有關(guān),而編程實現(xiàn)手段也非常多樣化,但不影響使用者,因此本文基本涉及如何實現(xiàn)一個RPC系統(tǒng)。

認識 RPC (遠程調(diào)用)

我們在各種操作系統(tǒng)、編程語言生態(tài)圈中,多少都會接觸過“遠程調(diào)用”的概念。一般來說,他們指的是用簡單的一行代碼,通過網(wǎng)絡(luò)調(diào)用另外一個計算機上的某段程序。比如:

  • RMI——Remote Method Invoke:調(diào)用遠程的方法。“方法”一般是附屬于某個對象上的,所以通常RMI指對在遠程的計算機上的某個對象,進行其方法函數(shù)的調(diào)用。
  • RPC——Remote Procedure Call:遠程過程調(diào)用。指的是對網(wǎng)絡(luò)上另外一個計算機上的,某段特定的函數(shù)代碼的調(diào)用。

遠程調(diào)用本身是網(wǎng)絡(luò)通信的一種概念,他的特點是把網(wǎng)絡(luò)通信封裝成一個類似函數(shù)的調(diào)用。網(wǎng)絡(luò)通信在遠程調(diào)用外,一般還有其他的幾種概念:數(shù)據(jù)包處理、消息隊列、流過濾、資源拉取等待。下面比較一下他們差異:

方案編程方式信息封裝傳輸模型典型應(yīng)用

  • 遠程調(diào)用調(diào)用函數(shù),輸入?yún)?shù),獲得返回值。使用編程語言的變量、類型、函數(shù)發(fā)出請求,獲得響應(yīng)Java RMI
  • 數(shù)據(jù)包處理調(diào)用Send()/Recv(),使用字節(jié)碼數(shù)據(jù),編解碼,處理內(nèi)容把通信內(nèi)容構(gòu)造成二進制的協(xié)議包發(fā)送/接收UDP編程
  • 消息隊列調(diào)用Put()/Get(),使用“包”對象,處理其包含的內(nèi)容消息被封裝成語言可用的對象或結(jié)構(gòu)對某隊列,存入一個消息;取出一個消息ActiveMQ
  • 流過濾讀取一個流,或?qū)懗鲆粋€流,對流中的單元包即刻處理單元長度很小的統(tǒng)一數(shù)據(jù)結(jié)構(gòu)連接;發(fā)送/接收;處理網(wǎng)絡(luò)視頻
  • 資源拉取輸入一個資源ID,獲得資源內(nèi)容請求或響應(yīng)都包含:頭部+正文請求后等待響應(yīng)WWW
  • 針對遠程調(diào)用的特點——調(diào)用函數(shù)。業(yè)界在各種語言下都開發(fā)過類似的方案,同時也有些方案是試圖做到跨語言的。盡管遠程調(diào)用在編程方式上,看起來似乎是最簡單易用的,但是也有明顯的缺點。所以了解清楚遠程調(diào)用的優(yōu)勢和缺點,是決定是否要開發(fā)、或者使用遠程調(diào)用這種模型的關(guān)鍵問題。

遠程調(diào)用的優(yōu)勢有:

  • 屏蔽了網(wǎng)絡(luò)層。因此在傳輸協(xié)議和編碼協(xié)議上,我們可以選擇不同的方案。比如WebService方案就是用的HTTP傳輸協(xié)議+SOAP編碼協(xié)議;而REST的方案往往使用HTTP+JSON協(xié)議。Facebook的Thrift甚至可以定制任何不同的傳輸協(xié)議和編碼協(xié)議,你可以用TCP+Google Protocol Buffer,也可以用UDP+JSON……。由于屏蔽了網(wǎng)絡(luò)層,你可以根據(jù)實際需要來獨立的優(yōu)化網(wǎng)絡(luò)部分,而無需涉及業(yè)務(wù)邏輯的處理代碼,這對于需要在各種網(wǎng)絡(luò)環(huán)境下運行的程序來說,非常有價值。
  • 函數(shù)映射協(xié)議。你可以直接用編程語言來書寫數(shù)據(jù)結(jié)構(gòu)和函數(shù)定義,取代編寫大量的編碼協(xié)議格式和分包處理邏輯。對于那些業(yè)務(wù)邏輯非常復(fù)雜的系統(tǒng),比如網(wǎng)絡(luò)游戲,可以節(jié)省大量定義消息格式的時間。而且函數(shù)調(diào)用模型非常容易學(xué)習(xí),不需要學(xué)習(xí)通信協(xié)議和流程,讓經(jīng)驗較淺的程序員也能很容易的開始使用網(wǎng)絡(luò)編程。

遠程調(diào)用的缺點:

  • 增加了性能消耗。由于把網(wǎng)絡(luò)通信包裝成“函數(shù)”,需要大量額外的處理。比如需要預(yù)生產(chǎn)代碼,或者使用反射機制。這些都是額外消耗CPU和內(nèi)存的操作。而且為了表達復(fù)雜的數(shù)據(jù)類型,比如變長的類型string/map/list,這些都要數(shù)據(jù)包中增加更多的描述性信息,則會占用更多的網(wǎng)絡(luò)包長度。
  • 不必要的復(fù)雜化。如果你僅僅是為了某些特定的業(yè)務(wù)需求,比如傳送一個固定的文件,那么你應(yīng)該用HTTP/FTP協(xié)議模型。如果為了做監(jiān)控或者IM軟件,用簡單的消息編碼收發(fā)會更快速高效。如果是為了做代理服務(wù)器,用流式的處理會很簡單。另外,如果你要做數(shù)據(jù)廣播,那么消息隊列會很容易做到,而遠程調(diào)用這幾乎無法完成。

因此,遠程調(diào)用最適合的場景是:業(yè)務(wù)需求多變,網(wǎng)絡(luò)環(huán)境多變。

RPC方案的核心問題

由于遠程調(diào)用的使用接口是“函數(shù)”,所以要如何構(gòu)建這個“函數(shù)”,就產(chǎn)生了三個方面需要決策的問題:

1 . 如何表示“遠程”的信息

所謂遠程,就是指網(wǎng)絡(luò)上另外一個位置,那么網(wǎng)絡(luò)地址就是必須要輸入的部分。在TCP/IP網(wǎng)絡(luò)下,IP地址和端口號代表了運行中程序的一個入口。所以指定IP地址和端口是發(fā)起遠程調(diào)用所必需的。

然而,一個程序可能會運行很多個功能,可以接收多個不同含義的遠程調(diào)用。這樣如何去讓用戶指定這些不同含義的遠程調(diào)用入口,就成為了另外一個問題。當(dāng)然最簡單的是每個端口一種調(diào)用,但是一個IP最多支持65535個端口,而且別的網(wǎng)絡(luò)功能也可能需要端口,所以這種方案可能會不夠用,同時一個數(shù)字代表一個功能也不太好理解,必須要查表才能明白。

所以我們必須想別的方法。在面向?qū)ο蟮乃枷胂拢行┓桨柑岢隽耍阂圆煌膶ο髞須w納不同的功能組合,先指定對象,再指定方法。這個想法非常符合程序員的理解方式,EJB就是這種方案的。一旦你確定了用對象這種模型來定義遠程調(diào)用的地址,那么你就需要有一種指定遠程對象的方法,為了指定對象,你必須要能把對象的一些信息,從被調(diào)用方(服務(wù)器端)傳輸給調(diào)用方(客戶端)。

最簡單的方案就是客戶端輸入一串字符串作為對象的“名字”,發(fā)給服務(wù)器端,查找注冊了這個“名字”的對象,如果找到了,服務(wù)器端就會用某種技術(shù)“傳輸”這個對象給客戶端,然后客戶端就可以調(diào)用他的方法了。當(dāng)然這種傳輸不可能是把整個服務(wù)器上的對象數(shù)據(jù)拷貝給客戶端,而是用一些符號或者標(biāo)志的方法,來代表這個服務(wù)器上的對象,然后發(fā)給客戶端。

如果你不是使用面向?qū)ο蟮哪P停敲催h程的一個函數(shù),也是必須要定位和傳輸?shù)模驗槟阏{(diào)用的函數(shù)必須先能找到,然后成為客戶端側(cè)的一個接口,才能調(diào)用。針對“遠程對象”(這里說的對象包括面向?qū)ο蟮膶ο蠡蛘邇H僅是 函數(shù))如何表達才能在網(wǎng)絡(luò)上定位;以及定位成功之后以什么形式供客戶端調(diào)用,都是“遠程調(diào)用”設(shè)計方案中第一個重要的問題。

2 . 函數(shù)的接口形式應(yīng)該如何表示

遠程調(diào)用由于受到網(wǎng)絡(luò)通信的約束,所以往往不能完全的支持編程語言的所有特性。比如C語言函數(shù)中的指針類型參數(shù),就無法通過網(wǎng)絡(luò)傳遞出去。因此遠程調(diào)用的函數(shù)定義,能用語言中的什么特性,不能用什么特性,是需要在設(shè)計方案是規(guī)定下來的。

這種規(guī)定如果太嚴格,會影響使用者的易用性;如果太寬泛,則可能導(dǎo)致遠程調(diào)用的性能低下。如何去設(shè)計一種方式,把編程語言中的函數(shù),描述成一個遠程調(diào)用的函數(shù),也是需要考慮的問題。很多方案采用了配置文件這種通用的方式,而另外一些方案可以直接在源代碼中里面加特殊的注釋。

一般來說,編譯型語言如C/C++只能采用源代碼根據(jù)配置文件生成的方案,虛擬機型語言如C#/JAVA可以采用反射機制結(jié)合配置文件(設(shè)置是在源代碼中用特殊注釋來代替配置文件)的方案,如果是腳本語言就更簡單,有時候連配置文件都不需要,因為腳本自己就可以充當(dāng)。總之遠程調(diào)用的接口要滿足怎樣的約束,也是一個需要仔細考慮的問題。

3. 用什么方法來實現(xiàn)網(wǎng)絡(luò)通信

遠程調(diào)用最重要的實現(xiàn)細節(jié),就是關(guān)于網(wǎng)絡(luò)通信。用何種通信方式來承載遠程調(diào)用的問題,細化下來就是兩個子問題:用什么樣的服務(wù)程序提供網(wǎng)絡(luò)功能?用什么樣的通信協(xié)議?

遠程調(diào)用系統(tǒng)可以自己直接對TCP/IP編程來實現(xiàn)通信,也可以委托一些其他軟件,比如Web服務(wù)器、消息隊列服務(wù)器等等……也可以使用不同的網(wǎng)絡(luò)通信框架,如Netty/Mina這些開源框架。通信協(xié)議則一般有兩層:一個是傳輸協(xié)議,比如TCP/UDP或者高層一點的HTTP,或者自己定義的傳輸協(xié)議;另外一個是編碼協(xié)議,就是如何把一個編程語言中的對象,序列化和反序列化成為二進制字節(jié)流的方案,流行的方案有JSON、Google Protocol Buffer等等,很多開發(fā)語言也有自己的序列化方案,如JAVA/C#都自帶。以上這些技術(shù)細節(jié),應(yīng)該選擇使用哪些,直接關(guān)系到遠程調(diào)用系統(tǒng)的性能和環(huán)境兼容性。

 

以上三個問題,就是遠程調(diào)用系統(tǒng)必須考慮的核心選型。根據(jù)每個方案所面對的約束不同,他們都會在這三個問題上做出取舍,從而適應(yīng)其約束。但是現(xiàn)在并不存在一個“萬能”或者“通用”的方案,其原因就是:在如此復(fù)雜的一個系統(tǒng)中,如果要照顧的特性越多,需要付出的成本(易用性代價、性能開銷)也會越多。

下面,我們可以研究下業(yè)界現(xiàn)存的各種遠程調(diào)用方案,看他們是如何在這三個方面做平衡和選擇的。

業(yè)界方案舉例

1. CORBA

CORBA是一個“古老”的,雄心勃勃的方案,他試圖在完成遠程調(diào)用的同時,還完成跨語言的通信的任務(wù),因此其復(fù)雜程度是最高的,但是它的設(shè)計思想,也被后來更多的其他方案所學(xué)習(xí)。在通信對象的定位上,它使用URL來定義一個遠程對象,這是在互聯(lián)網(wǎng)時代非常容易接受的。其對象的內(nèi)容則限定在C語言類型上,并且只能傳遞值,這也是非常容易理解的。為了能讓不同語言的程序通信,所以就必須要在各種編程語言之外獨立設(shè)計一種僅僅用于描述遠程接口的語言,這就是所謂的IDL:Interface Description Language 接口描述語言。

用這個方法,你就可以先用一種超然于所有語言之外的語言來定義接口,然后使用工具自動生成各種編程語言的代碼。這種方案對于編譯型語言幾乎是唯一選擇。CORBA并沒有對通信問題有任何約定,而是留給具體語言的實現(xiàn)者去處理,這也許是他沒有廣泛流行的原因之一。

實際上CORBA有一個非常著名的繼承者,他就是Facebook公司的Thrift框架。Thrift也是使用一種IDL編譯生成多種語言的遠程調(diào)用方案,并且用C++/JAVA等多種語言完整的實現(xiàn)了通信承載,所以在開源框架中是特別有號召力的一個。Thrfit的通信承載還有個特點,就是能組合使用各種不同的傳輸協(xié)議和編碼協(xié)議,比如TCP/UDP/HTTP配合JSON/BIN/PB……這讓它幾乎可以選擇任何的網(wǎng)絡(luò)環(huán)境。

Thrift的模型類似下圖,這里有的stub表示“樁代碼”,就是客戶端直接使用的函數(shù)形式程序;skeleton表示“骨架代碼”,是需要程序員編寫具體提供遠程服務(wù)功能的模板代碼,一般對模版做填空或者繼承(擴展)即可。這個stub-skeleton模型幾乎是所有遠程調(diào)用方案的標(biāo)配。

 

2. JAVA RMI

JAVA RMI是JAVA虛擬機自帶的一個遠程調(diào)用方案。它也是可以使用URL來定位遠程對象,使用JAVA自帶的序列化編碼協(xié)議傳遞參數(shù)值。在接口描述上,由于這是一個僅限于JAVA環(huán)境下的方案,所以直接用JAVA語言的Interface類型作為定義語言。用戶通過實現(xiàn)這個接口類型來提供遠程服務(wù),同時JAVA會根據(jù)這個接口文件自動生成客戶端的調(diào)用代碼供調(diào)用者使用。他的底層通信實現(xiàn),還是用TCP協(xié)議實現(xiàn)的。在這里,Interface文件就是JAVA語言的IDL,同時也是skeleton模板,供開發(fā)者來填寫遠程服務(wù)內(nèi)容。而stub代碼則由于JAVA的反射功能,由虛擬機直接包辦了。

這個方案由于JAVA虛擬機的支持,使用起來非常簡單,完全按照標(biāo)志的JAVA編程方法就可以輕松解決問題,但是這也僅僅能在JAVA環(huán)境下運行,限制了其適用的范圍。魚與熊掌不可兼得,易用性和適用性往往是互相沖突的。這和CORBA/Thrift追求最大范圍的適用性有很大的差別,也導(dǎo)致了兩者在易用性上的不同。

3. Windows RPC

Windows中對RPC支持是比較早和比較完善的。首先它通過GUID來查詢對象,然后使用C語言類型作為參數(shù)值的傳遞。由于Windows的API主要是C語言的,所以對于RPC功能來說,還是要用一種IDL來描述接口,最后生成.h和.c文件來生產(chǎn)RPC的stub和skeleton代碼。而通信機制,由于是操作系統(tǒng)自帶的,所以使用內(nèi)核LPC機制承載,這一點還是對使用者來說比較方便的。但是也限制了只能用于Windows程序之間做調(diào)用。

4. WebService & REST

在互聯(lián)網(wǎng)時代,程序需要通過互聯(lián)網(wǎng)來互相調(diào)用。而互聯(lián)網(wǎng)上最流行的協(xié)議是HTTP協(xié)議和WWW服務(wù),因此使用HTTP協(xié)議的Web Service就順理成章的成為跨系統(tǒng)調(diào)用的最流行方案。由于可以使用大多數(shù)互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施,所以Web Service的開發(fā)和實現(xiàn)幾乎是毫無難度的。一般來說,它都會使用URL來定位遠程對象,而參數(shù)則通過一系列預(yù)定義的類型(主要是C語言基礎(chǔ)類型),以及對象序列化方式來傳遞。接口生成方面,你可以自己直接對HTTP做解析,也可以使用諸如WSDL或者SOAP這樣的規(guī)范。在REST的方案中,則限定了只有PUT/GET/DELETE/POST四種操作函數(shù),其他都是參數(shù)。

 

總結(jié)一下上面的這些RPC方案,我們發(fā)現(xiàn),針對遠程調(diào)用的三個核心問題,一般業(yè)界有以下幾個選擇:

  • 遠程對象定位:使用URL;或者使用名字服務(wù)來查找
  • 遠程調(diào)用參數(shù)傳遞:使用C的基本類型定義;或者使用某種預(yù)訂的序列化(反序列化)方案
  • 接口定義:使用某種特定格式的技術(shù),直接按預(yù)先約定一種接口定義文件;或者使用某種描述協(xié)議IDL來生成這些接口文件
  • 通信承載:有使用特定TCP/UDP之類的服務(wù)器,也有可以讓用戶自己開發(fā)定制的通信模型;還有使用HTTP或者消息隊列這一類更加高級的傳輸協(xié)議

方案選型

在我們確定了遠程調(diào)用系統(tǒng)方案幾個可行選擇后,自然就要明確一下各個方案的優(yōu)缺點,這樣才能選擇真正合適需求的設(shè)計:

  1. 對于遠程對象的描述:使用URL是互聯(lián)網(wǎng)通行的標(biāo)準(zhǔn),比較方便用戶理解,也容易添加日后需要擴展到內(nèi)容,因為URL本身是一個由多個部分組合的字符串;而名字服務(wù)則老式一些,但是依然有他的好處,就是名字服務(wù)可以附帶負載均衡、容災(zāi)擴容、自定義路由等一系列特性,對于需求復(fù)雜的定位比較容易實現(xiàn)。
  2. 遠程調(diào)用的接口描述:如果只限制于某個語言、操作系統(tǒng)、平臺上,直接利用“隱喻”方式的接口描述,或者以“注解”類型注釋手段來標(biāo)注源代碼,實現(xiàn)遠程調(diào)用接口的定義,是最方便不過的。但是,如果需要兼容編譯型語言,如C/C++,就一定要用某種IDL來生成這些編譯語言的源代碼了。
  3. 通信承載:給用戶自己定制通信模塊,能提供最好的適用性,但是也讓用戶增加了使用的復(fù)雜程度。而HTTP/消息隊列這種承載方式,在系統(tǒng)的部署、運維、編程上都會比較簡單,缺點就是對于性能、傳輸特性的定制空間就比較小。

分析完核心問題,我們還需要考慮一些適用性場景:

  1. 面向?qū)ο筮€是面向過程:如果我們只是考慮做面向過程的遠程調(diào)用,只需要定位到“函數(shù)”即可。而如果是面向?qū)ο蟮模瑒t需要定位到“對象”。由于函數(shù)是無狀態(tài)的,所以其定位過程可以簡單到一個名字即可,而對象則需要動態(tài)的查找到其ID或句柄。
  2. 跨語言還是單一語言:單一語言的方案中,頭文件或接口定義完全用一種語言處理即可,如果是跨語言的,就少不免要IDL
  3. 混合式通信承載還是使用HTTP服務(wù)器承載:混合式承載可能可以用到TCP/UDP/共享內(nèi)存等底層技術(shù),可以提供最優(yōu)的性能,但是使用起來必然非常麻煩。使用HTTP服務(wù)器的話,則非常簡單,因為WWW服務(wù)的開源軟件、庫眾多,而且客戶端使用瀏覽器或者一些JS頁面即可調(diào)試,缺點是其性能較低。

假設(shè)我們現(xiàn)在要為某種業(yè)務(wù)邏輯非常多變的領(lǐng)域,如企業(yè)業(yè)務(wù)應(yīng)用領(lǐng)域,或游戲服務(wù)器端領(lǐng)域,去設(shè)計一個遠程調(diào)用系統(tǒng),我們可能應(yīng)該如下選擇:

  1. 使用名字服務(wù)定位遠程對象:由于企業(yè)服務(wù)是需要高可用性的,使用名字服務(wù)能在查詢名字時識別和選擇可用性服務(wù)對象。J2EE方案中的EJB(企業(yè)JavaBean)就是用名字服務(wù)的。
  2. 使用IDL來生成接口定義:由于企業(yè)服務(wù)或游戲服務(wù),其開發(fā)語言可能不是統(tǒng)一的,又或者需要高性能的編程語言如C/C++,所以只能使用IDL。
  3. 使用混合式通信承載:雖然企業(yè)服務(wù)看起來無需在很復(fù)雜的網(wǎng)絡(luò)下運行,但是不同的企業(yè)的網(wǎng)絡(luò)環(huán)境又可能是千差萬別的,所以要做一個通用的系統(tǒng),最好還是不怕麻煩提供混合式的通信承載,這樣可以在TCP/UDP等各種協(xié)議中選擇。

 

責(zé)任編輯:未麗燕 來源: 騰訊云棲社區(qū)
相關(guān)推薦

2020-09-02 07:22:17

JavaScript插件框架

2020-11-02 08:19:18

RPC框架Java

2024-08-27 12:49:20

2023-09-08 08:22:30

2023-09-08 08:10:48

2024-11-20 13:18:21

2024-04-24 10:38:22

2013-08-14 10:48:23

實時計算流計算

2025-10-28 02:00:00

秒殺系統(tǒng)客戶端并發(fā)

2025-01-22 08:00:00

架構(gòu)秒殺系統(tǒng)Java

2022-07-18 08:02:16

秒殺系統(tǒng)后端

2024-06-17 11:59:39

2020-03-26 09:36:06

AB Test平臺的流量

2019-08-01 08:36:51

緩存系統(tǒng)并發(fā)

2024-06-21 08:15:25

2022-03-01 11:38:51

RPC框架后端

2015-07-28 14:35:40

2024-02-28 08:04:15

2022-09-13 08:01:58

短鏈服務(wù)哈希算法字符串

2013-07-01 11:01:22

API設(shè)計API
點贊
收藏

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

999精品一区| 91精品视频一区二区| 久久老女人爱爱| 国产精品视频一区国模私拍| 2014亚洲天堂| 91夜夜蜜桃臀一区二区三区| 日韩欧美高清视频| 中文字幕黄色大片| 手机av在线免费观看| 免费在线一区观看| 久久久久久久久国产精品| 91国模少妇一区二区三区| 福利一区三区| 色婷婷国产精品| 黄色污污在线观看| 国产在线观看高清视频| 国产a区久久久| 国产精自产拍久久久久久蜜| 日韩成人免费观看| 亚洲一本二本| 国产一区二区三区在线观看网站| 精品人妻无码中文字幕18禁| 高清在线一区| 狠狠综合久久av一区二区小说| 国产精品久久成人免费观看| 国产在线小视频| 成年人午夜久久久| 亚洲aaa激情| 在线中文字幕网站| 日韩午夜在线| 久久久这里只有精品视频| 国产人与禽zoz0性伦| 亚洲人成网亚洲欧洲无码| 欧美r级在线观看| 亚洲第一成肉网| 久久99国产精品二区高清软件| 欧美日韩亚洲精品内裤| 免费看毛片的网址| gogogogo高清视频在线| 国产精品乱人伦中文| 欧美日韩一区二区三| 欧美一区二区三区激情| 国产一区二区三区四区五区美女| 国产精品视频999| 日韩精品在线一区二区三区| 久久久国产亚洲精品| 性欧美暴力猛交69hd| 欧美成人精品一区二区免费看片| 99热在线成人| 日韩在线视频网站| 精品一区二区在线观看视频| 国产一区二区三区站长工具| 亚洲精品网站在线播放gif| 欧美双性人妖o0| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美变态凌虐bdsm| 69亚洲乱人伦| 久久porn| 亚洲精品视频二区| 成人乱码一区二区三区av| 日韩欧美天堂| 亚洲欧美www| 欧美午夜激情影院| 国产精品国产三级国产在线观看| xxxx性欧美| 极品魔鬼身材女神啪啪精品| 亚洲老妇激情| 欧美激情aaaa| 久久一区二区三区视频| 国产亚洲精品v| 日本不卡免费高清视频| 国产情侣呻吟对白高潮| 日本一不卡视频| 成人日韩在线电影| 亚洲欧美国产高清va在线播放| 成人午夜在线播放| 精品中文字幕一区| 成人福利在线| 亚洲伦理在线精品| 男人添女人荫蒂免费视频| 三妻四妾的电影电视剧在线观看| 色综合久久综合网欧美综合网| 国产免费999| 日韩欧美另类中文字幕| 亚洲精品国产欧美| 免费一级特黄3大片视频| 亚洲激情中文| 97在线精品国自产拍中文| 激情视频网站在线观看| 久99久精品视频免费观看| 999国产视频| 国产在线一在线二| 夜夜操天天操亚洲| 国模杨依粉嫩蝴蝶150p| 韩国一区二区三区视频| 亚洲精品久久久久久下一站| jizz18女人高潮| 极品少妇一区二区三区| 国产精品白嫩初高中害羞小美女| 国产三级视频在线播放| 91亚洲资源网| 欧洲美女和动交zoz0z| 热色播在线视频| 制服丝袜亚洲网站| 国产伦精品一区二区三区妓女| 久久国产影院| 欧美亚洲激情视频| 国产内射老熟女aaaa∵| 久久婷婷成人综合色| 中国女人做爰视频| 香蕉久久免费电影| 精品精品欲导航| 日本免费网站视频| 午夜在线精品| y111111国产精品久久婷婷| 国产成人天天5g影院在线观看| 亚洲午夜一二三区视频| 亚洲久久中文字幕| 免费毛片在线不卡| 久久久久久亚洲精品不卡| 91成年人视频| 亚洲国产经典视频| 2022亚洲天堂| 高清一区二区三区| 久久在线精品视频| 中文字幕日产av| 久久久不卡网国产精品二区| 国产精品国产亚洲精品看不卡| 国产欧美88| 日韩在线欧美在线国产在线| 午夜精品免费观看| 91捆绑美女网站| 毛片在线视频播放| 91麻豆精品激情在线观看最新| 日韩中文综合网| 97人妻精品视频一区| 国产欧美一区二区精品性色| 精品中文字幕av| 日本中文字幕在线一区| 性欧美xxxx视频在线观看| 亚洲精品无码久久久| 伊人夜夜躁av伊人久久| 黄色三级视频在线播放| 亚洲国产一成人久久精品| 成人a免费视频| 欧美日韩在线看片| 欧美精品v日韩精品v韩国精品v| 欧美激情久久久久久久| 久久国产乱子精品免费女| 日韩免费中文专区| 欧美一级免费| 久久精品小视频| 国产xxxx孕妇| 亚洲一二三四在线观看| 国产香蕉精品视频| 亚洲大胆av| 久久国产精品99久久久久久丝袜| 黄色污网站在线观看| 亚洲免费影视第一页| 国产精品第六页| 亚洲欧洲国产日本综合| 人妻精品久久久久中文字幕69| 欧美精品色网| 国产一区自拍视频| 悠悠资源网亚洲青| 亚洲性视频网址| 在线视频 91| 亚洲综合丝袜美腿| 男男做爰猛烈叫床爽爽小说 | 成人做爰免费视频免费看| 一区二区三区久久精品| 久久久精品三级| 久久丝袜视频| 国产成人拍精品视频午夜网站| 成人午夜电影在线观看| 在线播放91灌醉迷j高跟美女| 欧美 日韩 国产 一区二区三区| 国产不卡视频在线播放| 日韩少妇内射免费播放18禁裸乳| 精品一区在线| 成人精品一区二区三区电影免费| 日韩精品分区| 亚洲欧美国产精品专区久久| 亚洲天堂视频网| 亚洲综合激情另类小说区| 99久久免费看精品国产一区| 日韩电影一二三区| 粉嫩av一区二区三区天美传媒| 首页亚洲中字| 91丨九色丨国产在线| 国产乱妇乱子在线播视频播放网站| 日韩成人中文字幕| 一卡二卡三卡在线观看| 亚洲国产精品影院| 亚洲精品成人av久久| 国产不卡视频一区| 午夜精品在线免费观看| 国产精品va| 色狠狠久久av五月综合| 超碰97久久| 国产精品一区二区3区| 不卡的av影片| 最近2019中文免费高清视频观看www99 | 国产精品一区二区3区| 超碰97免费在线| www国产亚洲精品久久网站| 天堂√在线中文官网在线| 欧美顶级少妇做爰| 欧美一区二区三区久久久| 一区二区三区小说| 人人妻人人澡人人爽| 国产91富婆露脸刺激对白| 亚洲国产日韩欧美在线观看| 一区二区高清| 青青视频免费在线| 欧美a级成人淫片免费看| 欧美一区免费视频| 成人性生交大片免费看中文视频| 国产精品在线看| 性欧美hd调教| 97超级碰在线看视频免费在线看| av网址在线| 色狠狠av一区二区三区香蕉蜜桃| 视频一区二区在线播放| 欧美videossexotv100| 国产又黄又大又爽| 欧美色中文字幕| 欧美日韩一二三四区| 午夜在线电影亚洲一区| 久久黄色免费网站| 亚洲欧美经典视频| 国产午夜手机精彩视频| 国产精品久久99| 人妻少妇无码精品视频区| 91伊人久久大香线蕉| 亚洲激情 欧美| 国产精品 日产精品 欧美精品| 激情文学亚洲色图| 毛片一区二区三区| 91视频这里只有精品| 蜜臀av性久久久久蜜臀aⅴ流畅| www.国产区| 久久激情网站| 美女喷白浆视频| 日韩精品乱码av一区二区| 久久久精品在线视频| 新狼窝色av性久久久久久| 国产91在线视频观看| 乱人伦精品视频在线观看| 日韩av在线综合| 爽好多水快深点欧美视频| 99免费视频观看| 免费在线看成人av| 自拍偷拍一区二区三区四区| 激情国产一区二区 | 国产精品亚洲四区在线观看| 91网站在线免费观看| 天堂精品久久久久| 国产区欧美区日韩区| 日韩成人av在线资源| 欧美三日本三级少妇三99| 精品久久精品| 亚洲三级一区| 欧美视频成人| 妺妺窝人体色www在线小说| 欧美中文字幕| 日韩精品你懂的| 国产一区二区在线影院| 久久久久亚洲av片无码v| 成人激情黄色小说| wwwwww日本| 亚洲欧美影音先锋| 久久久久久久久久久97| 狠狠躁夜夜躁人人爽超碰91| a片在线免费观看| 91精品在线免费观看| 丰满岳乱妇国产精品一区| 精品亚洲一区二区三区在线播放| 啊v在线视频| 欧美精品生活片| 中老年在线免费视频| 国产在线一区二区三区| 澳门精品久久国产| 亚欧洲精品在线视频免费观看| 欧美在线影院| 激情网站五月天| 国产乱淫av一区二区三区| yy1111111| 中文字幕一区二区三区四区 | 朝桐光av一区二区三区| 国产精品私人自拍| 久久9999久久免费精品国产| 欧美性猛交xxxxxx富婆| 亚洲精华国产精华精华液网站| 亚洲色图美腿丝袜| 亚洲夜夜综合| 国产成人精品电影久久久| 中文字幕日韩在线| 亚洲春色在线视频| 亚洲每日在线| 精品国产鲁一鲁一区二区三区| 2020国产精品自拍| 日本裸体美女视频| 一本一道久久a久久精品综合蜜臀| 99久久精品国产一区二区成人| 亚洲片国产一区一级在线观看| 中文字幕中文字幕在线中高清免费版 | 亚洲国产精品嫩草影院久久| 黄色网页在线播放| 日本91av在线播放| 精品少妇一区| 大桥未久一区二区三区| 全国精品久久少妇| 中文字幕乱码在线| 一区二区三区中文免费| 亚洲综合一区中| 亚洲欧美日韩国产成人| а√在线天堂官网| 97超碰人人看人人| 999成人精品视频线3| 久久久久久久片| 91色porny在线视频| 国产精品 欧美 日韩| 欧美一级午夜免费电影| 在线免费av网站| 国产精品久久久久久久久久99| 中文字幕精品影院| 亚洲 自拍 另类小说综合图区| 国产传媒欧美日韩成人| 中文字幕av播放| 欧美挠脚心视频网站| 91啦中文在线| 国产精品观看在线亚洲人成网| 校园春色另类视频| 91猫先生在线| 99久久精品国产一区二区三区| 久久久久久久久久久久国产| 日韩欧美成人一区| 色呦呦在线视频| 91免费欧美精品| 亚洲色图国产| 免费国偷自产拍精品视频| 亚洲精品一二三区| 国内精品久久久久久久久久久| 另类图片亚洲另类| 精品国产鲁一鲁****| 97超碰免费观看| 国产乱码精品一品二品| 日韩一区二区三区四区在线| 日韩一区二区三区电影| 天天色天天射天天综合网| 91视频网页| 亚洲第一黄网| 野花社区视频在线观看| 在线观看欧美黄色| 一区二区三区视频网站| 成人黄色av网| 欧美成人首页| 影音先锋黄色资源| 欧美性猛交xxxx乱大交3| 九色在线视频蝌蚪| 国产日韩欧美另类| 国产精品theporn| 人妻大战黑人白浆狂泄| 欧美在线观看一区| 国产精品va在线观看视色| 97自拍视频| 美女诱惑一区| 色噜噜噜噜噜噜| 欧美一卡2卡三卡4卡5免费| 国产精品25p| 日韩三级电影免费观看| 国产一区二区三区在线观看免费| 日本免费在线播放| 亚洲人成在线免费观看| 自拍偷拍亚洲| 性欧美大战久久久久久久| 国产欧美日韩不卡| av免费在线观看不卡| 77777少妇光屁股久久一区| 欧美理论电影大全| 午夜福利三级理论电影| 日本道精品一区二区三区| 99自拍视频在线观看| 久久99精品久久久久久水蜜桃 | 亚洲国产一区二区a毛片| 欧美在线观看在线观看| 成人国产精品一区二区| 一区二区自拍| 亚洲激情图片网| 亚洲第一精品夜夜躁人人爽| 精品久久福利| 国精产品一区一区三区视频| 国产精品女同一区二区三区| 亚洲第一色视频| 国产精品久久久久高潮| 亚洲视屏一区| 午夜国产福利视频| 亚洲欧美国产高清va在线播| 97色成人综合网站|