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

字節(jié)跳動(dòng)開源 Go HTTP 框架 Hertz 設(shè)計(jì)實(shí)踐

原創(chuàng) 精選
開源 開發(fā)
Hertz 堅(jiān)持內(nèi)外維護(hù)一套代碼,為開源使用提供了強(qiáng)有力的保障。本文將重點(diǎn)關(guān)注 Hertz 的架構(gòu)設(shè)計(jì)與功能特性。

前言

Hertz 是字節(jié)跳動(dòng)服務(wù)框架團(tuán)隊(duì)研發(fā)的超大規(guī)模的企業(yè)級(jí)微服務(wù) HTTP 框架,具有高易用性、易擴(kuò)展、低時(shí)延等特點(diǎn)。在經(jīng)過了字節(jié)跳動(dòng)內(nèi)部一年多的使用和迭代,如今已在 CloudWeGo 正式開源。目前,Hertz 已經(jīng)成為了字節(jié)跳動(dòng)內(nèi)部最大的 HTTP 框架,線上接入的服務(wù)數(shù)量超過 1 萬,峰值 QPS 超過 4 千萬。除了各個(gè)業(yè)務(wù)線的同學(xué)使用外,也服務(wù)于內(nèi)部很多基礎(chǔ)組件,如:函數(shù)計(jì)算平臺(tái) FaaS、壓測平臺(tái)、各類網(wǎng)關(guān)、Service Mesh 控制面等,均收到不錯(cuò)的使用反饋。在如此大規(guī)模的場景下,Hertz 擁有極強(qiáng)的穩(wěn)定性和性能,在內(nèi)部實(shí)踐中某些典型服務(wù),如框架占比較高的服務(wù)、網(wǎng)關(guān)等服務(wù),遷移 Hertz 后相比 Gin 框架,資源使用顯著減少,CPU 使用率隨流量大小降低 30%-60%,時(shí)延也有明顯降低。

Hertz 堅(jiān)持內(nèi)外維護(hù)一套代碼,為開源使用提供了強(qiáng)有力的保障。通過開源, Hertz 也將豐富云原生的 Golang 中間件體系,完善 CloudWeGo 生態(tài)矩陣,為更多開發(fā)者和企業(yè)搭建云原生化的大規(guī)模分布式系統(tǒng),提供一種現(xiàn)代的、資源高效的的技術(shù)方案。

本文將重點(diǎn)關(guān)注 Hertz 的架構(gòu)設(shè)計(jì)與功能特性。

項(xiàng)目緣起

最初,字節(jié)跳動(dòng)內(nèi)部的 HTTP 框架是對(duì) Gin 框架的封裝,具備不錯(cuò)的易用性、生態(tài)完善等優(yōu)點(diǎn)。隨著內(nèi)部業(yè)務(wù)的不斷發(fā)展,高性能、多場景的需求日漸強(qiáng)烈。而 Gin 是對(duì) Golang 原生 net/http 進(jìn)行的二次開發(fā),在按需擴(kuò)展和性能優(yōu)化上受到很大局限。因此,為了滿足業(yè)務(wù)需求,更好的服務(wù)各大業(yè)務(wù)線,2020 年初,字節(jié)跳動(dòng)服務(wù)框架團(tuán)隊(duì)經(jīng)過內(nèi)部使用場景和外部主流開源 HTTP 框架 Fasthttp、Gin、Echo 的調(diào)研后,開始基于自研網(wǎng)絡(luò)庫 Netpoll 開發(fā)內(nèi)部框架 Hertz,讓 Hertz 在面對(duì)企業(yè)級(jí)需求時(shí),有更好的性能及穩(wěn)定性表現(xiàn),也能夠滿足業(yè)務(wù)發(fā)展和應(yīng)對(duì)不斷演進(jìn)的技術(shù)需求。

架構(gòu)設(shè)計(jì)

Hertz 設(shè)計(jì)之初調(diào)研了大量業(yè)界優(yōu)秀的 HTTP 框架,同時(shí)參考了近年來內(nèi)部實(shí)踐中積累的經(jīng)驗(yàn)。為了保證框架整體上滿足:1. 極致性能優(yōu)化的可能性;2. 面對(duì)未來不可控需求的擴(kuò)展能力, Hertz 采用了 4 層分層設(shè)計(jì),保證各個(gè)層級(jí)功能內(nèi)聚,同時(shí)通過層級(jí)之間的接口達(dá)到靈活擴(kuò)展的目標(biāo)。整體架構(gòu)圖如圖 1 所示。

