国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

聊聊字節(jié)跳動 Node.js RPC 的設(shè)計實現(xiàn)

共 10167字,需瀏覽 21分鐘

 ·

2021-07-27 12:04

點擊上方 程序員成長指北,關(guān)注公眾號

回復1,加入高級Node交流群

背景

大家好,我們是字節(jié)跳動 Web Infra 團隊,目前團隊主要專注的方向包括現(xiàn)代 Web 開發(fā)解決方案、低代碼搭建、Serverless、跨端解決方案、終端基礎(chǔ)體驗、ToB 等等。Node.js 基礎(chǔ)設(shè)施建設(shè)是我們負責的方向之一,包括但不限于:

  • 服務(wù)發(fā)現(xiàn):Consul
  • 服務(wù)治理:Logger、Metrics、Trace
  • 服務(wù)調(diào)用:HTTP ( Fetch )、RPC ( Thrift )
  • 數(shù)據(jù)庫:MySQL ( Sequelize / TypeORM )、Redis、ClickHouse
  • 消息隊列: Kafka、RocketMQ
  • 結(jié)合框架,提供遵循公司流量調(diào)度等規(guī)范的 Node.js 插件
  • 支持 Node.js、Golang 等后端語言的性能分析平臺
  • 維護 Node.js 應用的容器鏡像

在 2021 年上半年,由于現(xiàn)有的 Node.js RPC 實現(xiàn)逐漸跟不上字節(jié)跳動業(yè)務(wù)發(fā)展節(jié)奏,我們決定對其進行重構(gòu),在本文將會介紹到 RPC 重構(gòu)過程中的設(shè)計思路以及落地中所遇到的問題。

什么是 RPC?

RPC ( Remote Procedure Call ) 是一種通用的網(wǎng)絡(luò)調(diào)用方式,其廣泛應用于后端服務(wù)之間,像 Dubbo、SOAP、Thrift、gRPC、RESTful 等,從廣義上來說都是一種 RPC 的實現(xiàn)。幾乎可以這么說,只要公司達到一定量級,其后端服務(wù)之間必定會采用 RPC 而非簡單 HTTP 的形式來進行互相調(diào)用。因此,對于想做全?;蛘吆蠖?Node.js 的同學來說,早點了解與使用 RPC 是非常有必要的。

既然 RPC 這么重要,那么到底該怎么去理解它呢?

按照上面的說法,RPC 是一種通用的網(wǎng)絡(luò)調(diào)用方式,是一個抽象的概念,那么直接對其進行理解是行不通的。所以我們需要把 RPC 映射到我們的現(xiàn)實生活中,這樣就會發(fā)現(xiàn),我們的每一次交談、打字、打電話其實都是一次 “RPC 調(diào)用”,RPC 是一種 “溝通” 方式。

現(xiàn)狀 & 需求

在字節(jié)跳動內(nèi),由于各種原因,存在有多種序列化協(xié)議、網(wǎng)絡(luò)協(xié)議,這導致我們沒有辦法直接使用開源的 Apache Thrift、gRPC,只能選擇自建 RPC 實現(xiàn)。而對于 RPC 實現(xiàn),我們希望可以做到以下幾點:

  • 支持多種序列化協(xié)議,如 Thrift、Protobuf、JSON。
  • 支持多種網(wǎng)絡(luò)協(xié)議,如 TCP、HTTP、HTTP/2。
  • 盡量復用老代碼。

設(shè)計 RPC

DDD (Domain Driven Design)

在開始介紹之前,考慮到部分同學可能對于后面使用到的概念不太了解,所以我們需要先科普一下使用到的方法論,有相關(guān)經(jīng)驗的同學可以跳過這一節(jié)。

摘自 Wikipedia

Domain-driven design ( DDD ) is the concept that the structure and language of software code ( class names, class methods, class variables ) should match the business domain.

Domain-driven design is predicated on the following goals:

  • placing the project's primary focus on the core domain and domain logic;
  • basing complex designs on a model of the domain;
  • initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems.

領(lǐng)域驅(qū)動設(shè)計 (DDD) 是一種將代碼結(jié)構(gòu)、命名與業(yè)務(wù)領(lǐng)域概念相匹配的方法論。領(lǐng)域驅(qū)動設(shè)計基于以下幾個目標:

  • 將項目重心放在核心領(lǐng)域與領(lǐng)域邏輯上
  • 以領(lǐng)域模型為基礎(chǔ)進行復雜設(shè)計
  • 讓技術(shù)專家與領(lǐng)域?qū)<疫M行合作,以迭代的方式來解決特性領(lǐng)域的概念模型

說白了就是由在某個領(lǐng)域摸爬滾打了多年的專家來梳理業(yè)務(wù)邏輯,與技術(shù)人員合作設(shè)計領(lǐng)域模型,然后再由技術(shù)人員根據(jù)領(lǐng)域模型進行實現(xiàn)的一套軟件設(shè)計與迭代方法。

在下文中,我們將會利用領(lǐng)域驅(qū)動設(shè)計的思路來探討 RPC 該如何進行設(shè)計。

分解 RPC

在進行設(shè)計之前,我們必須要先對 RPC 進行分解,了解其基礎(chǔ)是什么?

