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

深入理解RPC框架的序列化方案

開(kāi)發(fā) 架構(gòu)
json需要內(nèi)存去解析能理解,但為什么json序列化還需要磁盤開(kāi)銷啊。json序列化的二進(jìn)制數(shù)據(jù)在體量比其他序列化方法小一些吧,可以減少帶寬和流量?

1 為什么需要序列化?

網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)須是二進(jìn)制數(shù)據(jù),但調(diào)用方請(qǐng)求的出入?yún)?shù)都是對(duì)象:

  • ? 對(duì)象不能直接在網(wǎng)絡(luò)傳輸,需提前轉(zhuǎn)成可傳輸?shù)亩M(jìn)制,且要求可逆,即“序列化”將對(duì)象轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
  • ? 這時(shí),服務(wù)提供方就能正確從二進(jìn)制數(shù)據(jù)中分割出不同請(qǐng)求,同時(shí)根據(jù)請(qǐng)求類型和序列化類型,把二進(jìn)制的消息體逆向還原成請(qǐng)求對(duì)象,即“反序列化”將二進(jìn)制轉(zhuǎn)換為對(duì)象

圖片

序列化與反序列化

RPC框架為何需要序列化?

回想RPC通信流程:

圖片

RPC通信流程圖

2 序列化方式

2.1 JDK原生序列化

案例:

import java.io.*;

public class Student implements Serializable {
//學(xué)號(hào)
private int no;
//姓名
private String name;

public int getNo() {
return no;
}

public void setNo(int no) {
this.no = no;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Student{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}

public static void main(String[] args) throws IOException, ClassNotFoundException {
String home = System.getProperty("user.home");
String basePath = home + "/Desktop";
FileOutputStream fos = new FileOutputStream(basePath + "student.dat");
Student student = new Student();
student.setNo(100);
student.setName("TEST_STUDENT");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(student);
oos.flush();
oos.close();

FileInputStream fis = new FileInputStream(basePath + "student.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Student deStudent = (Student) ois.readObject();
ois.close();

System.out.println(deStudent);

}
}
  • ? 序列化具體由ObjectOutputStream完成
  • ? 反序列化的具體實(shí)現(xiàn)是由ObjectInputStream完成

JDK序列化過(guò)程:

圖片

ObjectOutputStream序列化過(guò)程圖

序列化過(guò)程就是在讀取對(duì)象數(shù)據(jù)的時(shí)候,不斷加入一些特殊分隔符,這些特殊分隔符用于在反序列化過(guò)程中截?cái)嘤谩?/p>

  • ? 頭部數(shù)據(jù),聲明序列化協(xié)議、序列化版本,用于高低版本向后兼容
  • ? 對(duì)象數(shù)據(jù)主要包括類名、簽名、屬性名、屬性類型及屬性值,當(dāng)然還有開(kāi)頭結(jié)尾等數(shù)據(jù),除了屬性值屬于真正的對(duì)象值,其他都是為了反序列化用的元數(shù)據(jù)
  • ? 存在對(duì)象引用、繼承的情況下,就是遞歸遍歷“寫對(duì)象”邏輯

將對(duì)象的類型、屬性類型、屬性值按固定格式寫到二進(jìn)制字節(jié)流中來(lái)完成序列化,再按固定格式讀出對(duì)象的類型、屬性類型、屬性值,通過(guò)這些信息重建一個(gè)新的對(duì)象,完成反序列化。

2.2 JSON

典型KV方式,沒(méi)有數(shù)據(jù)類型,是一種文本型序列化框架。

  • ? JSON進(jìn)行序列化的額外空間開(kāi)銷較大
  • ? JSON沒(méi)有類型,但像Java這種強(qiáng)類型語(yǔ)言,需通過(guò)反射統(tǒng)一解決,性能不太好

所以如果RPC框架選用JSON序列化,服務(wù)提供者與服務(wù)調(diào)用者之間傳輸?shù)臄?shù)據(jù)量要相對(duì)較小。

2.3 Hessian

動(dòng)態(tài)類型、二進(jìn)制、緊湊的,并且可跨語(yǔ)言移植的一種序列化框架。比JDK、JSON更加緊湊,性能上要比JDK、JSON序列化高效很多,而且生成的字節(jié)數(shù)更小。

使用代碼示例如下:

Student student = new Student();
student.setNo(101);
student.setName("HESSIAN");

//把student對(duì)象轉(zhuǎn)化為byte數(shù)組
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Hessian2Output output = new Hessian2Output(bos);
output.writeObject(student);
output.flushBuffer();
byte[] data = bos.toByteArray();
bos.close();

//把剛才序列化出來(lái)的byte數(shù)組轉(zhuǎn)化為student對(duì)象
ByteArrayInputStream bis = new ByteArrayInputStream(data);
Hessian2Input input = new Hessian2Input(bis);
Student deStudent = (Student) input.readObject();
input.close();

System.out.println(deStudent);

相對(duì)于JDK、JSON,由于Hessian更加高效,生成的字節(jié)數(shù)更小,有非常好的兼容性和穩(wěn)定性,所以Hessian更加適合作為RPC框架遠(yuǎn)程通信的序列化協(xié)議。

但Hessian本身也有問(wèn)題,官方版本對(duì)Java里面一些常見(jiàn)對(duì)象的類型不支持,比如:

  •  Linked系列,LinkedHashMap、LinkedHashSet等,但是可以通過(guò)擴(kuò)展CollectionDeserializer類修復(fù)
  •  Locale類,可以通過(guò)擴(kuò)展ContextSerializerFactory類修復(fù)
  • Byte/Short反序列化的時(shí)候變成Integer

2.4 Protobuf

Protobuf 是 Google 公司內(nèi)部的混合語(yǔ)言數(shù)據(jù)標(biāo)準(zhǔn),是一種輕便、高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)序列化,支持Java、Python、C++、Go等語(yǔ)言。Protobuf使用的時(shí)候需要定義IDL(Interface description language),然后使用不同語(yǔ)言的IDL編譯器,生成序列化工具類,它的優(yōu)點(diǎn)是:

  •  序列化后體積相比 JSON、Hessian小很多;
  • IDL能清晰地描述語(yǔ)義,所以足以幫助并保證應(yīng)用程序之間的類型不會(huì)丟失,無(wú)需類似 XML 解析器;
  • 序列化反序列化速度很快,不需要通過(guò)反射獲取類型;
  • 消息格式升級(jí)和兼容性不錯(cuò),可以做到向后兼容。

使用代碼示例如下:

/**
*
* // IDl 文件格式
* synax = "proto3";
* option java_package = "com.test";
* option java_outer_classname = "StudentProtobuf";
*
* message StudentMsg {
* //序號(hào)
* int32 no = 1;
* //姓名
* string name = 2;
* }
*
*/

StudentProtobuf.StudentMsg.Builder builder = StudentProtobuf.StudentMsg.newBuilder();
builder.setNo(103);
builder.setName("protobuf");

//把student對(duì)象轉(zhuǎn)化為byte數(shù)組
StudentProtobuf.StudentMsg msg = builder.build();
byte[] data = msg.toByteArray();

//把剛才序列化出來(lái)的byte數(shù)組轉(zhuǎn)化為student對(duì)象
StudentProtobuf.StudentMsg deStudent = StudentProtobuf.StudentMsg.parseFrom(data);

System.out.println(deStudent);

Protobuf 非常高效,但是對(duì)于具有反射和動(dòng)態(tài)能力的語(yǔ)言來(lái)說(shuō),這樣用起來(lái)很費(fèi)勁,這一點(diǎn)就不如Hessian,比如用Java的話,這個(gè)預(yù)編譯過(guò)程不是必須的,可以考慮使用Protostuff。

Protostuff不需要依賴IDL文件,可以直接對(duì)Java領(lǐng)域?qū)ο筮M(jìn)行反/序列化操作,在效率上跟Protobuf差不多,生成的二進(jìn)制格式和Protobuf是完全相同的,可以說(shuō)是一個(gè)Java版本的Protobuf序列化框架。但在使用過(guò)程中,我遇到過(guò)一些不支持的情況,也同步給你:

  • ? 不支持null;
  • ? ProtoStuff不支持單純的Map、List集合對(duì)象,需要包在對(duì)象里面。

3 RPC序列化選型

3.1 性能和效率

3.2 空間開(kāi)銷