圖片

圖 1:Hertz 架構(gòu)圖

Hertz 從上到下分為:應(yīng)用層、路由層、協(xié)議層和傳輸層,每一層各司其職,同時(shí)公共能力被統(tǒng)一抽象到公共層(common),做到跨層級(jí)復(fù)用。另外,同主庫一同發(fā)布的還有作為子模塊的 Hz 腳手架,它能夠協(xié)助使用者快速搭建出項(xiàng)目核心骨架以及提供實(shí)用的構(gòu)建工具鏈。

應(yīng)用層

應(yīng)用層是和用戶直接交互的一層,提供豐富易用的 API,主要包括 Server、Client 和一些其他通用抽象。Server 提供了注冊(cè) HandlerFunc、Binding、Rendering 等能力;Client 提供了調(diào)用下游和服務(wù)發(fā)現(xiàn)等能力;以及抽象一個(gè) HTTP 請(qǐng)求所必須涉及到的請(qǐng)求(Request)、響應(yīng)(Response)、上下文(RequestContext)、中間件(Middleware)等等。Hertz 的 Server 和 Client 都能夠提供中間件這樣的擴(kuò)展能力。

應(yīng)用層中一個(gè)非常重要的抽象就是對(duì) Server HandlerFunc 的抽象。早期,Hertz 路由的處理函數(shù) (HandlerFunc)中并沒有接收標(biāo)準(zhǔn)的 context.Context,我們?cè)诖罅康膶?shí)踐過程中發(fā)現(xiàn),業(yè)務(wù)方通常需要一個(gè)標(biāo)準(zhǔn)的上下文在 RPC Client 或者日志、Tracing 等組件間傳遞,但由于請(qǐng)求上下文(RequestContext)生命周期局限于一次 HTTP 請(qǐng)求之內(nèi),而以上提到的場景往往存在異步的傳遞和處理,導(dǎo)致如果直接傳遞請(qǐng)求上下文,會(huì)導(dǎo)致出現(xiàn)一些數(shù)據(jù)不一致的問題。為此我們做了諸多嘗試,但是因?yàn)楹诵脑蛟谟谡?qǐng)求上下文(RequestContext)的生命周期無法優(yōu)雅的按需延長,最終在各種設(shè)計(jì)權(quán)衡下,我們?cè)诼酚傻奶幚砗瘮?shù)簽名中增加一個(gè)標(biāo)準(zhǔn)的上下文入?yún)ⅲㄟ^分離出生命周期長短各異的兩個(gè)上下文的方式,從根本上解決各種因?yàn)樯舷挛纳芷诓灰恢聦?dǎo)致的異常問題,即:

type HandlerFunc func(c context.Context, ctx *app.RequestContext)

路由層

路由層負(fù)責(zé)根據(jù) URI 匹配對(duì)應(yīng)的處理函數(shù)。

起初,Hertz 的路由基于 httprouter 開發(fā),但隨著使用的用戶越來越多,httprouter 漸漸不能夠滿足需求,主要體現(xiàn)在 httprouter 不能夠同時(shí)注冊(cè)靜態(tài)路由和參數(shù)路由,即 /a/b,/:c/d? 這兩個(gè)路由不能夠同時(shí)注冊(cè);甚至有一些更特殊的需求,如/a/b、/:c/b? ,當(dāng)匹配 /a/b 路由時(shí),兩個(gè)路由都能夠匹配上。

Hertz 為滿足這些需求重新構(gòu)造了路由樹,用戶在注冊(cè)路由時(shí)擁有很高的自由度:支持靜態(tài)路由、參數(shù)路由的注冊(cè);支持按優(yōu)先級(jí)匹配,如上述例子會(huì)優(yōu)先匹配靜態(tài)路由 /a/b? ;支持路由回溯,如注冊(cè) /a/b、/:c/d?,當(dāng)匹配 /a/d? 時(shí)仍然能夠匹配上;支持尾斜線重定向,如注冊(cè) /a/b?,當(dāng)匹配 /a/b/? 時(shí)能夠重定向到 /a/b 上。Hertz 提供了豐富的路由能力來滿足用戶的需求,更多的功能可以參考 Hertz 配置文檔。

協(xié)議層

協(xié)議層負(fù)責(zé)不同協(xié)議的實(shí)現(xiàn)和擴(kuò)展。