上文說過了,RPC 是一個抽象的概念,所以直接分析其基礎(chǔ)是行不通的,只能透過現(xiàn)實場景來進行分析。就拿交談這個簡單場景來說:我們跟什么人、說什么話,其實都是不確定的,但是可以確定的是,我們說話的聲音是通過空氣振動傳達給對方的 ( 物理原理 ),如果沒有空氣振動,那么聲音也傳達不到對方的耳朵 ( 真空環(huán)境 )。所以可以得出空氣振動 ( 傳播途徑 ) 是交談的一個重要基礎(chǔ)。

除此之外,其實還有一個很重要的基礎(chǔ),那就是語言互通。如果語言不通,那么驢唇不對馬嘴也是很正常的事情。所以我們見到中國人會下意識的說普通話,見到外國人會下意識的說英語,見到家里人也會下意識的說方言 (如果有的話)。

從上面的推斷,我們可以得到交談的兩個重要基礎(chǔ):

  • 傳播途徑:存在空氣震動。
  • 語言互通:同樣說普通話 / 英語 / 方言。

同理的,在 RPC 的場景下,也必然會有它們的一席之地。

其實在 RPC 中,網(wǎng)絡(luò)協(xié)議就相當于傳播途徑,用于傳輸數(shù)據(jù),而序列化協(xié)議則相當于語言,用于轉(zhuǎn)換傳輸?shù)臄?shù)據(jù)。所以我們可以做一個假設(shè):對于一個 RPC 實現(xiàn)來說,有兩個很重要的基礎(chǔ)因素:

  • 網(wǎng)絡(luò)協(xié)議:用于傳輸數(shù)據(jù)。
  • 序列化協(xié)議:用于轉(zhuǎn)換數(shù)據(jù)。

模型構(gòu)建

接下來,我們就根據(jù)上面的假設(shè)構(gòu)建一個理論模型。

網(wǎng)絡(luò)協(xié)議 ( Network Protocol ),其重點在 Network 上,說到 Network 就不得不讓人聯(lián)想到連接 ( Connection ) 了,它在許多網(wǎng)絡(luò)協(xié)議中都有體現(xiàn),比如:TCP 協(xié)議的 Socket,HTTP 協(xié)議的 Request & Response,所以我們就以 Connection 作為網(wǎng)絡(luò)協(xié)議的模型。同時為了避免與序列化協(xié)議相混淆,我們還需要為 Connection 模型上一道限制,即網(wǎng)絡(luò)協(xié)議只關(guān)心網(wǎng)絡(luò) IO 讀寫與 IO 事件處理,不關(guān)心任何序列化相關(guān)的事情。說到 Connection 那自然就逃不過 read / write 了,所以可以建立一個簡單的 Connection 模型如下:

interface Connection {
    read(): Promise<Buffer>;
    write(buf: Buffer): Promise<void>;
}

序列化協(xié)議 ( Serialization Protocol ),就詞組上來看,重點是在 Serialization 上,但如果用 Protocol 來表示,也好像差的不太多,所以這里就取更短的 Protocol 作為序列化協(xié)議的模型。序列化協(xié)議也肯定都會有 encode / decode,所以可以建立一個簡單的 Protocol 模型如下:

interface Protocol {
    encode(): Promise<void>;
    decode(): Promise<void>;
}

接下來的問題就是怎么組合使用這兩個模型了。一般來說,根據(jù)人的習慣,都是先想好說什么然后再開口說話的,所以我們把 Protocol 模型放在 Connection 模型之前,就可以得到如下的一條調(diào)用路徑:

上面的調(diào)用路徑雖然看起來簡潔,但太過于簡單,并沒有說明具體是怎樣的調(diào)用方式。而在實際的 RPC 調(diào)用中,可能會存在多種調(diào)用方式,比如:TCP Socket 隨意讀寫,HTTP 一次 Request 對應一次 Response,HTTP2 一次 Request 對應多次 Response,所以這里必定還缺了些什么東西來抽象這些具體的 RPC 調(diào)用方式。在這里我們使用 Handle 來作為調(diào)用方式的模型抽象,它代表的是一次 RPC 該如何去調(diào)用,其模型如下:

interface Handle {
    execute(): Promise<any>;
}

這樣就可以將調(diào)用路徑改成如下的形式:

到這里我們就可以根據(jù)上面的調(diào)用路徑寫一下偽代碼了,偽代碼如下:

createServer((socket) => {
    const connection = new ServerConnection(socket);
    const protocol = new ServerProtocol();
    const handle = new ServerHandle((ctx) => {
        console.log('Server got', ctx.request);

        ctx.response = { pong'pong' };
    });
    const ctx = { connection, protocol, handle } as Context;

    (async () => {
        /**
         * 內(nèi)部執(zhí)行
         * const buf = await ctx.connection.read();
         * ctx.request = ctx.protocol.decode(buf);
         * ...
         * const buf = ctx.protocol.encode(ctx.response);
         * await ctx.connection.write(buf);
         */

        await handle.execute(ctx);
    })();
}).listen(3000);

(async () => {
    const socket = connect({ port3000 });
    const connection = new ClientConnection(socket);
    const protocol = new ClientProtocol();
    const handle = new ClientHandle();
    const ctx = { connection, protocol, handle } as Context;

    ctx.request = { ping'ping' };

    /**
     * 內(nèi)部執(zhí)行
     * const buf = ctx.protocol.encode(ctx.request);
     * await ctx.connection.write(buf);
     * ...
     * const buf = await ctx.connection.read();
     * ctx.response = ctx.protocol.decode(buf);
     */

    await handle.execute(ctx);

    console.log('Client got', ctx.response);
})();