即序列化之后的二進(jìn)制數(shù)據(jù)的體積大小。序列化后的字節(jié)數(shù)據(jù)體積越小,網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量就越小,傳輸數(shù)據(jù)的速度也就越快,由于RPC是遠(yuǎn)程調(diào)用,那么網(wǎng)絡(luò)傳輸?shù)乃俣葘⒅苯雨P(guān)系到請(qǐng)求響應(yīng)的耗時(shí)。

3.3 通用性和兼容性

某類型為集合類的入?yún)⒎?wù)調(diào)用者不能解析了,服務(wù)提供方將入?yún)㈩惣右粋€(gè)屬性之后服務(wù)調(diào)用方不能正常調(diào)用,升級(jí)了RPC版本后發(fā)起調(diào)用時(shí)報(bào)序列化異常…

通用性和兼容性的優(yōu)先級(jí)考慮很高,直接關(guān)系到服務(wù)調(diào)用穩(wěn)定性和可用率。看重這種序列化協(xié)議在版本升級(jí)后的兼容性,是否支持更多的對(duì)象類型,是否跨平臺(tái)、跨語(yǔ)言,是否有很多人已用過(guò)并踩過(guò)很多坑,其次考慮性能、效率和空間開(kāi)銷。

3.4 安全性

JDK原生序列化存在漏洞。如果序列化存在安全漏洞,線上服務(wù)可能被入侵:

圖片

首選Hessian與Protobuf,性能、時(shí)間開(kāi)銷、空間開(kāi)銷、通用性、兼容性和安全性上,都滿足要求:

  • ? Hessian使用更方便,在對(duì)象的兼容性上更好
  • ? Protobuf則更加高效,更通用

4 FAQ

4.1 對(duì)象構(gòu)造得太復(fù)雜

屬性很多,并且存在多層的嵌套,比如A對(duì)象關(guān)聯(lián)B對(duì)象,B對(duì)象又聚合C對(duì)象,C對(duì)象又關(guān)聯(lián)聚合很多其他對(duì)象,對(duì)象依賴關(guān)系過(guò)于復(fù)雜。

序列化框架在序列化與反序列化對(duì)象時(shí),對(duì)象越復(fù)雜就越浪費(fèi)性能,消耗CPU,這會(huì)嚴(yán)重影響RPC框架整體的性能。

4.2 對(duì)象太龐大

RPC請(qǐng)求經(jīng)常超時(shí),排查后發(fā)現(xiàn)他們的入?yún)?duì)象非常得大,比如為一個(gè)大List或者大Map,序列化之后字節(jié)長(zhǎng)度達(dá)到了上兆字節(jié)。這種情況同樣會(huì)嚴(yán)重地浪費(fèi)性能、CPU,并且序列化一個(gè)如此大的對(duì)象是很耗費(fèi)時(shí)間的,這肯定會(huì)直接影響到請(qǐng)求耗時(shí)。

4.3 使用序列化框架不支持的類作為入?yún)㈩?/h3>

如Hessian天然不支持LinkHashMap、LinkedHashSet等,而且大多數(shù)情況下最好不要使用第三方集合類,如Guava中的集合類,很多開(kāi)源的序列化框架都是優(yōu)先支持編程語(yǔ)言原生的對(duì)象。因此如果入?yún)⑹羌项悾瑧?yīng)盡量選用原生的、最為常用的集合類,如HashMap、ArrayList。

4.4 對(duì)象有復(fù)雜繼承關(guān)系

序列化對(duì)象時(shí)會(huì)將對(duì)象屬性一一序列化,當(dāng)有繼承關(guān)系時(shí),會(huì)不停尋找父類,遍歷屬性。就像問(wèn)題1,對(duì)象關(guān)系越復(fù)雜,越浪費(fèi)性能。

在RPC框架的使用過(guò)程中,盡量構(gòu)建簡(jiǎn)單的對(duì)象作為入?yún)⒑头祷刂祵?duì)象,避免上述問(wèn)題。

5 總結(jié)

使用RPC框架的過(guò)程中,我們構(gòu)造入?yún)ⅰ⒎祷刂祵?duì)象,主要記住以下幾點(diǎn):

  1. 1. 對(duì)象要盡量簡(jiǎn)單,沒(méi)有太多的依賴關(guān)系,屬性不要太多,盡量高內(nèi)聚;
  2. 2. 入?yún)?duì)象與返回值對(duì)象體積不要太大,更不要傳太大的集合;
  3. 3. 盡量使用簡(jiǎn)單的、常用的、開(kāi)發(fā)語(yǔ)言原生的對(duì)象,尤其是集合類;
  4. 4. 對(duì)象不要有復(fù)雜的繼承關(guān)系,最好不要有父子類的情況。