Hertz 支持協(xié)議的擴(kuò)展,用戶只需要實(shí)現(xiàn)下面的接口便可以按照自己的需求在引擎(Engine) 上擴(kuò)展協(xié)議,同時(shí)也支持通過 ALPN 協(xié)議協(xié)商的方式注冊(cè)。Hertz 首批只開源了 HTTP1 實(shí)現(xiàn),未來會(huì)陸續(xù)開源 HTTP2、QUIC 等實(shí)現(xiàn)。協(xié)議層擴(kuò)展提供的靈活性甚至可以超越 HTTP 協(xié)議的范疇,用戶完全可以按需注冊(cè)任意符合自身需求的協(xié)議層實(shí)現(xiàn),并且加入到 Hertz 的引擎中來,同時(shí),也能夠無縫享受到傳輸層帶來的極致性能。

type ServerFactory interface {
New(core Core) (server protocol.Server, err error)
}

type Server interface {
Serve(c context.Context, conn network.Conn) error
}

傳輸層

傳輸層負(fù)責(zé)底層的網(wǎng)絡(luò)庫的抽象和實(shí)現(xiàn)。

Hertz 支持底層網(wǎng)絡(luò)庫的擴(kuò)展。Hertz 原生完美適配 Netpoll,在時(shí)延方面有很多深度的優(yōu)化,非常適合時(shí)延敏感的業(yè)務(wù)接入。Netpoll 對(duì) TLS 能力的支持有待完善,而 TLS 能力又是 HTTP 框架必備能力,為此 Hertz 底層同時(shí)支持基于 Golang 標(biāo)準(zhǔn)網(wǎng)絡(luò)庫的實(shí)現(xiàn)適配,支持網(wǎng)絡(luò)庫的一鍵切換,用戶可根據(jù)自己的需求選擇合適的網(wǎng)絡(luò)庫進(jìn)行替換。如果用戶有更加高效的網(wǎng)絡(luò)庫或其他網(wǎng)絡(luò)庫需求,也完全可以根據(jù)需求自行擴(kuò)展。

Hz 腳手架

與 Hertz 一并開源的還有一個(gè)易用的命令行工具 Hz,用戶只需提供一個(gè) IDL,根據(jù)定義好的接口信息,Hz 便可以一鍵生成項(xiàng)目腳手架,讓 Hertz 達(dá)到開箱即用的狀態(tài);Hz 也支持基于 IDL 的更新能力,能夠基于 IDL 變動(dòng)智能地更新項(xiàng)目代碼。目前 Hz 支持了 Thrift 和 Protobuf 兩種 IDL 定義。命令行工具內(nèi)置豐富的選項(xiàng),可以根據(jù)自己的需求使用。同時(shí)它底層依賴 Protobuf 官方的編譯器和自研的 Thriftgo 的編譯器,兩者都支持自定義的生成代碼插件。如果默認(rèn)模板不能夠滿足需求,完全能夠按需定義。

未來,我們將繼續(xù)迭代 Hz,持續(xù)集成各種常用的中間件,提供更高層面的模塊化構(gòu)建能力。給 Hertz 的用戶提供按需調(diào)整的能力,通過靈活的自定義配置打造一套滿足自身開發(fā)需求的腳手架。

Common 組件

Common 組件主要存放一些公共的能力,比如錯(cuò)誤處理、單元測試能力、可觀測性相關(guān)能力(Log、Trace、Metrics 等)。對(duì)于服務(wù)可觀測性的能力,Hertz 提供了默認(rèn)的實(shí)現(xiàn),用戶可以按需裝配;如果用戶有特殊的需求,也可以通過 Hertz 提供的接口注入。比如對(duì)于 Trace 能力,Hertz 提供了默認(rèn)的實(shí)現(xiàn),也提供了將 Hertz 和 Kitex 串起來的 Example。如果想注入自己的實(shí)現(xiàn),也可以實(shí)現(xiàn)下面的接口:

// Tracer is executed at the start and finish of an HTTP.
type Tracer interface {
Start(ctx context.Context, c *app.RequestContext) context.Context
Finish(ctx context.Context, c *app.RequestContext)
}

功能特性

中間件

Hertz 除了提供 Server 的中間件能力,還提供了 Client 中間件能力。用戶可以使用中間件能力將通用邏輯(如:日志記錄、性能統(tǒng)計(jì)、異常處理、鑒權(quán)邏輯等等)和業(yè)務(wù)邏輯區(qū)分開,讓用戶更加專注于業(yè)務(wù)代碼。Server 和 Client 中間件使用方式相同,使用 Use 方法注冊(cè)中間件,中間件執(zhí)行順序和注冊(cè)順序相同,同時(shí)支持預(yù)處理和后處理邏輯。