在這個偽代碼中,Handle、Protocol、Connection 實現(xiàn)都是可以自由替換的,換句話說,我們只需要實現(xiàn)了 TCP Connection、HTTP Connection、Thrift Protocol、Protobuf Protocol,就可以做到 Thrift on TCP、Protobuf on TCP、Thrift on HTTP、Protobuf on HTTP。

但在后續(xù)的實現(xiàn)過程中,我們遇到了一個問題:由于創(chuàng)建 Socket 與監(jiān)聽 Server 都是比較復雜的行為,特別是還需要考慮到服務(wù)發(fā)現(xiàn)、Service Mesh、連接池等的存在,這導致了 Connection 的實現(xiàn)代碼變得極其復雜,并且與 Server 實現(xiàn)嚴重耦合,稍微有一點不同就會產(chǎn)生大量冗余代碼。

因此為了解決這個問題,我們?yōu)?Connection 模型引入了 ConnectionProvider 模型,讓其負責 Connection 的創(chuàng)建與回收,考慮服務(wù)發(fā)現(xiàn)、Service Mesh、連接池等問題。

Tips:出于對稱設(shè)計原則的考慮,也為 Protocol 模型引入了 ProtocolProvider 模型。

模型總覽

最終所有涉及到的模型如下:

  • Connection:網(wǎng)絡(luò)協(xié)議,專注于網(wǎng)絡(luò) IO 性能,只關(guān)心網(wǎng)絡(luò) IO 讀寫與 IO 事件處理,不關(guān)心任何序列化相關(guān)的事情。
  • Protocol:序列化協(xié)議,專注于運算 CPU 性能,不關(guān)心任何網(wǎng)絡(luò)相關(guān)的事情。
  • Handle:RPC 調(diào)用方式,用于描述一次 RPC 該如何去調(diào)用。
  • ConnectionProvider:網(wǎng)絡(luò)協(xié)議生產(chǎn)者,用于解除 Client、Server 與具體 Connection 模型實現(xiàn)之間的耦合。
  • ProtocolProvider:序列化協(xié)議生產(chǎn)者,出于對稱設(shè)計考慮,暫時沒有太多的作用。
  • Context:RPC 調(diào)用上下文,是整個 RPC 調(diào)用過程的信息載體。
  • ConfigCenter:配置中心,用于遠程配置擴展。
  • Middleware:中間件,用于外部功能擴展。

Tips:Unit Handle 是為了實現(xiàn) Service、Method 級別中間件而加入的設(shè)計,本質(zhì)上與 Handle 一樣。

遇到的問題

創(chuàng)建 Client 與 Server

從上面的模型總覽中來看,涉及到的模型還是比較多的,這也導致了 Client 與 Server 的創(chuàng)建過程會比較繁瑣,不容易理解,所以在我們的 RPC 實現(xiàn)中,同時對外提供了兩套 API。

  • 對于普通業(yè)務(wù)開發(fā)同學,可以使用封裝好的 createClient() 與 createServer() API,自動集成了字節(jié)跳動內(nèi)大多數(shù)基建 ( Logger、Metrics、Trace、Service Mesh 等 )。
  • 對于有定制化需求的同學,可以使用 Client 與 Server API,來獲得更自由的 RPC 使用體驗。

多協(xié)議嵌套

在實際應用中,我們發(fā)現(xiàn) Protocol 模型還是太過于簡單了。根據(jù)公司體量的大小、技術(shù)債的積累程度,最終都會不可避免的會出現(xiàn)協(xié)議變種、協(xié)議組合的情況,這時需要實現(xiàn)的協(xié)議可能就會出現(xiàn)成倍的增長。以我們內(nèi)部情況為例:在字節(jié)跳動的 RPC 調(diào)用中,同時存在著 Binary Thrift、TTHeader + Binary Thrift、Framed Thrift、Mesh + TTHeader + Binary Thrift 等情況。

所以我們通過人為的將 Protocol 模型分為 HeaderProtocol 與 PayloadProtocol 模型,并通過 connection.cork、connection.uncork 與動態(tài) buffer 技巧實現(xiàn)了多協(xié)議組合,偽代碼如下:

class DynamicBuffer {}

connection.cork(new DynamicBuffer());
await payloadProtocol.encode(ctx);
let payload = connection.uncork();

for (let i = headerProtocols.length - 1; i >= 1; i--) {
    const headerProtocol = headerProtocols[i];

    connection.cork(new DynamicBuffer());
    await headerProtocol.encode(ctx, payload);
    
    payload = connection.uncork();
}

await headerProtocols[0].encode(ctx, payload);

Tips: 由于是人為規(guī)定的分類,所以:

  • HeaderProtocol 模型不意味著實現(xiàn)沒有 payload 部分,只是經(jīng)常作為在外部的序列化協(xié)議使用。
  • PayloadProtocol 模型不意味著實現(xiàn)沒有 header 部分,只是經(jīng)常作為在內(nèi)部的序列化協(xié)議使用。

Context 擴展性能

在后續(xù)的性能測試中,我們發(fā)現(xiàn)在 Middleware 中對 Context 進行擴展時,消耗了大量性能。通過排查發(fā)現(xiàn),是由于業(yè)務(wù)屬性需要,大量運用了 Object.defineProperty()、Object.defineProperties() 等 API 所導致的。比如我們需要在 Context 上動態(tài)創(chuàng)建 ctx.logId 屬性,并將它存儲到 ctx.tags.log_id,那么代碼基本上需要寫成這樣:

const ctx = { tags: { log_id: '' } };

Object.defineProperty(ctx, 'logId', {
    get() {
        return ctx.tags.log_id;
    },
    set(logId: string) {
        ctx.tags.log_id = logId;
    },
});

需要消耗一次 Object.defineProperty() 的性能。如果這時還需要同時兼容 ctx.log_id 的獲取與設(shè)置方式,那么消耗的性能將翻一倍,因此這種做法的性能基本上好不到哪里去。但如果通過 class extend 的形式擴展,又會陷入實現(xiàn)與具體 Middleware 耦合的尷尬境地。所以我們參考 fastify.decorate()[1] 的實現(xiàn),通過動態(tài)修改 Context 原型,來實現(xiàn)了近乎零消耗的 Context 擴展能力。

總結(jié)

在本文中,我們聊到了 RPC 的設(shè)計細節(jié),從最基礎(chǔ)的 RPC 分解,到模型設(shè)計,再到落地中遇到的問題。但如果要實現(xiàn)一個完善的 RPC 庫,所涉及到的細節(jié)將遠非這些,同時也會有許多其它概念將會對現(xiàn)有的模型造成沖擊,這需要我們耐心分析其本質(zhì),并將這些概念逐步的融入到設(shè)計實現(xiàn)中。

在我們內(nèi)部的 RPC 實現(xiàn)中,已經(jīng)支持了 Thrift 序列化協(xié)議與 TCP、HTTP 網(wǎng)絡(luò)協(xié)議,在不久后的將來也會支持 JSON、Protobuf 與 HTTP/2,甚至可能會將這套設(shè)計搬上瀏覽器,讓前端可以直接在瀏覽器上發(fā)起 RPC 調(diào)用,來豐富前后端調(diào)用技術(shù)選型,促進框架生態(tài)發(fā)展。

如果覺得這篇文章還不錯
點擊下面卡片關(guān)注我
來個【分享、點贊、在看】三連支持一下吧

   “分享、點贊在看” 支持一波 