實(shí)際上,雖然RPC框架可以讓我們發(fā)起遠(yuǎn)程調(diào)用就像調(diào)用本地一樣,但在RPC框架的傳輸過(guò)程中,入?yún)⑴c返回值的根本作用就是用來(lái)傳遞信息的,為了提高RPC調(diào)用整體的性能和穩(wěn)定性,我們的入?yún)⑴c返回值對(duì)象要構(gòu)造得盡量簡(jiǎn)單。

6 FAQ

RPC框架在序列化框架的選型上,你認(rèn)為還需要考慮哪些因素?你還知道哪些優(yōu)秀的序列化框架,它們又是否適合在RPC調(diào)用中使用?

序列化一般用在協(xié)議里面的payload里。

Redis使用的RESP,在做序列化時(shí)也是會(huì)增加很多冗余的字符,但它勝在實(shí)現(xiàn)簡(jiǎn)單、可讀性強(qiáng)易于理解。

JSON和XML使用字符串表示所有的數(shù)據(jù),對(duì)于非字符數(shù)據(jù)來(lái)說(shuō),字面量表達(dá)會(huì)占用很多額外的存儲(chǔ)空間,并且會(huì)嚴(yán)重受到數(shù)值大小和精度的影響。一個(gè)32位浮點(diǎn)數(shù) 1234.5678 在內(nèi)存中占用 4 bytes 空間,如果存儲(chǔ)為 utf8 ,則需要占用 9 bytes空間,在JS這樣使用utf16表達(dá)字符串的環(huán)境中,需要占用 18 bytes空間。使用正則表達(dá)式進(jìn)行數(shù)據(jù)解析,在面對(duì)非字符數(shù)據(jù)時(shí)顯得十分低效,不僅要耗費(fèi)大量的運(yùn)算解析數(shù)據(jù)結(jié)構(gòu),還要將字面量轉(zhuǎn)換成對(duì)應(yīng)的數(shù)據(jù)類型。

在面對(duì)海量數(shù)據(jù)時(shí),這種格式本身就能夠成為整個(gè)系統(tǒng)的IO與計(jì)算瓶頸,甚至直接overflow。

常見(jiàn)的序列化協(xié)議有:xml json protobuf jdk等 xml和json可讀性好,序列化后空間大,性能差,而且json序列化后無(wú)類型,需要反射獲取對(duì)象類型。而protobuf則是可讀性差點(diǎn),序列化后占用空間小,性能好,不需要反序列化獲取屬性類型等優(yōu)點(diǎn)。對(duì)性能要求高的原則protobuf比較好點(diǎn)

為什么JSON的額外開(kāi)銷大呢?是因?yàn)榇嬖诖罅康膿Q行嗎

最明顯的就是你說(shuō)的數(shù)據(jù)包大,因?yàn)樽址鄬?duì)二進(jìn)制更占空間。

json需要內(nèi)存去解析能理解,但為什么json序列化還需要磁盤開(kāi)銷啊。json序列化的二進(jìn)制數(shù)據(jù)在體量比其他序列化方法小一些吧,可以減少帶寬和流量?

說(shuō)的如果json數(shù)據(jù)存儲(chǔ)在磁盤上,json字節(jié)數(shù)相對(duì)其他數(shù)據(jù)都偏大。

責(zé)任編輯:武曉燕 來(lái)源: JavaEdge
相關(guān)推薦

2012-02-14 10:29:02

Java

2023-06-29 08:41:02

2023-11-13 16:33:46

2011-06-01 14:50:48

2009-08-25 14:43:26

C#序列化和反序列化

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過(guò)濾器

2010-06-01 15:25:27

JavaCLASSPATH

2021-10-20 08:05:18

Java 序列化 Java 基礎(chǔ)

2021-10-26 17:52:52

Android插件化技術(shù)

2021-10-20 07:18:50

Java 序列化漏洞

2025-01-13 13:00:00

Go網(wǎng)絡(luò)框架nbio

2011-06-01 15:05:02

序列化反序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2012-11-22 10:11:16

LispLisp教程