Server 和 Client 的中間件實(shí)現(xiàn)方式并不相同。對(duì)于 Server 來說,我們希望減少棧的深度,同時(shí)也希望中間件能夠默認(rèn)的執(zhí)行下一個(gè),用戶需要手動(dòng)終止中間件的執(zhí)行。因此,我們將 Server 的中間件分成了兩種類型,即不在同一個(gè)函數(shù)調(diào)用棧(該中間件調(diào)用完后返回,由上一個(gè)中間件調(diào)用下一個(gè)中間件,如圖 2 中 B 和 C)和在同一個(gè)函數(shù)調(diào)用棧的中間件(該中間件調(diào)用完后由該中間件繼續(xù)調(diào)用下一個(gè)中間件,如圖 2 中 C 和 Business Handler)。

圖片

圖 2: 中間件鏈路

其核心是需要一個(gè)地方存下當(dāng)前的調(diào)用位置 index,并始終保持其遞增。恰好 RequestContext 就是一個(gè)存儲(chǔ) index 合適的位置。但是對(duì)于 Client,由于沒有合適的地方存儲(chǔ) index,我們只能退而求其次,拋棄 index 的實(shí)現(xiàn),將所有的中間件構(gòu)造在同一調(diào)用鏈上,需要用戶手動(dòng)調(diào)用下一個(gè)中間件。

流式處理

Hertz 提供 Server 和 Client 的流式處理能力。HTTP 的文件場景是十分常見的場景,除了 Server 側(cè)的上傳場景之外,Client 的下載場景也十分常見。為此,Hertz 支持了 Server 和 Client 的流式處理。在內(nèi)部網(wǎng)關(guān)場景中,從 Gin 遷移到 Hertz 后,cpu 使用量隨流量大小不同可節(jié)省 30%-60% 不等,服務(wù)壓力越大,收益越大。Hertz 開啟流式功能的方式也很容易,只需要在 Server 上或 Client 上添加一個(gè)配置即可,可參考 CloudWeGo 官網(wǎng) Hertz 文檔的流式處理部分。

由于 Netpoll 采用 LT 的觸發(fā)模式,由網(wǎng)絡(luò)庫主動(dòng)將將數(shù)據(jù)從 TCP 緩沖區(qū)讀到用戶態(tài),并存儲(chǔ)到 buffer 中,否則 epoll 事件會(huì)持續(xù)觸發(fā)。因此 Server 在超大請(qǐng)求的場景下,由于 Netpoll 持續(xù)將數(shù)據(jù)讀到用戶態(tài)內(nèi)存中,可能會(huì)有 OOM 的風(fēng)險(xiǎn)。HTTP 文件上傳場景就是一個(gè)典型的場景,但 HTTP 上傳服務(wù)又是很常見的場景,因此我們支持標(biāo)準(zhǔn)網(wǎng)絡(luò)庫 go net,并針對(duì) Hertz 做了特殊優(yōu)化,暴露出 Read() 接口,防止 OOM 發(fā)生。

對(duì)于 Client,情況并不相同。流式場景下會(huì)將連接封裝成 Reader 暴露給用戶,而 Client 有連接池管理,那這樣連接就多了一種狀態(tài),何時(shí)關(guān)連接,何時(shí)復(fù)用連接成了一個(gè)問題。由于框架側(cè)并不知道該連接何時(shí)會(huì)用完,框架側(cè)復(fù)用該連接不現(xiàn)實(shí),會(huì)導(dǎo)致串包問題。由于 GC 會(huì)關(guān)閉連接,因此我們起初設(shè)想流式場景下的連接交由用戶后,由 GC 負(fù)責(zé)關(guān)閉,這樣也不會(huì)導(dǎo)致資源泄漏。但是在測試后發(fā)現(xiàn),由于 GC 存在一定時(shí)間間隔,另外 TCP 中主動(dòng)關(guān)閉連接的一方需要等待 2RTT,在高并發(fā)場景下會(huì)導(dǎo)致 fd 被打滿的情況。最終我們提供了復(fù)用連接的接口,對(duì)于性能有場要求用戶,在使用完連接后可以將連接重新放入連接池中復(fù)用。

性能表現(xiàn)