瀏覽 63
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 91成人久久| 91丨九色丨蝌蚪丨成人| 高潮流水视频| 久久波多野结衣一区二区| 免费肏屄| 亚洲国产视频在线观看| 色操人| 亚洲精品免费视频| 五月婷中文字幕| 97国产高清| 亚洲欧美成人视频| AV手机天堂| 国产精品色呦呦| 老妇性BBWBBWBBWBBW| 久久精品在线视频| 污视频免费在线观看| 国产三级av在线| 欧美成人精品欧美一级| 国产在线观看91| 日韩精品视频免费在线观看 | 一级av片| 国产日本在线| 亚洲精品久久久蜜桃| 俺也去网站| 色情片免费看| 九久热| 五月丁香成人电影| 成人国产AV网站| 国产一级婬片A片免费妖精视频 | 欧美日逼网| 亚洲综合在线播放| 免费观看在线无码视频| 91免费福利视频| 亚洲三级AV| 欧美特黄AAA| 久久精品综合| 欧美色大香蕉| 亚洲第一网无码性色| 三级视频在线播放| 久久av电影| 精品人妻一区二区三区-国产精品 无码人妻av黄色一区二区三区 | 豆花视频久久| 乱伦内射视频| 欧美一级一区| 日逼视频网| 色播视频在线观看| 欧美成人综合一区| 无码视频一二三区| 青青免费视频| 人人人人干| 亚洲AV无码一区毛片AV| 男女网站在线观看| 日韩顶级毛片| 欧美日韩免费在线播放电影在线播放电影在线播放电影免费 | 亚洲伊人影院| 高潮喷水无码| 国产91在线拍揄自揄拍无码九色| 亚洲AV永久无码国产精品久久 | 欧美色逼逼| 中文字幕在线观看有码| 免费人成视频在线| 成人动漫| 在线视频福利导航| 成人在线H| 四虎成人在线| 91视频第一页| 九一国产在线| 国产91探花精品一区二区| 日韩一级内射| 欧美不卡一区二区| 日本黄色色情视频| 日韩网站在线观看| 久久精品999| 精品国产天线2024| 69av在线观看视频| 免费A在线观看| 国产在线观看一区| 奇米超碰| 青草成人在线视频| 午夜视频在线| 色人阁人妻中文字幕| 日韩理论片| 久久久999精品日韩一区二区| 91偷拍网| 一级A片一毛片大全| 亚洲AV无码成人精品区欧洲| 久草热在线| 亚洲AV无码精品| 精品人妻一区二区蜜桃视频| 大香蕉少妇| 亚洲高清无码视频在线播放| 一级黄片免费| 国产熟妇码视频app| 日韩一本| 久久永久免费视频| 18禁无码永久免费网站大全| 亚洲天堂网在线视频| 久久久久久婷婷| 大香蕉国产精品视频| 色综合天天综合网国产成人网 | 精品国产天线2024| 大伊香蕉在线| 日本中文字幕中文翻译歌词| 国产区在线| 亚洲另类自拍| 日韩无码高清一区| 中文字幕成人免费视频| 簧片网站免费| 成人H在线| 日本暖暖视频| 大香蕉伊人综合网| 色综合天天综合成人网| 日本三级韩三级99久久| 欧美日比视频| 欧美日韩性| 久久66| 水蜜桃一区二区| 亚洲777| 老妇性BBWBBWBBWBBW| 国产丝袜AV| 广西少妇BBwBBwBBw| 久久丁香| 北条麻妃在线无码| 日本中文字幕在线观看| 99色逼| 国精产品秘一区二区| 亚洲AV秘一区二区色盗战流出| 中文字幕淫乱视频欧美| 欧美成人社区| 亚洲无码免费看| 午夜嘿嘿| 国产一级操逼| 欧美午夜精品久久久久免费视| 日韩不卡中文字幕| 91无码人妻精品1国产四虎 | 91操B| 日韩久久网| 久久免费精品| 97男人的天堂| 熟妇高潮一区二区高潮| 伊人激情五月| 色情网站在线| 亚洲免费黄色视频| 欧美老熟妇乱大交XXXXX| 久久久青草| 四虎麻豆| 中文字幕av一区二区| 亚洲色图成人网| 色色免费视频| 國產精品77777777777| 偷拍99| www.cao| 特黄AV| 国产性爱在线| 2025AV中文字幕| 国产成人综合亚洲| 日爽夜爽| 日韩成年视频| 高清日韩无码视频| 国产三级片网址| 免费看性蜜桃| 波多野结衣99| av一区在线观看| 狠狠干网站| 1插菊花综合| www.91久久| 久久这里有精品| 人妻精品一区二区三区| 免费毛片基地| 国产无码AV大片| 人妻人人干| 亚洲少妇性爱视频| av网站在线播放| 成人中文字幕在线观看| 中文字幕+乱码+中文乱码电影| 做爰视频毛片下载蜜桃视频| 日韩精品三级| 麻豆91在线| 欧美综合高清| 午夜福利av电影| 99热日本| 北条麻妃无码精品| 爱爱动态图| 翔田千里无码在线观看| 中文字幕理论片| 在线观看www视频| 亚洲图片欧美另类| 久久av电影| 国产A级成人婬片1976| 五月丁香婷中文字幕| 亚洲精品成人一二三区| 加勒比无码视频| 天堂网久久| 成人啪啪网站| 成人免费无码| 色94色.欧美.setu| 亚洲无码一区二区三区妃光 | 亚洲AV性爱| 一级黄色电影在线观看| 国产一区二区成人久久919色| 成人天堂| 免费中文字幕视频| 国产在线观看你懂的| 久草手机视频在线观看| 成人在线精品| 亚洲中文无码第一页| 久久久久成人视频| 欧洲黄网| 91视频网站免费观看| 国产无码中文| 国产A区| 丁香五月亭亭| 久久久久人妻| 国精产品九九国精产品| 精品成人影视| 巜痴漢電車~凌脔版2| 亚洲成人A片| 天天日毛片| 欧美色图视频在线观看| 日韩十八禁网站| 免费av在线播放| 亚洲精品自拍| 少妇白浆| 六月综合网| 一级二级三级无码| 操B在线观看| 手机看片福利一区二区| 久久青娱乐| 日韩成人网站在线观看| 国产va在线观看| 久久性爱视频| 麻豆视频在线播放| 黄色视频网站在线看| 日逼免费视频| 91三级片| 国产成人三级片在线观看| 中文字幕高清| 97色在线| 大鸡巴黄色视频免费观看| 黄色搞逼视频| 国产九九在线视频| h片免费在线观看| 欧美国产日韩综合在线观看170| 91色色影院| 久久永久免费视频| 91狠狠综合久久久久久| 中文字幕你懂的在线三级| 美女被操面费网站| 安微妇搡BBBB搡BBBB| 精品久久久久久久久久| 淫色综合网| 国内精品久久久久久久久久变脸| 精品视频免费| 在线观看免费黄片| 午夜狠狠操| 日韩偷拍网| 亚洲精品国产AV| 无码免费中文字幕| 337P粉嫩大胆噜噜噜55569| 无码免费一区| 狠狠干| 成人A片免费在线观看| 久操欧美| 午夜AV在线| 亚洲超级高清无码第一在线视频观看 | 久久思思热| 国内无码精品| 大香蕉免费在线| 国产黃色AAA片| 亚洲AV三级片| 亚洲日韩欧美一厂二区入| 亚洲av高清无码| 三级片青青草| 中文字幕在线永久| 一道本高清无码| 黄色毛片,男人天堂| 91精品人妻一区二区三区四区| 91人妻最真实刺激绿帽| 欧美一区二区无码视频| 99r6热只有精品免费观看| 日韩熟妇无码中文字慕| 九九久久精品| 日韩视频在线观看一区| 99人妻| 日本黄色片| 天天操人人射| 日本翔田千里奶水| 球AV在线| 91极品视觉盛宴| 性无码一区二区三区无码免费| 国精产品一区一区三区四区| 看一级黄色视频| 中文字幕精品在线观看| 日本无码久久嗯啊流水| 欧美色图888| 男人网站| 日本少妇激情视频| 狼人香蕉网| 欲色av| av影音先锋在线| 国产精品久久久久久亚洲影视| 国产45页| 91亚洲精品视频在线| 俺也去在线视频| 久久澡| 中文区中文字幕免费看| 樱桃码一区二区三区| 欧美中文网| 456亚洲影院| 大吊无码| 免费成人一级片| 国产A片免费看| 日韩日逼网站| 亚洲欧美v| 亚洲成人福利在线| 高清无码爱爱| 日本三级无码| 极品久久久久| 精品国产区| 91国产视频在线播放| 国产人妻精品一二三区| 人人舔| 免费黄色av网址| 婷婷AV在线| 九九色色| 偷拍777| 中文字幕乱伦日本| 欧美激情区| 久久xxx| 亚洲毛片亚洲毛片亚洲毛片| 亚洲精品播放| 囯产伦精一区二区三区四区| 国产熟女| 久久香蕉综合在线| 国产操逼小视频| 黄色网页在线观看| 91美女在线视频| 成人免费观看视频| 激情五月天亚洲| 99在线观看精品视频| 久久理论电影| 亚洲中文免费视频| AV天堂国产| 麻豆乱伦视频| 欧美性爱在线| 一级a免一级a做片免费| 一区二区高清| av网站在线播放| www.水蜜桃| 午夜视频成人| 日本精品二区| 豆花视频在线播放| 亚洲欧美日韩一区二区| 亚洲在线无码播放| 狼友精品| 九九天堂网| 91在线无码精品秘国产| 无码乱伦AV| 久热福利| 国产免费一区二区三区四区 | 欧美v在线| 波多野结衣福利视频| 成人做爰黄AAA片免费直播岛国| 在线观看成人三级片| 国产一区二区成人久久919色| 五月天激情网址| 风流少妇一区二区三区91| 精品欧美片在线观看步骤| 成年人在线观看视频网站| 奶头和荫蒂添的好舒服囗交漫画| 欧美日韩免费视频| 老鸭窝av免费入口在线观看| 欧美日韩大片| 在线免费观看国产| 在线观看免费国产| 最新久欠一区二区免费看| 国产精品国产三级国产AⅤ原创 | 日韩在线不卡| 无码潮喷| 伊人五月在线| 国产成人无码免费| 国产欧美一区二区三区国产幕精品| 欧美激情无码一区二区三区张丽| 91国产精品视频在线| 在线观看日韩AV| 亚洲偷拍中文| 中日韩无码| 久草视频资源| 91色伦| 狠狠狠狠狠狠狠狠狠狠| 国产女18毛片多18精品| 日本视频免费| 日韩一级黄色电影| 少妇bbb搡bbbb搡bbbb| 麻豆免费版在线观看| 中文在线a∨在线| 操美女一区二区| 婷婷五月天网址| 成年人黄色视频免费观看| 一区二区三区在线免费观看| 成人H动漫精品一区二区无码| 成人一级视频| 国产精品美女在线观看| 无码成人AV在线看免费| 成人爱爱免费视频| 麻豆91网站| 欧美精品18| 久久国产一级片| 婷婷中文在线| 色在线视频| 免费毛片网站| 想要xx在线观看| 玖玖爱av| 人人搞人人摸| 69亚洲| 色中文字幕| 一级黄色电影免费| 深爱婷婷网| 99福利视频| 内射视频免费看| 女人的天堂av| 九一亚洲精品| 懂色成人av影院| 国内精品卡一卡二卡三| 91成人免费在线观看| 五月婷婷激情网| 夜夜骚av.一区二区三区四区| 91大铭哥| 亚洲秘无码一区二区三区蜜桃中文| 色噜噜一区二区| 特黄AV| 日日干AV| 黄色视频一区二区| 中文字幕视频网站| 亚洲婷婷视频| yw在线观看| 色婷婷精品视频| 亚洲中文视频免费| 午夜综合| 国产成人无码一区二区在线观看| 色色激情视频| 亚洲午夜久久久久久久久红桃 | 六月婷婷网| 国产久久免费视频| 大鸡巴久久久| 91网站在线观看视频| 球AV在线| 亚洲欧洲成人在线| 亚洲美女网站免费观看网址| 国产三级视频| 91精品国产aⅴ一区二区| 神马午夜激情| 黄色片免费在线观看| 日韩AV一级| 中文A片| 成人做爰A片一区二区app| 日韩色情在线| 佐山爱人妻无码蜜桃| 色色色99| 亚洲伊人大香蕉| AⅤ视频在线观看| 亚洲va国产天堂va久久en | 97人人射| 黄色综合网站| 国内无码| 一二三区视频| 国产亚洲无码激情前后夹击| 日本东京热视频| 国产一卡二卡在线| 中文字幕无码播放| 国产欧美一区二区三区视频 | 在线观看黄色网| 国产看色免费| 操逼A片| 成年人黄色电影| 青青青国产在线| a在线观看| 欧美亚洲日韩国产| 神马午夜三级| 日韩天堂av| 亚洲天堂一区二区三区| 精品无码蜜桃| 国产AV日韩AⅤ亚洲AV中文 | gogogo高清在线观看免费直播中国| 2014AV天堂网| www黄色com| 88国产精品| 成年人黄色网址| 操比视频在线观看| 伊人大香蕉在线网| 亚洲无码二区| 影音先锋国产精品| 91久久久久久久18| 三级黄色免费| 米奇色色| 免费看黄色一级片| yw尤物在线| gogogo视频在线观看黑人| 日韩精品视频在线免费观看| 7799精品视频天天看| 99国产精品久久久久久久| 午夜精品秘一区二区三区| 国产AV大片| 91免费福利视频| 欧美激情性爱网站| 爽好紧别夹喷水网站| 一起草在线视频| 成人无码影院日韩,成人年…| 嫩草av在线| 久久无码一区| 91吴梦梦一区二区传媒| 国产又爽又黄网站免费观看| 欧美色大香蕉| 国产精品性爱| 欧美XXX视频| 成人影视在线免费观看| 999久久久久| 91人人爽| 日韩中文字幕高清| gogogo日本免费观看高清电视剧的注意 | 91在线无码精品秘国产-百度| av影音先锋在线| 免费人成年激情视频在线观看 | 欧美毛视频| 亚洲av资源| 韩国精品在线观看| 蝌蚪窝在线视频免费观看| 欧美特级AAA| 一本大道东京热av无码| 成人免看一级a一片A片| 色色色色综合| 欧美一级操逼视频| 成人做爱免费网站| 欧美一页| 色色色色五月天| 国产精品无码免费| 久碰人妻人妻人妻| 91干穴穴在线观看| 国产人成一区二区三区影院| 色欲一区二区| 成人免费视频在线| 成年人免费看视频| 欧美日韩午夜福利视频| 国产秘久久一区二区| 日韩中文字幕高清| 无码人妻熟妇| 精品无人区无码乱码毛片国产| 亚洲综合免费观看高清完整版在线| 国产色av| 亚洲午夜久久久久久久久红桃 | 色爽AV| 污视频网站在线观看| 韩国一区二区在线观看| 日本久久高清| 日韩三级毛片| 日韩五月天| 青青草中文字幕| 欧美久草蜜桃视频| 欧美激情视频一区二区三区不卡| 黄片免费观看网站| 欧美激情无码一区二区三区张丽| 抽插影院| 最新中文字幕AV| 国产高清毛片| 伊人网在线观看| 中文字幕在线不卡| 日韩精品免费观看| 日本理论片一道本| 台湾中文字幕网| 日皮视频网站| 懂色AV| 天天插天天插| 一级av片| 91视频在线免费看| 青青草公开视频| 中文字幕免费av| 天天操夜夜操视频免费高清| 久操播放器| 成人免费三级片| 一区二区三区在线免费观看| 欧美Aⅴ| 激情综合网站| 亚洲中文第一页| 大香蕉电影网站| 国产精品熟女| 精品亚洲一区二区三区| 四川婬妇BBw搡BBBB搡| 一级黄视频| 九色91PORNY国产| 国产区视频| www.色在线观看| 男女拍拍视频| 性BBwBBwBBwBBw禽| 91女人18毛片水多的意思| 91视频人人| 亚洲色射| 久本草精品| 五月婷婷五月丁香| AV电影天堂网| 韩国午夜福利视频| 中文字幕福利电影| 91视频亚洲| 欧美精品秘一区二区三区蜜臀| 亚洲综合国产| 蜜臀久久99精品久久| 日韩bbbb| 91久久久久久久91| 香蕉av在线播放| 狠狠躁夜夜躁人人爽人妻| 波多野结衣无码视频| 亚洲中文字幕一区| 久久性爱网站| 九九成人网站| 黄色AV天堂| 五月在线| 九九九中文字幕| 安徽妇搡BBBB搡BBBB| 蜜桃久久久亚洲精品| 日韩成人网站在线观看| 免费成人视频| 久久er99| 俺也来www俺也色com| 国内精品久久久久久久久久变脸| 六月综合网| 人人妻日日摸狠狠躁视频| 91无码一区二区| 大香蕉在线播| 亚洲AV资源在线| 国产精品无码成人AV电影| 9191久久| 精品人妻一区二区乱码一区二区| 熟女少妇网站| 91黄在线观看| 乱子伦一区二区三区视频在线观看| 中文字幕在线观看a| 青青草资源站| 国产激情艹逼| 中出欧美亚洲| 少妇人妻偷人精品无码视频新浪| 天堂无线av无码av| 在线观看一区| 骚小姨子无码| 日本高清一区二区高清免费视频| 亚洲无码高清视频| 天堂A片电影网站在线观看| 狼友视频在在观看| 黄色无無| 亚洲日本三级片| av福利电影在线| 无码中文字幕高清| 欧美精产国品一区二区区别| 越南小嫩嫩BBWBBw| 欧美色图狠狠操| 嫩草嫩草69| 青春草免费视频| 国产欧美熟妇另类久久久| 北条麻妃视频在线播放| 91蝌蚪视频在线播放| 免费观看成人| 福利一区二区| 夜夜操天天| 天天操电影| 超碰在线69| 欧美一区| 久久成人在线| 狠狠草视频| 国产精品久久久久久久久久二区三区 | 日韩欧美大香蕉| 国产小视频在线播放| 97人妻精品| 亚洲中文免费观看| 五月丁香婷婷在线| 99精品六月婷婷综合在线| 成人免费乱码大片a毛片蜜芽| 成片免费观看视频大全| 黄色亚洲无码| 亚洲自拍小说| 国产小黄片| 欧美一级免费视频| 爆操人妻| 在线观看国产欧美| 无码欧美成人| 五月丁香婷婷综合| 日韩性爱在线视频| 日韩成人一区二区三区| 日韩操逼图| 亚洲中文字幕不卡| 日韩A| 国产乱╳╳AⅤ毛片| 欧美一级A| 夜夜无码| 国产成人无码区亚洲A片356p| 影音先锋中文字幕资源| 国产伦精品一区二区三区视频女| 少妇无码视频| 色资源在线观看| 亚洲操b| 国产成人免费观看视频| 午夜成人AV| 亚洲无码操逼视频| 国产成人免费做爰视频| 久热国产视频| 人人操狠狠操| 亚洲精品在线视频| 亚洲欧美在线视频免费| 午夜黄色福利| 友田真希一级婬片A片| 91精品久久久久久粉嫩| 西西西444www无码视频| av四虎| va色婷婷亚洲在线| 熊猫成人网| 老司机在线免费视频| av五月| 中文字幕天堂网| 国产无遮挡A片又黄又爽小直播 | 国产美女被爽到高潮免费A片软件 国产无遮挡又黄又爽又色视频软件 | 成人精品一区日本无码网站suv| 一级电影网| 国产字幕| 影音先锋一区二区三区| 狠狠操2019| 北条麻妃无码在线观看| 国产激情在线| 久久毛| 日韩爱爱免费视频| 黄色片免费视频网站| 91黄色在线观看| 国产美女网站| 无码国产视频| 欧美日韩一级黄色片| 亚洲日韩第一页| 欧美国产在线观看| 黄片伊人| 蜜臀久久久99久久久久久久| 亚洲色图狠狠撸| 国产精品免费网站| 免费亚洲视频| 中文字幕无码网站| 国产精品后入| 午夜AAA| 麻豆911精一区二区| 亚洲精品免费观看| 91丨PORN丨国产| 一级黄色毛片| 嫩苞又嫩又紧AV无码| 精品人妻系列| 97操逼| 欧美日韩国产免费观看成人片| www.操逼| 国产黄色视频在线免费看| 国产青娱乐在线视频| 国产1区2区3区| 人妻少妇偷人精品久久| 三级视频网站| 欧美日韩精品在线视频| 手机在线一区| 大香蕉伊人在线观看| 色婷婷影视| 久久久97精品久久| 99一区二区| 亚洲偷拍视频| 手机在线小视频| 中文字幕日韩电影| 色香蕉在线视频| 这里只有精品视频| 亚洲精品不卡| 久久国产一区二区| 51乱伦| 中文电视剧字幕在线播放免费视频| 夜夜撸天天日| 高潮喷水在线观看| 日韩爱爱免费视频| 欧美日韩大屌| 高清无码毛片| 大黄网站在线观看| 久久久久女人精品毛片九一| 一本道无码在线| 91在线无码精品在线看| 牛牛精品一区二区AV| 97欧美精品人妻系列| 免费中文字幕av| 91av在线免费播放| 伊人在线| 亚洲无码大全| 日韩福利一区| 韩国三级中文字幕HD久久精品| 高清无码电影| 青春草在线免费视频| 最美人妖系列国产Ts涵涵| 亚洲无码一区二区三区四区| 青娱乐国产视频| 在线性视频| 亚洲国产成人自拍| 国产中文字幕视频| 欧美亚洲日韩一区二区三区| 欧美性性性| 人妻超碰在线| 99热这里只有精品99| 黄色电影网站在线观看| 99精品99| 日本一区二区三区免费看| 免费看黃色AAAAAA片| AV无码免费一区二区三区不卡| 涩涩视频成人| 国产黄色AV片| 五月天黄色网| 99热在线观看精品免费| 亚洲无码AV一区二区| 高清人妻无码| 久操视频一区二区三区| 99精品视频在线观看免费| 日韩精品一区二区三区黄冈站长| 久久久国产精品在线| 成人无码小电影| 天天日夜夜爽| 中文字幕熟女人妻| 日本女人牲交视频| 在线免费AV片| 日韩成人精品中文字幕| 久久波多野结衣| 国产精品婷婷午夜在线观看| 国产亚洲精品久久久久久桃色| 欧美特黄AAAAAA| 91蝌蚪久久| 日韩在线免费观看视频| 成年人视频免费看| 婷婷成人视频| 夜夜无码| 色第一页| 91视频在线看| 国产精品黄| a片在线免费看| 伊人性爱网| 91人妻日韩人妻无码| 色噜噜狠狠一区二区三区300部| 激情另类| 最新中文字幕| 亚洲一级Av无码毛片久久精品| 日韩AV免费在线| 88AV在线播放| 九九热8| 国产激情一区二区三区| 高清在线无码视频| 女公务员人妻呻吟求饶| 尹人香蕉久久| 久久777| 亚洲人妻AV| 色婷婷狠狠| 久久午夜影院| 51国产黑料吃瓜在线入口| 狠狠色五月亚洲91| 特级西西西88大胆无码| 六十路老熟女码视频| 在线观看免费黄视频| 国产精品女人精品久久久天天| 免费一级无码婬片A片AAA毛片| 超碰97免费| 综合久久久| 老熟女乱伦| 欧美第1页| 26∪u∪成人网站| 91青青草视频| 国产美女啪啪视频| 成人先锋影音| 特级西西WWW无码| 操逼手机视频| 大香蕉久久久久久久| AA精品| wwwxx在线观看| 成人AV在线一区二区| 欧美激情无码炮击| 欧美日韩视频一区二区三区| 91麻豆视频| 91人妻视频| 亚洲色吧| 91一区二区| 中国老太卖婬HD播放| 久草视频在线播放| 亚洲中文字幕av| 亚洲视频免费| 超碰人人在线| 欧美视频一区| adn日韩av| 亚州毛多色色精品| 艾操网| 日产久久久| 日韩精品成人AV| 久草视频免费在线播放| 亚洲人人色| 波多野结衣视频在线观看| 大香蕉久在线| 在线伊人网| 青青草原国产视频| 亚洲三级av| 欧美成人AA| 俺也日| 91成人无码看片在线观看网址| 成人激情视频网| 亚洲色婷婷综合|