2019-09-09 09:05:59

圖片框架懶加載

2018-03-19 10:20:23

Java序列化反序列化

2009-09-25 09:14:35

Hibernate日志

2021-02-17 11:25:33

前端JavaScriptthis

2023-10-19 11:12:15

Netty代碼
點(diǎn)贊
收藏

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

中文字幕日韩精品在线观看| 欧美极品视频在线观看| 人妻精品一区二区三区| 国产日韩一区二区三区在线| 亚洲美女免费精品视频在线观看| av视屏在线播放| 二区三区四区高清视频在线观看| 亚洲乱码视频| 国产午夜精品视频| 农村妇女精品一二区| 久久综合网导航| 337p粉嫩大胆色噜噜噜噜亚洲| 国产成人自拍视频在线观看| 亚洲一级理论片| 精品国产18久久久久久洗澡| 欧美日韩在线视频首页| 日韩欧美99| 好吊视频一二三区| 久久精品国产精品亚洲红杏| 午夜欧美大片免费观看| 亚洲欧美精品久久| 秋霞影院一区| 色综合久久中文字幕综合网| 日本a级片在线播放| melody高清在线观看| 精品一区二区久久| 国产精品9999| 国产精品成人aaaa在线| 成人精品中文字幕| 亚洲精品在线电影| 日韩欧美xxxx| 手机在线观看av网站| 日韩美女视频一区二区| 亚洲一区二区中文字幕| 中文字幕第三页| 性高湖久久久久久久久| 久久免费高清视频| 国产女人18水真多毛片18精品| 国内精品久久久久久久影视简单| 欧美一级欧美三级| 亚洲高清视频中文字幕| 欧美高清性xxxxhd| 天天综合天天综合| 国产一区二区成人久久免费影院 | 国产精品成人aaaaa网站| 久久久久久成人网| 深爱激情久久| 亚洲男人的天堂网站| 人妻 日韩 欧美 综合 制服| 亚洲性视频在线| 色哟哟精品一区| 国产亚洲天堂网| 麻豆免费在线| 性做久久久久久久免费看| 日本黄大片在线观看| 三级资源在线| 一区二区三区欧美| 国产内射老熟女aaaa| www久久日com| 亚洲精品成人在线| 欧美一级中文字幕| 91破解版在线观看| 五月激情六月综合| 激情综合在线观看| 成人美女大片| 91久久精品一区二区三区| 免费在线观看的毛片| 日本精品裸体写真集在线观看| 欧美在线一区二区| 我看黄色一级片| 777午夜精品电影免费看| 在线精品视频免费观看| 国内外成人免费在线视频| 最新亚洲国产| 欧美白人最猛性xxxxx69交| 亚洲成年人在线观看| 香蕉大人久久国产成人av| 欧美日韩综合在线| 中文字幕人妻无码系列第三区| 草草视频在线一区二区| 日韩av影院| 亚洲成人av电影| 国产高清不卡无码视频| аⅴ资源天堂资源库在线| 亚洲午夜久久久久中文字幕久| 男人c女人视频| segui88久久综合| 91国偷自产一区二区使用方法| 欧美三级理论片| 色悠久久久久综合先锋影音下载| 亚洲精品国产福利| 成人18视频免费69| 在线 亚洲欧美在线综合一区| 97av在线视频| 中文无码av一区二区三区| 美腿丝袜在线亚洲一区| 91黄色精品| 精品亚洲综合| 亚洲精品国产视频| 无遮挡又爽又刺激的视频| 97色婷婷成人综合在线观看| 精品乱码亚洲一区二区不卡| xxxxx在线观看| 欧美独立站高清久久| 欧美国产第一页| 亚洲男人的天堂在线视频| 日本在线不卡一区| 97超碰人人看人人| 神马午夜在线观看| 亚洲欧美日本韩国| 在线观看免费成人av| 亚洲视频精选| xxxxx成人.com| 国产精品日日夜夜| 久久久久久9| 狠狠色狠狠色综合人人| 蜜桃视频在线观看免费视频网站www| 欧美日韩激情视频| 日本成人在线免费观看| 欧美日韩色图| 2019中文字幕免费视频| 99产精品成人啪免费网站| 不卡视频一二三四| 亚洲狠狠婷婷综合久久久| 秋霞在线一区二区| 天堂av电影在线观看| 国产无遮挡一区二区三区毛片日本| 亚洲精品一区国产精品| 欧美男男video| 5566中文字幕一区二区电影| 亚洲av永久无码精品| 手机在线电影一区| 国产精品久久久久久一区二区| 天天舔天天干天天操| 亚洲国产日韩一级| 中文国产在线观看| 国产成人精品免费视| 97精品一区二区三区| 国产片高清在线观看| 国产精品美女久久久久久久网站| 激情综合网俺也去| 国产91精品对白在线播放| 91国内在线视频| 99久久99久久久精品棕色圆| 亚洲欧洲日本在线| 欧美wwwwwww| 日韩av网址大全| 日本电影亚洲天堂| 久久手机免费观看| 精品久久久一区| 国产艳俗歌舞表演hd| 欧美精品日本| 国产精品国产精品| 欧美aaaaaaa| 亚洲成成品网站| 亚洲国产成人精品激情在线| 99精品久久久久久| 国产免费黄视频| 欧美激情极品| 91成品人片a无限观看| 亚洲免费黄色片| 亚洲影院免费观看| 国产人妻黑人一区二区三区| 亚洲激情一区| 欧美一区二区三区四区夜夜大片| 国产色播av在线| 亚洲国产欧美一区| 在线永久看片免费的视频| 国产三级一区二区| av免费一区二区| 99re6这里只有精品| 91在线视频九色| 蜜臀av无码一区二区三区| 狠狠操一区二区三区| 亚洲欧美日韩国产中文| 成人黄色片在线观看| 久久久另类综合| 日韩视频在线免费看| 久久一区二区三区喷水| 99久re热视频这里只有精品6| av片在线观看永久免费| 亚洲精品美女久久| 国产99久久久久久免费看| 亚洲私人影院在线观看| 久久久精品视频国产| 亚洲国产99| 视频一区二区三| 欧美性生活一级| 欧美交受高潮1| 成年人在线视频免费观看| 在线播放/欧美激情| 亚州国产精品视频| 2023国产精品自拍| 性生活一级大片| 久久久xxx| 91网站在线观看免费| 曰本一区二区三区视频| 亚洲一区二区三区在线免费观看| 亚洲福利影院| 国产亚洲精品va在线观看| 亚洲网站免费观看| 精品免费在线观看| 中文字幕资源站| 91蜜桃网址入口| 特级黄色片视频| 日韩国产精品久久久久久亚洲| 日本道在线视频| 三上悠亚免费在线观看| 日韩在线一区二区三区四区| 国产精品国产馆在线真实露脸| 中国极品少妇xxxx| 久久永久免费| 国产高清av在线播放| 99久久精品国产亚洲精品| 免费av在线一区二区| 午夜免费欧美电影| 91九色国产在线| 粉嫩91精品久久久久久久99蜜桃| 国语对白做受69| av大全在线| 色久欧美在线视频观看| 欧美性孕妇孕交| 日韩欧美国产一区二区在线播放 | 97caopron在线视频| 欧美嫩在线观看| 天天爽夜夜爽夜夜爽精品| 成人动漫av在线| 国产精品19p| 久久99久久99精品免视看婷婷 | 日韩午夜电影| 一区精品在线| 综合亚洲色图| av色综合网| 国产福利亚洲| 国产经典一区二区| 日韩免费福利视频| 欧洲永久精品大片ww免费漫画| 51精品视频| 久久人人爽人人爽人人片av高清| 影音先锋中文在线视频| 久久精彩免费视频| 日本人妻丰满熟妇久久久久久| 日韩欧美专区在线| 国产夫妻性生活视频| 欧美日韩一区不卡| 中文区中文字幕免费看| 欧美日韩国产精选| 在线观看免费视频一区| 欧美日韩成人综合在线一区二区| 在线观看日韩一区二区| 欧美精品一卡二卡| 99热这里只有精| 日韩欧美一区二区免费| 成人午夜视频一区二区播放| 亚洲成年人影院在线| 日本久久一级片| 亚洲国产精品专区久久| 神马亚洲视频| 亚洲精品电影网在线观看| 手机福利小视频在线播放| 日韩毛片在线观看| 国产自产一区二区| 精品久久国产字幕高潮| www.色日本| 日韩精品免费综合视频在线播放 | 欧美不卡在线播放| 国产精品久久777777毛茸茸 | 香蕉视频污视频| 国产乱子轮精品视频| caopor在线| 亚洲图片88| 亚洲国产一区二区三区在线观看| 国产欧美久久久精品免费| 欧美成人三级电影在线| 深夜福利视频网站| 亚洲性日韩精品一区二区| 最新av网站在线观看| 久久精品电影网站| 欧美巨大xxxx做受沙滩| 欧美亚洲一级片| 国产在视频一区二区三区吞精| 亚洲综合在线小说| 久久久久影视| 欧美精品一区二区视频 | 亚洲欧美日韩在线一区| 欧洲毛片在线| 蜜月aⅴ免费一区二区三区| 欧洲美女少妇精品| 高清一区二区三区日本久| 偷拍自拍在线看| 欧美性一区二区三区| 日韩欧国产精品一区综合无码| 国产不卡在线观看| 成年永久一区二区三区免费视频| 肥熟一91porny丨九色丨| 欧美做受69| 婷婷精品国产一区二区三区日韩 | 四虎国产精品永久在线国在线| 国产aⅴ精品一区二区三区黄| 国产一区网站| 欧美极品少妇无套实战| 亚洲最黄网站| 91看片破解版| 久久综合视频网| 特级片在线观看| 狠狠色香婷婷久久亚洲精品| 国产乱码77777777| 日韩欧美色综合网站| av大片在线看| 55夜色66夜色国产精品视频| 精品视频一区二区三区在线观看| 成人免费网站在线看| 在线日韩一区| 国产成人三级视频| 日韩二区三区在线观看| 麻豆短视频在线观看| 最新不卡av在线| 无码人妻一区二区三区线| 日韩欧美国产成人一区二区| 青青久在线视频免费观看| 欧美高清视频免费观看| 天堂资源在线| 精品日本一区二区三区| 国产精品99免费看| 天天操精品视频| 国产精品美女午夜爽爽| 国产mv免费观看入口亚洲| 超碰成人在线免费| 永久免费看av| 毛片av一区二区| 中字幕一区二区三区乱码| 欧美日韩另类视频| 秋霞欧美在线观看| 久久99国产精品自在自在app| 黑人一区二区三区| 视频一区二区在线| 亚洲欧美清纯在线制服| 欧美激情一区二区三区p站| 亚洲人成小说网站色在线 | 老头老太做爰xxx视频| 黑人狂躁日本妞一区二区三区| 国产91免费在线观看| 欧美裸身视频免费观看| 日韩一区网站| 777久久精品一区二区三区无码 | 欧美三级免费观看| 外国精品视频在线观看 | 亚洲精品福利资源站| av今日在线| 蜜桃999成人看片在线观看| 国产精品一区亚洲| 中文在线一区二区三区| 狠狠躁夜夜躁人人躁婷婷91 | 免费看一级视频| 亚洲欧美日本另类| www.成人影院| 欧美在线播放一区| 国产精品视频| 欧美人与性囗牲恔配| 欧美日韩在线不卡| 黄色成人影院| 国产精品美女主播在线观看纯欲| 日韩免费高清| 色综合天天色综合| 亚洲日本电影在线| 女人18毛片一区二区三区| 91成人在线播放| 欧美亚洲高清| 欧美熟妇另类久久久久久多毛| 亚洲一区二区高清| 亚洲风情第一页| 26uuu亚洲伊人春色| 欧美日韩一二| 三级av免费看| 精品日本美女福利在线观看| 岛国大片在线观看| 蜜臀av性久久久久蜜臀aⅴ | 国产亚洲一区二区在线| 日韩一区二区三区免费视频| 日本视频一区在线观看| 国产在线精品一区二区夜色| 香蕉视频一区二区| 亚洲精品www| 外国成人直播| 中文字幕99| 国产98色在线|日韩| 国产尤物在线视频| 国产午夜精品免费一区二区三区 | 国产精品日韩高清| 一本久道综合久久精品| 国产女主播喷水高潮网红在线| 欧美视频一区二| 日本三级韩国三级欧美三级| 精品久久中出| 奇米色777欧美一区二区| 久久97人妻无码一区二区三区| 亚洲性av网站| 一区二区三区亚洲变态调教大结局 | 日韩美女在线| 国产午夜伦鲁鲁|