Hertz 使用字節(jié)跳動(dòng)自研高性能網(wǎng)絡(luò)庫 Netpoll,在提高網(wǎng)絡(luò)庫效率方面有諸多實(shí)踐,參考已發(fā)布文章字節(jié)跳動(dòng)在 Go 網(wǎng)絡(luò)庫上的實(shí)踐。除此之外,Netpoll 還針對(duì) HTTP 場景進(jìn)行優(yōu)化,通過減少拷貝和系統(tǒng)調(diào)用次數(shù)提高吞吐以及降低時(shí)延。為了衡量 Hertz 性能指標(biāo),我們選取了社區(qū)中有代表性的框架 Gin(net/http)和 Fasthttp 作為對(duì)比,如圖 3 所示。可以看到,Hertz 的極限吞吐、TP99 等指標(biāo)均處于業(yè)界領(lǐng)先水平。未來,Hertz 還將繼續(xù)和 Netpoll 深度配合,探索 HTTP 框架性能的極限。

圖片

圖 3:Hertz 和其他框架性能對(duì)比

一個(gè) Demo

下面簡單演示一下 Hertz 是如何開發(fā)一個(gè)服務(wù)的。

  1. 首先,定義 IDL,這里使用 Thrift 作為 IDL 的定義(也支持使用 Protobuf 定義的 IDL),編寫一個(gè)名為 Demo 的 service。這個(gè)服務(wù)有一個(gè) API: Hello,它的請(qǐng)求參數(shù)是一個(gè) query,響應(yīng)是一個(gè)包含一個(gè) RespBody 字段的 Json。
// idl/hello.thrift
namespace go hello.example

struct HelloReq {
1: string Name (api.query="name");
}

struct HelloResp {
1: string RespBody;
}

service HelloService {
HelloResp Hello(1: HelloReq request) (api.get="/hello");
}
  1. 接下來我們使用 hz 生成代碼,并整理和拉取依賴
$ hz new -idl idl/hello.thrift -mod Demo
$ go mod tidy && go mod verify
  1. 填充業(yè)務(wù)邏輯,比如我們返回hello, ${Name}?,那我們?cè)赽iz/handler/example/hello_service.go 中添加以下代碼即可
// Hello .
// @router /hello [GET]
func Hello(ctx context.Context, c *app.RequestContext) {
var err error
var req example.HelloReq
err = c.BindAndValidate(&req)
if err != nil {
c.String(400, err.Error())
return
}

resp := new(example.HelloResp)
resp.RespBody = "hello, " + req.Name
c.JSON(200, resp)
}
  1. 編譯并運(yùn)行項(xiàng)目
$ go build
$ ./Demo

到現(xiàn)在一個(gè)簡單的 Hertz 項(xiàng)目已經(jīng)生成,下面我們來測試一下

$ curl http://localhost:8888/hello\?name\=Xiaoming
// 如果看到以下返回說明服務(wù)已經(jīng)正常啟動(dòng)起來啦
$ {"RespBody":"hello, Xiaoming"}

(以上 demo 可以在 hertz-examples 中查看) 之后就可以愉快的構(gòu)建自己的項(xiàng)目了。

后記

希望以上的分享能夠讓大家對(duì) Hertz 有一個(gè)整體上的認(rèn)識(shí)。同時(shí),我們也在不斷地迭代 Hertz、完善 CloudWeGo 整體生態(tài)。歡迎各位感興趣的同學(xué)們加入我們,共同建設(shè) CloudWeGo。

參考資料

  • Hertz: https://github.com/cloudwego/hertz
  • Hertz Doc: https://www.cloudwego.io/zh/docs/hertz/
  • 字節(jié)跳動(dòng)在 Go 網(wǎng)絡(luò)庫上的實(shí)踐: https://www.cloudwego.io/zh/blog/2021/10/09/%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E5%9C%A8-go-%E7%BD%91%E7%BB%9C%E5%BA%93%E4%B8%8A%E7%9A%84%E5%AE%9E%E8%B7%B5/?
責(zé)任編輯:未麗燕 來源: 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)
相關(guān)推薦

2022-10-14 14:44:04

字節(jié)跳動(dòng)ByteTechHTTP 框架

2024-11-07 11:46:41

2024-11-13 11:02:03

微服務(wù)框架項(xiàng)目

2024-11-08 13:04:08

項(xiàng)目Hertz接口

2022-11-24 09:01:26

HTTPHertz架構(gòu)

2024-09-25 15:57:56

2022-08-25 18:48:29

字節(jié)跳動(dòng)CSS開源

2023-10-18 11:56:17

開源AI

2023-04-19 16:51:54

分布式Primus開源

2024-04-23 10:16:29

云原生

2023-01-10 09:08:53

埋點(diǎn)數(shù)據(jù)數(shù)據(jù)處理

2022-08-21 21:28:32

數(shù)據(jù)庫實(shí)踐

2022-12-23 08:58:35

字節(jié)跳動(dòng)YARN架構(gòu)

2022-03-21 17:56:59

大模型訓(xùn)練訓(xùn)練框架

2022-03-21 15:06:10

模型字節(jié)跳動(dòng)框架

2021-09-17 13:05:55

模型人工智能框架

2022-07-12 16:54:54

字節(jié)跳動(dòng)Flink狀態(tài)查詢

2022-05-23 13:30:48

數(shù)據(jù)胡實(shí)踐

2024-11-01 17:00:03

2022-04-07 16:35:59

PGO 優(yōu)化profile 數(shù)據(jù)編譯優(yōu)化
點(diǎn)贊
收藏

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

精东粉嫩av免费一区二区三区| 九九九久久久久久久| 给我看免费高清在线观看| 日本高清视频在线播放| 欧美一区 二区| 亚洲视频小说图片| 国产精品日韩欧美| 欧美黑人在线观看| 一级特黄aaa大片在线观看| 一本色道久久综合亚洲精品酒店| 亚洲欧美日韩国产手机在线| 国产精品久久电影观看| 女同毛片一区二区三区| 电影一区二区| 国产日韩欧美综合在线| 欧美在线性爱视频| 中文字幕日韩三级片| 秋霞国产精品| 亚洲成人自拍网| 成人蜜桃视频| 久久一二三四区| 88久久精品| 亚洲一区影音先锋| 99久久无色码| 成年人免费看毛片| 欧美做受69| 日韩一区二区三区av| 4444在线观看| 日本黄色不卡视频| 一区二区三区国产盗摄 | 欧美 亚洲 视频| 国产麻豆91视频| 在线观看国产精品入口| 日韩一卡二卡三卡国产欧美| 免费涩涩18网站入口| 免费大片黄在线| 国精品**一区二区三区在线蜜桃| 97碰在线观看| 级毛片内射视频| 国产情侣一区二区三区| 亚洲四区在线观看| 美女亚洲精品| 一区二区视频网| 综合激情在线| 色偷偷偷亚洲综合网另类| 欧美成人手机在线视频| 欧美xxxxhdvideosex| av在线一区二区三区| 欧洲成人免费aa| 国产在线成人精品午夜| 一区二区三区视频免费观看 | 免费av网站观看| 黑人精品欧美一区二区蜜桃| 国产精品高潮粉嫩av| 日韩精品手机在线| 亚洲精品三级| 国产亚洲成精品久久| 亚洲欧美天堂在线| 国产成年精品| 欧美日韩黄色大片| 国产又爽又黄ai换脸| 亚洲免费国产视频| 男女激情视频一区| 欧美激情在线有限公司| 午夜理伦三级做爰电影| 国产精品视频一区二区三区| 欧美日韩亚洲国产综合| 蜜臀av色欲a片无码精品一区| 国产精品免费播放| 国产精品自产自拍| 国产成人高清激情视频在线观看 | 亚洲日本在线看| 国产又大又长又粗又黄| 超鹏97在线| 国产偷v国产偷v亚洲高清| 欧美在线视频二区| 丰满人妻一区二区三区免费视频| 国产成人综合网站| 国产精品美腿一区在线看| 在线观看日批视频| 亚洲欧美成人| 欧美第一黄网免费网站| 波多野结衣av在线观看| 日韩电影免费网站| 精品国产免费人成电影在线观看四季| 男人的天堂日韩| 爱情岛亚洲播放路线| 亚洲人成精品久久久久久| 影音先锋成人资源网站| www.综合| 亚洲午夜在线视频| 777久久久精品一区二区三区| 在线免费观看的av| 最新久久zyz资源站| 日韩在线导航| 国产系列在线观看| 亚洲少妇30p| 逼特逼视频在线| 亚洲精品自拍| 91精品欧美一区二区三区综合在| 国产av人人夜夜澡人人爽| 日韩五码电影| 色欧美片视频在线观看| 欧美一级在线看| av福利导福航大全在线| 亚洲一区二区在线播放相泽| 国产在线观看福利| 免费h在线看| 欧美日韩国产一区中文午夜| 欧美两根一起进3p做受视频| 欧美激情喷水| 在线免费观看日本欧美| 成年人在线看片| 久久爱www.| 日韩女优毛片在线| 潘金莲一级淫片aaaaaaa| 精品国模一区二区三区欧美| 精品亚洲一区二区| 久久精品成人av| 欧美女人交a| 欧美—级a级欧美特级ar全黄 | 欧美精选一区二区| 一起操在线视频| 少妇高潮一区二区三区99| 亚洲国产美女久久久久| 在线 丝袜 欧美 日韩 制服| 九九免费精品视频在线观看| 一区二区三区视频观看| 黄色免费一级视频| 91精品蜜臀一区二区三区在线| 久久亚洲私人国产精品va| 免费一级黄色大片| 一本久道久久综合婷婷鲸鱼| 亚洲一区二区少妇| 黄色小视频免费观看| 亚洲欧美综合在线精品| 国产精品igao| 日本精品视频| 亚洲国产精品电影| 无码 人妻 在线 视频| 国内精品福利| 奇米影视亚洲狠狠色| 黄色福利在线观看| 亚洲精品菠萝久久久久久久| 波多野结衣av一区二区全免费观看| 成人看片毛片免费播放器| 91精品免费在线观看| 九九热免费在线| 欧美精品日韩| 亚洲最大成人网色| 国产激情视频在线| 欧美精品亚洲二区| 久久成人小视频| 在线日本成人| 国产精品第3页| 大乳在线免费观看| 亚洲综合另类小说| 无人在线观看的免费高清视频| 欧美精品中文字幕亚洲专区| 97超碰蝌蚪网人人做人人爽| 国产乱码在线观看| 成人av在线影院| 一区二区三区电影| 玖玖在线播放| 亚洲美女性视频| 久久精品一区二区三| 国产jizzjizz一区二区| 日韩中文不卡| 日本在线一区二区| 免费99精品国产自在在线| 国产欧美一区二区三区在线看蜜臂| 久久99精品久久久久久国产越南| 国内精品一区二区| 国产精品一卡二卡三卡| 色菇凉天天综合网| 九九热久久免费视频| 韩国精品一区二区| 成人免费视频91| 日本在线成人| 午夜精品三级视频福利| 国产高清在线| 日韩亚洲电影在线| 欧美日韩综合在线观看| 国产一区美女在线| 一区二区三区四区免费视频| 国产精品一区二区美女视频免费看 | 69久久夜色精品国产69| av网站在线免费观看| 日韩欧美999| 丰满岳乱妇一区二区| 影音先锋成人在线电影| 国产精品一区二区三区在线观| 久久精品视频观看| 亚洲国产成人精品久久| 中文字幕 日韩有码| 亚洲欧美成人一区二区三区| 在线免费观看污视频| 欧美日韩国产在线一区| 美女一区视频| 91精品短视频| 国产精品久久久久久久久久久久久 | 无码久久精品国产亚洲av影片| 亚洲免费观看高清完整| 亚洲精品女人久久久| 久久99国产精品麻豆| 无码人妻丰满熟妇区96| 亚洲综合婷婷| 色视频一区二区三区| 依依综合在线| 日韩的一区二区| 亚洲第一精品在线观看 | 日韩精品大片| 欧美wwwsss9999| 亚洲aa在线观看| 国产精品字幕| 欧美中文字幕在线观看| 日本性爱视频在线观看| 精品久久人人做人人爱| 久久久久久久福利| 国产精品欧美一级免费| 日本高清久久久| 噜噜噜躁狠狠躁狠狠精品视频 | 久久激情电影| 青青草原成人在线视频| 中文字幕资源网在线观看| 国产亚洲一区二区在线| 五月婷婷六月丁香| 疯狂做受xxxx欧美肥白少妇| 成人观看免费视频| kk眼镜猥琐国模调教系列一区二区 | 国产十六处破外女视频| 国产精品美女久久久久久久| 国产美女精品久久| 91色综合久久久久婷婷| aⅴ在线免费观看| 亚洲欧美激情诱惑| 成人一区二区免费视频| 国产一区观看| 国产精品久久..4399| 欧美三级第一页| 精品无码av无码免费专区| 久久精品久久久| 99亚洲精品视频| 亚洲午夜精品一区二区国产| 午夜精品福利一区二区| 成人精品亚洲| 97久久天天综合色天天综合色hd | 亚洲国产欧美一区二区三区丁香婷| 国产尤物在线播放| 成人性视频免费网站| 久久国产乱子伦免费精品| 在线日韩欧美| 国内性生活视频| 肉肉av福利一精品导航| 青青在线免费视频| 亚洲欧美网站在线观看| 中国老女人av| 久久成人av| 五码日韩精品一区二区三区视频| 欧美色图国产精品| 最新视频 - x88av| 亚洲高清成人| 欧美日韩在线中文| 日日摸夜夜添夜夜添国产精品| 热久久精品国产| 精品一区二区三区免费毛片爱 | 91视频精品在这里| 精品无码国产污污污免费网站| 国产欧美精品一区| 亚洲一区二区三区黄色| 99久久精品国产导航| 欧美性受xxxxxx黑人xyx性爽| 激情另类小说区图片区视频区| 亚洲女人在线观看| 成人免费看视频| 亚洲自拍偷拍图| av不卡在线观看| 亚洲精品视频久久久| 亚洲国产精华液网站w| 中国一级特黄录像播放| 国产一区二区精品在线观看| 任你躁av一区二区三区| 国产在线不卡一区| 中文字幕乱视频| 中文子幕无线码一区tr| 国产大学生自拍| 色就色 综合激情| 性一交一乱一伧老太| 欧美一区二区福利视频| 中文字幕一区二区三区四区视频 | 日本在线观看www| 欧美精品18videos性欧| 免费欧美电影| 欧美一级片免费在线| 不卡的av影片| 国产精品精品视频| av不卡一区| 国产精品午夜av在线| 国产欧美日韩一区二区三区四区| 久久国产一区| 少妇一区二区三区| 久草精品电影| 91精品国产91久久综合| 免费黄色福利视频| 粉嫩一区二区三区性色av| 丰满圆润老女人hd| 洋洋av久久久久久久一区| 亚洲av综合一区| 日韩毛片在线看| 免费网站免费进入在线| 国产成人av在线播放| 国产欧美三级电影| 97久久精品午夜一区二区| 精品国产91| 亚洲综合视频一区| 久久国产一二区| 手机免费看av片| 一区二区三区成人在线视频| 在线观看 亚洲| 在线亚洲高清视频| 亚洲国产中文字幕在线| 久热精品视频在线观看| 成人涩涩视频| 欧美亚洲精品日韩| 久久要要av| 国产男女激情视频| 91在线播放网址| 国产午夜视频在线播放| 欧美性猛交xxxx偷拍洗澡| 亚洲国产综合一区| 色综合天天狠天天透天天伊人| 欧美日韩破处视频| 亚洲精品乱码久久久久久蜜桃91| 五月激情综合| 久久国产精品网| 国产精品1024久久| 国产免费无码一区二区视频| 欧美三日本三级三级在线播放| 青青草免费在线| 日韩视频在线免费观看| 黄色影院在线看| 肥熟一91porny丨九色丨| 亚洲视频精品| 88av在线播放| 精品电影在线观看| 在线观看毛片av| www.日韩av.com| 91麻豆精品一二三区在线| 欧美日韩亚洲国产成人| 国产在线播放一区| 国产高潮流白浆| 一本一本大道香蕉久在线精品| 91久久国语露脸精品国产高跟| 国产一区二区三区在线免费观看| 欧美日韩视频免费观看| 色综合久久av| 紧缚捆绑精品一区二区| 激情综合五月网| 亚洲第一黄色网| 成人性生交大片免费观看网站| 日韩精品久久一区| 久热成人在线视频| 人妻少妇一区二区| 91精品福利在线| 欧美三级理伦电影| 91丝袜脚交足在线播放| 亚洲高清毛片| 日韩精品无码一区二区三区久久久| 欧美中文字幕一二三区视频| 自拍视频在线| 成人黄动漫网站免费| 国产亚洲激情| 免费观看黄网站| 国产精品嫩草影院com| 91在线精品入口| 久久久久五月天| 国产精品一区三区在线观看| 日本福利视频网站| 久久理论电影网| 毛片基地在线观看| 亚洲欧美在线第一页| 国产高清自产拍av在线| 日本一区视频在线观看| 国产伦精品一区二区三区免费| 亚洲国产精品午夜在线观看| 亚洲欧洲在线看| 日本亚洲视频| 久久久国产欧美| 午夜精品福利一区二区三区蜜桃| 国产又粗又大又爽| 国模精品视频一区二区三区| 国产一区二区观看| 一个人看的视频www| 一道本成人在线| 色yeye免费人成网站在线观看| 欧美裸体网站| 福利视频网站一区二区三区| 日韩国产成人在线| 夜夜嗨av一区二区三区免费区| 一区视频网站|