日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

服务注册与发现框架discovery源码解析

發(fā)布時(shí)間:2024/1/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务注册与发现框架discovery源码解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

discovery是B站開(kāi)源的類(lèi)Eurekad的一款服務(wù)注冊(cè)與發(fā)現(xiàn)框架,簡(jiǎn)單介紹如下:

1. 實(shí)現(xiàn)AP類(lèi)型服務(wù)注冊(cè)發(fā)現(xiàn)系統(tǒng),在可用性極極極極強(qiáng)的情況下,努力保證數(shù)據(jù)最終一致性 2. 與公司k8s平臺(tái)深度結(jié)合,注冊(cè)打通、發(fā)布平滑、naming service等等 3. 網(wǎng)絡(luò)閃斷等異常情況,可自我保護(hù),保證每個(gè)節(jié)點(diǎn)可用 4. 基于HTTP協(xié)議實(shí)現(xiàn)接口,簡(jiǎn)單易用,維護(hù)各流行語(yǔ)言SDK## 相對(duì)Netflix Eureka的改進(jìn)* 長(zhǎng)輪詢監(jiān)聽(tīng)?wèi)?yīng)用變更(Eureka定期30s拉取一次) * 只拉取感興趣的AppID實(shí)例(Eureka一拉就是全部,無(wú)法區(qū)分) * 合并node之間的同步請(qǐng)求/(ㄒoㄒ)/~~其實(shí)還沒(méi)實(shí)現(xiàn),是個(gè)TODO * Dashboard騷操作~ * 多注冊(cè)中心信息同步支持 * 更完善的日志記錄

下面簡(jiǎn)單就discovery的源碼進(jìn)項(xiàng)分析,首先先熟悉一下框架的一些基本概念:

0. 通過(guò)AppID(服務(wù)名)和hostname定位實(shí)例 1. Node: discovery server節(jié)點(diǎn) 2. Provider: 服務(wù)提供者,目前托管給k8s平臺(tái),容器啟動(dòng)后發(fā)起register請(qǐng)求給Discover server,后定期(30s)心跳一次 3. Consumer: 啟動(dòng)時(shí)拉取node節(jié)點(diǎn)信息,后隨機(jī)選擇一個(gè)node發(fā)起long polling(30s一次)拉取服務(wù)instances列表 4. Instance: 保存在node內(nèi)存中的AppID對(duì)應(yīng)的容器節(jié)點(diǎn)信息,包含hostname/ip/service等

比較重要的一些特色是:

1. 心跳復(fù)制(Peer to Peer),數(shù)據(jù)一致性的保障:* AppID注冊(cè)時(shí)根據(jù)當(dāng)前時(shí)間生成dirtyTimestamp,nodeA向nodeB同步(register)時(shí),nodeB可能有以下兩種情況:* 返回-404 則nodeA攜帶dirtyTimestamp向nodeB發(fā)起注冊(cè)請(qǐng)求,把最新信息同步:1. nodeB中不存在實(shí)例2. nodeB中dirtyTimestamp較小* 返回-409 nodeB不同意采納nodeA信息,且返回自身信息,nodeA使用該信息更新自身* AppID注冊(cè)成功后,Provider每(30s)發(fā)起一次heartbeat請(qǐng)求,處理流程如上 2. Instance管理* 正常檢測(cè)模式,隨機(jī)分批踢掉無(wú)心跳Instance節(jié)點(diǎn),盡量避免單應(yīng)用節(jié)點(diǎn)被一次全踢* 網(wǎng)絡(luò)閃斷和分區(qū)時(shí)自我保護(hù)模式* 60s內(nèi)丟失大量(小于Instance總數(shù)*2*0.85)心跳數(shù),“好”“壞”Instance信息都保留* 所有node都會(huì)持續(xù)提供服務(wù),單個(gè)node的注冊(cè)和發(fā)現(xiàn)功能不受影響* 最大保護(hù)時(shí)間,防止分區(qū)恢復(fù)后大量原先Instance真的已經(jīng)不存在時(shí),一直處于保護(hù)模式 3. Consumer客戶端* 長(zhǎng)輪詢+node推送,服務(wù)發(fā)現(xiàn)準(zhǔn)實(shí)時(shí)* 訂閱式,只需要關(guān)注想要關(guān)注的AppID的Instance列表變化* 緩存實(shí)例Instance列表信息,保證與node網(wǎng)絡(luò)不通等無(wú)法訪問(wèn)到node情況時(shí)原先的Instance可用

下面開(kāi)始進(jìn)行源碼分析:

discovery的入口文件非常簡(jiǎn)單:

func main() {//解析配置文件flag.Parse()if err := conf.Init(); err != nil {log.Error("conf.Init() error(%v)", err)panic(err)}fmt.Println("conf", conf.Conf)log.Init(conf.Conf.Log)//開(kāi)始一個(gè)新的discovery中心dis, cancel := discovery.New(conf.Conf)//本地實(shí)例的http監(jiān)聽(tīng)端口,提供了一系列的http接口,比如注冊(cè),更新和下線接口等http.Init(conf.Conf, dis)// init signalc := make(chan os.Signal, 1)signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)for {s := <-clog.Info("discovery get a signal %s", s.String())switch s {//如果監(jiān)聽(tīng)到停止信號(hào),則進(jìn)行收尾工作處理,在cancel函數(shù)中具體說(shuō)明case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:cancel()time.Sleep(time.Second)log.Info("discovery quit !!!")returncase syscall.SIGHUP:default:return}} }

其中最核心的函數(shù)是dis, cancel := discovery.New(conf.Conf),下面詳細(xì)分析這個(gè)函數(shù):

// New get a discovery. func New(c *conf.Config) (d *Discovery, cancel context.CancelFunc) {//構(gòu)建一個(gè)新的Discoveryd = &Discovery{protected: c.EnableProtect,c: c,client: http.NewClient(c.HTTPClient),//初始化服務(wù)注冊(cè)中心,并開(kāi)始協(xié)程進(jìn)行保護(hù)模式下的邏輯處理registry: registry.NewRegistry(c),}//讀取配置文件中的zone和node相關(guān)的配置讀取出來(lái),返回Nodes結(jié)構(gòu)體// Nodes is helper to manage lifecycle of a collection of Nodes.//type Nodes struct {// nodes []*Node //Node切片數(shù)組// zones map[string][]*Node// selfAddr string //本地http監(jiān)聽(tīng)的地址//}d.nodes.Store(registry.NewNodes(c))//將除了本地http監(jiān)聽(tīng)端口的host之外其他的host,拉取出其他host的所有實(shí)例,在本地進(jìn)行注冊(cè)d.syncUp()//注冊(cè)自己本身,并每隔30s進(jìn)行一次心跳檢測(cè)cancel = d.regSelf()//開(kāi)始協(xié)程進(jìn)行長(zhǎng)輪訓(xùn),實(shí)現(xiàn)服務(wù)注冊(cè)進(jìn)來(lái)后準(zhǔn)實(shí)時(shí)發(fā)現(xiàn)go d.nodesproc()//如果成功進(jìn)行了兩輪renew循環(huán),則關(guān)閉保護(hù)模式//保護(hù)模式下不再接受其他Discovery中心的拉取和推送請(qǐng)求,之前提供的http接口也失效,但是本地Discovery還是可以正常提供服務(wù)注冊(cè)go d.exitProtect()return }

這個(gè)函數(shù)中包括了一系列的邏輯,先來(lái)看d.syncUp()函數(shù)

// syncUp populates the registry information from a peer eureka node. func (d *Discovery) syncUp() {nodes := d.nodes.Load().(*registry.Nodes)//將配置文件中的所有node拿出來(lái),循環(huán)處理for _, node := range nodes.AllNodes() {log.Info("syncUp nodes are %v", node)//如果是自己本身,則跳過(guò)if nodes.Myself(node.Addr) {continue}uri := fmt.Sprintf(_fetchAllURL, node.Addr)var res struct {Code int `json:"code"`Data map[string][]*model.Instance `json:"data"`}//獲取其他節(jié)點(diǎn)的所有instance實(shí)例,如果其他節(jié)點(diǎn)沒(méi)起來(lái)或者fetch的時(shí)候發(fā)生異常,則跳過(guò)這個(gè)節(jié)點(diǎn)的處理if err := d.client.Get(context.TODO(), uri, "", nil, &res); err != nil {log.Error("d.client.Get(%v) error(%v)", uri, err)continue}log.Info("fetch res are %v", res, res.Code)if res.Code != 0 {log.Error("service syncup from(%s) failed ", uri)continue}// sync success from other node,exit protected mode//如果能正常從其他節(jié)點(diǎn)拉取到他們的實(shí)例信息,則表示節(jié)點(diǎn)之間的通訊是正常的,如果配置文件中是開(kāi)啟保護(hù)模式的話,這個(gè)時(shí)候就可以關(guān)閉保護(hù)模式了d.protected = falsefor _, is := range res.Data {for _, i := range is {//將每個(gè)節(jié)點(diǎn)中的實(shí)例注冊(cè)到本地_ = d.registry.Register(i, i.LatestTimestamp)}}// NOTE: no return, make sure that all instances from other nodes register into self.}//將本地node狀態(tài)置為正常nodes.UP() }

上面的流程主要是將其他節(jié)點(diǎn)的實(shí)例拉過(guò)來(lái),然后注冊(cè)到本地,所以下面我們來(lái)看本地注冊(cè)干了些啥

/ Register a new instance. func (r *Registry) Register(ins *model.Instance, latestTime int64) (err error) {//初始化一個(gè)APP實(shí)例,APP的結(jié)構(gòu)在這里放一下,方便后面的理解/*// App Instances distinguished by hostnametype App struct {AppID stringZone stringinstances map[string]*InstancelatestTimestamp int64 lock sync.RWMutex}*/a := r.newApp(ins)//將傳入的ins傳入后,copy后返回一個(gè)全新的instance,類(lèi)似于快照,記錄這個(gè)時(shí)刻的insi, ok := a.NewInstance(ins, latestTime)if ok {//如果注冊(cè)成功,則將expPerMin+2(+2是因?yàn)槊糠昼奷iscovery會(huì)renew兩次,也計(jì)算出相應(yīng)的expThreshold,方便后面的保護(hù)模式的計(jì)算)r.gd.incrExp()}// NOTE: make sure free poll before update appid latest timestamp.//既然有新的實(shí)例注冊(cè)進(jìn)來(lái)了,當(dāng)然要廣播出去,讓本地去更新實(shí)例緩存了r.broadcast(i.Env, i.AppID)return }

先來(lái)看r.newApp(ins)這個(gè)函數(shù)

func (r *Registry) newApp(ins *model.Instance) (a *model.App) {//先實(shí)例化一個(gè)appsas, _ := r.newapps(ins.AppID, ins.Env)//然后開(kāi)始搞一個(gè)新的App實(shí)例a, _ = as.NewApp(ins.Zone, ins.AppID, ins.LatestTimestamp)return }func (r *Registry) newapps(appid, env string) (a *model.Apps, ok bool) {//key是appid-env的stringkey := appsKey(appid, env)r.aLock.Lock()//先看下這個(gè)key是否有了Apps了/*// Apps app distinguished by zonetype Apps struct {apps map[string]*Applock sync.RWMutexlatestTimestamp int64}*/if a, ok = r.appm[key]; !ok {a = model.NewApps()r.appm[key] = a}r.aLock.Unlock()return }// NewApp news a app by appid. If ok=false, returns the app of already exist. func (p *Apps) NewApp(zone, appid string, lts int64) (a *App, new bool) {p.lock.Lock()a, ok := p.apps[zone]if !ok {a = NewApp(zone, appid)p.apps[zone] = a}if lts <= p.latestTimestamp {// insure increaselts = p.latestTimestamp + 1}//注意這里,在注冊(cè)的邏輯里,如果有新的實(shí)例注冊(cè)進(jìn)來(lái)的話,latestTimestamp這個(gè)字段是有更新的//正常情況下,會(huì)用注冊(cè)的實(shí)例的注冊(cè)時(shí)間進(jìn)行更新p.latestTimestamp = ltsp.lock.Unlock()new = !okreturn }

通過(guò)上面返回的App實(shí)例,初始化Instance信息

// NewInstance new a instance. func (a *App) NewInstance(ni *Instance, latestTime int64) (i *Instance, ok bool) {i = new(Instance)a.lock.Lock()oi, ok := a.instances[ni.Hostname]if ok {ni.UpTimestamp = oi.UpTimestampif ni.DirtyTimestamp < oi.DirtyTimestamp {log.Warn("register exist(%v) dirty? timestamp over than caller(%v)", oi, ni)ni = oi}}a.instances[ni.Hostname] = nia.updateLatest(latestTime)*i = *nia.lock.Unlock()ok = !okreturn }

實(shí)例已經(jīng)注冊(cè)好了,下面就廣播出去吧

// broadcast on poll by chan. // NOTE: make sure free poll before update appid latest timestamp. func (r *Registry) broadcast(env, appid string) {key := pollKey(env, appid)r.cLock.Lock()conns, ok := r.conns[key]//如果是剛啟動(dòng)的時(shí)候?qū)⑵渌?jié)點(diǎn)的實(shí)例注冊(cè)進(jìn)來(lái)的話,這里是空的,在這里直接返回fmt.Println("conns", conns)if !ok {fmt.Println("no co")r.cLock.Unlock()return} 第一次廣播的時(shí)候,直接返回 ....... }

至此,其他節(jié)點(diǎn)的處理流程就處理完了,下面我們看下將自己本身注冊(cè)進(jìn)來(lái)

func (d *Discovery) regSelf() context.CancelFunc {ctx, cancel := context.WithCancel(context.Background())now := time.Now().UnixNano()ins := &model.Instance{Region: d.c.Env.Region,Zone: d.c.Env.Zone,Env: d.c.Env.DeployEnv,Hostname: d.c.Env.Host,AppID: model.AppID,Addrs: []string{"http://" + d.c.HTTPServer.Addr,},Status: model.InstanceStatusUP,RegTimestamp: now,UpTimestamp: now,LatestTimestamp: now,RenewTimestamp: now,DirtyTimestamp: now,}//將自己注冊(cè)進(jìn)來(lái),并將自身的實(shí)例信息同步到其他的節(jié)點(diǎn)進(jìn)行注冊(cè)d.Register(ctx, ins, now, false, false)go func() {ticker := time.NewTicker(30 * time.Second)defer ticker.Stop()for {select {case <-ticker.C:arg := &model.ArgRenew{AppID: ins.AppID,Zone: d.c.Env.Zone,Env: d.c.Env.DeployEnv,Hostname: d.c.Env.Host,}//每隔30秒renew一下if _, err := d.Renew(ctx, arg); err != nil && err == ecode.NothingFound {log.Info("renew self err is %v", err)d.Register(ctx, ins, now, false, false)}case <-ctx.Done():arg := &model.ArgCancel{AppID: model.AppID,Zone: d.c.Env.Zone,Env: d.c.Env.DeployEnv,Hostname: d.c.Env.Host,}if err := d.Cancel(context.Background(), arg); err != nil {log.Error("d.Cancel(%+v) error(%v)", arg, err)}return}}}()return cancel }

?這里的主要邏輯是將自身注冊(cè)進(jìn)來(lái),并每隔30秒renew一次,將自己的信息同步到其他節(jié)點(diǎn),下面分析一下renew的邏輯

// Renew marks the given instance of the given app name as renewed, and also marks whether it originated from replication. func (d *Discovery) Renew(c context.Context, arg *model.ArgRenew) (i *model.Instance, err error) {log.Info("renew args are %v", arg)//獲取自身實(shí)例信息i, ok := d.registry.Renew(arg)if !ok {err = ecode.NothingFoundlog.Error("renew appid(%s) hostname(%s) zone(%s) env(%s) error", arg.AppID, arg.Hostname, arg.Zone, arg.Env)return}//同步信息到其他節(jié)點(diǎn)(如果需要的話,這種情況下同步后直接退出了)if !arg.Replication {_ = d.nodes.Load().(*registry.Nodes).Replicate(c, model.Renew, i, arg.Zone != d.c.Env.Zone)return}//如果renew的DirtyTimestamp大于實(shí)例的DirtyTimestamp,返回-404,滿足如下條件中的第二種條件// * 返回-404 則nodeA攜帶dirtyTimestamp向nodeB發(fā)起注冊(cè)請(qǐng)求,把最新信息同步:// 1. nodeB中不存在實(shí)例// 2. nodeB中dirtyTimestamp較小if arg.DirtyTimestamp > i.DirtyTimestamp {err = ecode.NothingFound} else if arg.DirtyTimestamp < i.DirtyTimestamp {err = ecode.Conflict}return }//同步邏輯 // Replicate replicate information to all nodes except for this node. func (ns *Nodes) Replicate(c context.Context, action model.Action, i *model.Instance, otherZone bool) (err error) {log.Warn("nodes is %v,len is %v", ns.nodes, len(ns.nodes))if len(ns.nodes) == 0 {return}eg, c := errgroup.WithContext(c)for _, n := range ns.nodes {log.Warn("Replicate node is %v", n)//將自身實(shí)例同步到其他節(jié)點(diǎn)if !ns.Myself(n.addr) {ns.action(c, eg, action, n, i)}}if !otherZone {for _, zns := range ns.zones {if n := len(zns); n > 0 {ns.action(c, eg, action, zns[rand.Intn(n)], i)}}}err = eg.Wait()return }//action函數(shù)具體邏輯 func (ns *Nodes) action(c context.Context, eg *errgroup.Group, action model.Action, n *Node, i *model.Instance) {log.Info("action arg is %v", i)switch action {case model.Register:eg.Go(func() error {_ = n.Register(c, i)return nil})case model.Renew://開(kāi)啟協(xié)程去renew到其他節(jié)點(diǎn)eg.Go(func() error {_ = n.Renew(c, i)return nil})case model.Cancel:eg.Go(func() error {_ = n.Cancel(c, i)return nil})} }//n.Renew函數(shù)的邏輯 // Renew send the heartbeat information of Instance receiving by this node to the peer node represented. // If the instance does not exist the node, the instance registration information is sent again to the peer node. func (n *Node) Renew(c context.Context, i *model.Instance) (err error) {var res *model.Instanceerr = n.call(c, model.Renew, i, n.renewURL, &res)log.Info("renew other node info are %v,url is %v,res is %v", i, n.renewURL, err)if err == ecode.ServerErr {log.Warn("node be called(%s) instance(%v) error(%v)", n.renewURL, i, err)n.status = model.NodeStatusLostreturn}n.status = model.NodeStatusUPif err == ecode.NothingFound {log.Warn("node be called(%s) instance(%v) error(%v)", n.renewURL, i, err)err = n.call(c, model.Register, i, n.registerURL, nil)return}// NOTE: register response instance whitch in conflict with peer nodeif err == ecode.Conflict && res != nil {err = n.call(c, model.Register, res, n.pRegisterURL, nil)}return }//重點(diǎn)在于n.call(c, model.Renew, i, n.renewURL, &res) func (n *Node) call(c context.Context, action model.Action, i *model.Instance, uri string, data interface{}) (err error) {params := url.Values{}params.Set("region", i.Region)params.Set("zone", i.Zone)params.Set("env", i.Env)params.Set("appid", i.AppID)params.Set("hostname", i.Hostname)params.Set("from_zone", "true")//同步到其他節(jié)點(diǎn)的時(shí)候,一般是走入為true的邏輯分支if n.otherZone {params.Set("replication", "false")} else {params.Set("replication", "true")}switch action {case model.Register:params.Set("addrs", strings.Join(i.Addrs, ","))params.Set("status", strconv.FormatUint(uint64(i.Status), 10))params.Set("version", i.Version)meta, _ := json.Marshal(i.Metadata)params.Set("metadata", string(meta))params.Set("reg_timestamp", strconv.FormatInt(i.RegTimestamp, 10))params.Set("dirty_timestamp", strconv.FormatInt(i.DirtyTimestamp, 10))params.Set("latest_timestamp", strconv.FormatInt(i.LatestTimestamp, 10))case model.Renew:params.Set("dirty_timestamp", strconv.FormatInt(i.DirtyTimestamp, 10))case model.Cancel:params.Set("latest_timestamp", strconv.FormatInt(i.LatestTimestamp, 10))}var res struct {Code int `json:"code"`Data json.RawMessage `json:"data"`}//請(qǐng)求其他節(jié)點(diǎn)的renewUrl(http接口)if err = n.client.Post(c, uri, "", params, &res); err != nil {log.Error("node be called(%s) instance(%v) error(%v)", uri, i, err)return}if res.Code != 0 {log.Error("node be called(%s) instance(%v) response code(%v)", uri, i, res.Code)if err = ecode.Int(res.Code); err == ecode.Conflict {_ = json.Unmarshal([]byte(res.Data), data)}}return }

renew的時(shí)候的邏輯是根據(jù)renew的參數(shù)找到自身實(shí)例,再將自身信息同步到其他節(jié)點(diǎn)

重點(diǎn)講解一下renew的邏輯:

在將自身信息注冊(cè)到其他的discovery之后,會(huì)有兩種情況發(fā)生

1.其他節(jié)點(diǎn)向本地發(fā)起renew請(qǐng)求

先是從本地緩存中查找到renew請(qǐng)求arg中的zone,env和appid找到之前注冊(cè)在本地的app信息,再通過(guò)arg中的host找到app中的instances(map)中的instance信息(在這個(gè)過(guò)程中會(huì)更新實(shí)例的renewTimestamp),正常情況下就沒(méi)有其他的邏輯了,因?yàn)槠渌姆种Ф歼M(jìn)不去

2.本地節(jié)點(diǎn)更新

每隔30秒本地會(huì)拿著conf文件中的zone,env,host和在本地注冊(cè)時(shí)候的AppID作為參數(shù)進(jìn)行renew,

也是先找出本地緩存中的實(shí)例信息,然后同步給其他node(http POST請(qǐng)求其他discovery節(jié)點(diǎn)的接口地址),在同步其他節(jié)點(diǎn)的時(shí)候,會(huì)從zones(初始化注冊(cè)時(shí)候的其他zone的節(jié)點(diǎn)信息)切片中隨機(jī)選取一個(gè)node進(jìn)行同步

上述注冊(cè)其他節(jié)點(diǎn)和自身節(jié)點(diǎn)完成后,就是一個(gè)長(zhǎng)輪訓(xùn),實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)準(zhǔn)實(shí)時(shí)

func (d *Discovery) nodesproc() {var (lastTs int64)for {arg := &model.ArgPolls{AppID: []string{model.AppID},Env: d.c.Env.DeployEnv,Hostname: d.c.Env.Host,LatestTimestamp: []int64{lastTs},}log.Info("polls times is %v", time.Now().Format("2006-01-02 15:04:05"))//返回一個(gè)消費(fèi)者chanch, _, _, err := d.registry.Polls(arg)if err != nil && err != ecode.NotModified {log.Error("d.registry(%v) error(%v)", arg, err)time.Sleep(time.Second)continue}log.Info("wait for ch out")apps := <-chins, ok := apps[model.AppID]fmt.Println("go process ins", ins)if !ok || ins == nil {return}var (nodes []stringzones = make(map[string][]string))for _, ins := range ins.Instances {for _, in := range ins {log.Info("range ins are %v", in)for _, addr := range in.Addrs {u, err := url.Parse(addr)if err == nil && u.Scheme == "http" {if in.Zone == d.c.Env.Zone {nodes = append(nodes, u.Host)} else {zones[in.Zone] = append(zones[in.Zone], u.Host)}}}}}lastTs = ins.LatestTimestampc := new(conf.Config)*c = *d.cc.Nodes = nodesc.Zones = zonesns := registry.NewNodes(c)ns.UP()d.nodes.Store(ns)log.Info("discovery changed nodes:%v zones:%v", nodes, zones)} }

這個(gè)準(zhǔn)實(shí)時(shí)的實(shí)現(xiàn)我的理解是:

1.在d.registry.Polls(arg)方法調(diào)用后會(huì)返回一個(gè)消費(fèi)者channel,然后會(huì)在for循環(huán)中會(huì)阻塞在這個(gè)channel里,一旦有新的節(jié)點(diǎn)注冊(cè)進(jìn)來(lái)的時(shí)候(我們可以看一下,新實(shí)例注冊(cè)的時(shí)候,會(huì)進(jìn)行廣播通知,這里有個(gè)

會(huì)往這個(gè)channel中寫(xiě)入新注冊(cè)的instance信息。)就會(huì)立馬收到注冊(cè)信息,然后更新本地實(shí)例緩存,做到服務(wù)發(fā)現(xiàn)近乎實(shí)時(shí)。

還有discovery的自保護(hù)模式,在下一篇中進(jìn)行分析了。?

總結(jié)

以上是生活随笔為你收集整理的服务注册与发现框架discovery源码解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

日韩国产高清在线 | 麻豆国产在线播放 | 国产视频一区在线播放 | 亚洲精品视频在线免费 | 国产精品1000| 午夜三级福利 | 天天爽夜夜爽人人爽一区二区 | 久久99精品国产麻豆宅宅 | 四虎在线影视 | 日韩精品视频免费在线观看 | 在线看av的网址 | 欧美久久久久久久久久 | 日韩电影在线观看一区二区三区 | 国产精品久久久久久69 | 久久最新 | 最近高清中文字幕在线国语5 | 粉嫩av一区二区三区免费 | 亚洲欧美视频一区二区三区 | 久免费视频 | 国产96精品 | 国产三级精品在线 | 88av网站| 狠狠狠色| 亚洲在线视频观看 | 一级特黄aaa大片在线观看 | 丁香免费视频 | 香蕉免费 | 中文字幕丝袜 | av网站免费在线 | 爱爱av网| 黄色三级网站在线观看 | 日本99干网 | 国产精品理论片 | 久久国产露脸精品国产 | 福利视频一区二区 | 色偷偷网站视频 | 日韩精品视频免费在线观看 | 69xxxx欧美| 91精品在线视频观看 | 久久精品国产久精国产 | 一级片视频在线 | 色姑娘综合天天 | 天天干夜夜擦 | 最新av中文字幕 | 久久久免费观看 | www.国产毛片 | 国产午夜精品免费一区二区三区视频 | 三级小视频在线观看 | 精品亚洲成a人在线观看 | 国产精品乱码久久 | 久久婷婷影视 | 玖玖玖影院 | 精品中文字幕视频 | 国产中文字幕亚洲 | 国产精品女同一区二区三区久久夜 | 免费观看的黄色片 | 天天天天射 | 日韩av电影中文字幕 | 在线你懂的视频 | 中文字幕乱码亚洲精品一区 | 超碰人人做 | 丁香久久激情 | 国产a高清 | 99这里都是精品 | 国产精品剧情在线亚洲 | 精品久久久免费视频 | 国产 日韩 欧美 中文 在线播放 | 色综合夜色一区 | 在线蜜桃视频 | 一区二区三区四区五区在线视频 | 国产精品福利一区 | 午夜男人影院 | 久久99操| 国产亚洲在线视频 | 91桃色在线播放 | 黄色片网站免费 | 久章操 | 狠狠插狠狠干 | 成人在线免费观看网站 | 午夜精品久久久久久久99无限制 | 日韩欧美xxxx | 国产免费视频一区二区裸体 | 久久综合色天天久久综合图片 | 啪啪免费试看 | 日日精品| 在线观看国产 | 国产免费又粗又猛又爽 | 91麻豆精品久久久久久 | 在线观看日本韩国电影 | 亚洲精品国久久99热 | 一区二区三区免费在线 | 国产九九热视频 | 久久99国产精品免费网站 | 婷婷在线看 | 久久精品视频国产 | 69亚洲精品 | 国产3p视频 | 二区精品视频 | 婷婷综合激情 | 开心激情网五月天 | 69国产盗摄一区二区三区五区 | 国产aaa免费视频 | 色99导航| 免费看国产精品 | 国产又粗又猛又爽又黄的视频免费 | 国产精品一区免费观看 | 黄色国产高清 | 成人日韩av| 日韩在线视频国产 | 天天躁天天躁天天躁婷 | 中文字幕中文字幕在线中文字幕三区 | 久久亚洲精品国产亚洲老地址 | 丁香激情五月婷婷 | 国产一二区在线观看 | 日日操操操 | 黄色成人毛片 | 久久久久久久久久网 | 欧美激情综合色综合啪啪五月 | 国产成人不卡 | 在线一区av| 免费a级毛片在线看 | 国产精品小视频网站 | 日韩精品一区二区三区免费观看视频 | av播放在线 | 欧美一级日韩三级 | 四虎影视久久久 | 天天操天天色天天 | 五月丁香 | 免费在线观看av网址 | 天天操夜操| 91精品在线免费观看视频 | 国产麻豆视频在线观看 | 在线观看免费成人 | 欧美伦理电影一区二区 | 亚洲精品午夜久久久 | 91在线91拍拍在线91 | 在线国产视频 | 国产视频精选在线 | 欧美在线aaa | 在线天堂中文www视软件 | 在线观看亚洲精品 | 国产丝袜高跟 | 欧美日韩啪啪 | www.伊人网| 一区二区三区免费 | 国产成人精品亚洲 | 99久久99久久精品国产片果冰 | 在线国产专区 | 色妞色视频一区二区三区四区 | 国产精品国内免费一区二区三区 | 欧美日韩高清一区二区 国产亚洲免费看 | 九色最新网址 | 亚洲午夜久久久久久久久 | 国产精品久久9 | 六月色丁香 | 在线a人v观看视频 | 色噜噜噜噜 | 丁香婷婷激情网 | 在线国产一区二区三区 | 色黄www小说 | 黄色网址在线播放 | 99国产精品视频免费观看一公开 | 久久久久国产精品厨房 | 欧美日韩久久一区 | 丁香六月天婷婷 | 欧美性色黄大片在线观看 | 日韩精品一二三 | 亚洲成人中文在线 | 福利一区视频 | 久久精品亚洲精品国产欧美 | 九九三级毛片 | 在线电影a| 欧美日韩高清一区二区 国产亚洲免费看 | 久久久视频在线 | 欧洲成人免费 | 色姑娘综合 | 久久久精品欧美一区二区免费 | 91精品国产综合久久婷婷香蕉 | 亚洲视频电影在线 | 日本中文字幕观看 | 91中文在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 三级黄色理论片 | 久久99视频 | 国产馆在线播放 | 青春草免费视频 | 伊人婷婷 | 日韩理论电影网 | 亚洲午夜久久久综合37日本 | 一区二区三区高清不卡 | 欧美激情视频在线免费观看 | 午夜精品久久久久久久99无限制 | 激情 亚洲| 日本aaaa级毛片在线看 | 亚洲蜜桃在线 | 丝袜美女在线 | 亚州精品一二三区 | 日韩小视频 | 久草在线资源观看 | 91免费观看视频网站 | 国产成人精品一区二区三区 | 中文字幕在线观看网站 | 日韩欧美区 | 久久免费视频6 | 丁香av | 天天操人人干 | 国内一区二区视频 | 中文字幕在线观看完整 | 欧美坐爱视频 | 97人人人人 | 日日干日日操 | 成人a视频片观看免费 | 国产亚洲成av人片在线观看桃 | 欧美激情综合色综合啪啪五月 | 亚洲精品成人av在线 | 亚洲午夜久久久久久久久久久 | www久久国产| 欧日韩在线 | 日本精品久久久久久 | 成 人 黄 色 片 在线播放 | 婷婷六月久久 | 国产成人资源 | 国产乱对白刺激视频在线观看女王 | 午夜精品久久久久久久99无限制 | 日韩精品黄 | 亚洲精品国产高清 | 亚洲一区二区三区91 | 久久视频99 | 一区二区日韩av | 免费一级片久久 | 夜夜骑日日 | av免费电影网站 | 91亚洲国产成人久久精品网站 | 美女视频久久黄 | 国产亚洲视频在线观看 | 亚洲欧洲视频 | 免费久久99精品国产婷婷六月 | 国产精品激情 | 亚洲电影一区二区 | 91高清不卡| 亚洲91中文字幕无线码三区 | 久久成人高清 | 久久观看免费视频 | 四虎影视成人永久免费观看视频 | 天天干一干 | 97综合网| 日韩电影一区二区在线观看 | 一区二区激情视频 | 日日躁天天躁 | 国产亚洲精品久久网站 | 521色香蕉网站在线观看 | 日韩在线视频在线观看 | 黄色一级大片免费看 | 亚洲成人免费在线观看 | 欧美一区二区伦理片 | av黄色免费在线观看 | 96国产精品| 人人要人人澡人人爽人人dvd | 手机看国产毛片 | 狠狠色伊人亚洲综合网站野外 | 国产精品99精品久久免费 | 天天爱综合 | 免费在线成人av电影 | 日日夜夜av | 二区三区精品 | 国产精品自产拍在线观看 | 国产一区二区久久 | 亚洲无吗天堂 | 天天天天色射综合 | 激情综合色图 | 日本中文一区二区 | 久久精品中文字幕少妇 | 久久国产精品视频观看 | 国产色视频123区 | 精品久久久久久亚洲 | 91日韩国产| 啪啪免费试看 | 91欧美国产 | 亚洲欧美国产精品18p | 国产精品中文字幕av | 超碰在线官网 | 天天干一干 | 久久国际影院 | 婷婷国产视频 | 国产精品美女久久久久久2018 | 久久久久国产一区二区 | 午夜18视频在线观看 | 国产视频精品久久 | 欧美小视频在线 | 国产色综合 | 婷婷久久五月 | 亚洲欧美视频一区二区三区 | 国产99re| 日韩理论电影在线观看 | 插婷婷 | 精品国产一区二区三区久久 | 欧美精品在线观看一区 | 日韩动漫免费观看高清完整版在线观看 | 久草在线免费播放 | www.777奇米| 午夜精品久久久久久久久久久久久久 | 欧美激情精品久久久久久 | av网址aaa| 成人在线免费视频观看 | 人人爽人人爽人人爽 | 欧洲色综合 | 国产黄色片一级三级 | 97超碰成人在线 | 精品久久一区二区 | 亚洲激情小视频 | 美女av在线免费 | 国产精品久久久久久久午夜 | 免费看污黄网站 | 在线电影中文字幕 | 久久精品视频网址 | 九九久久影视 | 日韩免费av片 | 国产精在线 | 久久伦理电影 | 久久玖 | 色网站黄 | 国产美女精品在线 | 中文在线中文资源 | 日韩欧美v | 91麻豆高清视频 | 91欧美视频网站 | 国产欧美综合视频 | 久久精品8 | 欧美孕妇与黑人孕交 | 四虎永久精品在线 | 国产精品麻豆91 | 亚洲精品国产精品国自产观看 | 国产丝袜一区二区三区 | 中文字幕一区二区三区久久 | 国产精品福利视频 | 91在线视频免费播放 | 成年人免费看的视频 | 日韩视频二区 | 91视频在线播放视频 | 97在线观看视频国产 | 国产午夜亚洲精品 | 成人在线电影观看 | 在线观看亚洲精品视频 | 一二区av| 免费在线看v | 国产一区二区视频在线播放 | 在线观看av国产 | 日日干天天射 | 91在线视频观看 | 精品一区二区三区在线播放 | 九九免费观看全部免费视频 | 夜色资源站wwwcom | 亚洲精品视频大全 | 91av在线视频免费观看 | 国产在线1区 | 欧美亚洲成人xxx | 91免费日韩 | 人人干在线观看 | 伊人久久电影网 | 日韩在线电影一区 | 午夜丁香视频在线观看 | 夜夜爽88888免费视频4848 | 欧洲视频一区 | 免费大片av | 日本中文字幕一二区观 | 成人亚洲精品久久久久 | 国产精品www| 人人看人人| 美女一区网站 | 欧美一二三四在线 | 日韩高清在线不卡 | 国产三级精品三级在线观看 | 日韩精品免费在线视频 | 日日夜夜天天久久 | 很黄很色很污的网站 | 91精品国产综合久久福利不卡 | 开心激情综合网 | 国产精品久久一卡二卡 | 悠悠av资源片| 天天综合网国产 | 伊人永久| 免费a级毛片在线看 | 国产成人免费在线 | 91在线精品一区二区 | 视频 国产区 | 国产高清成人av | 日韩精品网址 | 久久爱综合 | 欧美粗又大 | 日韩v欧美v日本v亚洲v国产v | 超碰在线91 | 免费观看的av网站 | 国产色综合天天综合网 | 天天干天天看 | 在线天堂8√ | 成年人在线免费视频观看 | 免费欧美精品 | 日韩综合色 | 欧美一级片 | 日韩免费精品 | 久黄色| 国产在线污 | 日韩免| 超碰人人草 | 96精品高清视频在线观看软件特色 | 国产精品高清一区二区三区 | 9热精品| 91麻豆精品 | 人人爽人人爽人人片av免 | av中文字幕亚洲 | 国产精品一区二区三区观看 | 亚洲精品tv久久久久久久久久 | 美女网站免费福利视频 | 亚洲视频h | 日韩欧美综合精品 | 婷婷激情五月 | 精品国产伦一区二区三区观看说明 | 精品久久久久久亚洲 | aaa日本高清在线播放免费观看 | 91av在线免费观看 | 免费av大片| 久久久久一区二区三区 | 最新中文字幕在线观看视频 | 亚洲乱码中文字幕综合 | www久久国产 | 久久99精品久久久久久清纯直播 | 国产精品久久久久9999吃药 | 成年人在线免费看视频 | 欧美日韩在线免费观看 | 国产乱对白刺激视频在线观看女王 | 成人免费在线电影 | 国产精品视频地址 | 久久天天躁夜夜躁狠狠85麻豆 | 欧美精品久久久久性色 | 成人免费91 | 国产91全国探花系列在线播放 | 久久国产高清 | 久久婷婷亚洲 | 中文在线字幕免费观 | 久久与婷婷| 在线观看福利网站 | av电影在线观看完整版一区二区 | 国产在线a不卡 | 欧美激情综合五月色丁香小说 | 国内精品在线观看视频 | 激情亚洲综合在线 | 一区二区三区国产精品 | 亚洲va欧美va | 奇米网8888 | 欧美日韩视频免费 | 五月天综合色激情 | 超薄丝袜一二三区 | 日批视频 | 91网免费看 | 亚洲国产精品va在线看黑人动漫 | 成人影音av| 国产精品国产三级国产aⅴ入口 | 久久精品小视频 | 成人黄色大片在线免费观看 | 午夜精品久久久久久久99婷婷 | 亚洲精品视频免费在线观看 | 色999五月色 | 99国产精品久久久久老师 | 在线成人av | 国产精品久久久久久久免费大片 | 欧美成人影音 | 香蕉视频网址 | 亚洲免费在线视频 | 在线观看香蕉视频 | 美女视频黄的免费的 | 丁香六月中文字幕 | www.xxx.性狂虐 | 亚洲欧美一区二区三区孕妇写真 | 在线播放视频一区 | aaawww| 97在线成人 | 日韩精品久久久久久久电影99爱 | 日韩专区在线观看 | 国产美女网| 国产麻豆传媒 | 人人爽人人爱 | 国产精品va最新国产精品视频 | 国产一级黄色片免费看 | av成人在线播放 | 在线观看av片 | 激情视频在线观看网址 | 在线免费观看麻豆视频 | 午夜视频免费在线观看 | 91看片淫黄大片一级在线观看 | 国产视频九色蝌蚪 | 国产精品视频地址 | 综合在线色| 一本一本久久a久久 | 999久久久免费精品国产 | 丁香综合网| 国产亚洲永久域名 | 国产精品一区二区在线免费观看 | 国产成在线观看免费视频 | 91视频高清免费 | 中文字幕电影网 | 亚洲做受高潮欧美裸体 | 日韩精品一区二区在线观看视频 | 伊人网av| 国产小视频网站 | 亚洲精品黄色片 | 久久久久99精品国产片 | 超碰国产在线播放 | 97精品免费视频 | 在线黄色观看 | 黄色资源网站 | av在观看| 久久综合九色综合欧美就去吻 | 91视频最新网址 | 久久久亚洲精华液 | 骄小bbw搡bbbb揉bbbb | 懂色av一区二区三区蜜臀 | 日本韩国中文字幕 | 日韩综合一区二区三区 | 888av| 欧美成人一区二区 | 91麻豆产精品久久久久久 | 国产一区二区高清 | 亚洲精品456在线播放第一页 | 久久66热这里只有精品 | 国产成人免费在线观看 | 免费在线观看成人小视频 | 91视频在线观看免费 | 日日操日日插 | 三上悠亚在线免费 | 亚洲成人免费 | 日韩国产欧美在线视频 | 国产精品自产拍在线观看 | 日本性生活免费看 | 97免费中文视频在线观看 | 日韩婷婷| 免费欧美高清视频 | 男女激情片在线观看 | 四虎影视成人 | 911亚洲精品第一 | 天天操天天干天天综合网 | 色网免费观看 | 中文字幕在线看视频国产中文版 | 亚洲天天在线日亚洲洲精 | 色爱成人网 | 又黄又刺激又爽的视频 | 久久久久久久久久久影视 | 国产一区在线免费 | 少妇bbw揉bbb欧美 | 色婷婷视频网 | 国产午夜影院 | av丝袜在线 | 精品在线你懂的 | 五月婷婷六月丁香 | 国产黑丝一区二区三区 | 综合网在线视频 | 亚洲精品视频播放 | 91色视频| 日本成人a| 在线成人免费电影 | 国产成人精品一区二三区 | 亚洲日本色 | ,久久福利影视 | 国产精品私人影院 | 在线免费观看视频你懂的 | 天天久久综合 | 中文字幕第一页av | 国产 日韩 欧美 中文 在线播放 | 日日干日日操 | 日韩亚洲欧美中文字幕 | 色爱区综合激月婷婷 | 精品综合久久久 | 亚洲伊人第一页 | 911在线| www操操操 | 精品在线观看视频 | 久久成人黄色 | 欧美一区成人 | 色在线视频网 | 欧美日韩高清一区二区三区 | 国产麻豆电影在线观看 | 日韩欧美视频一区二区三区 | 人人精久| 日韩成人精品一区二区 | 天堂av免费 | 91在线视频网址 | 久久久久久久久久久福利 | 亚洲我射av | 日韩激情久久 | 婷婷色伊人| 六月婷操 | 九九久久久久久久久激情 | 日韩中字在线 | 婷婷色六月天 | 亚洲欧美国产精品va在线观看 | 高清av在线免费观看 | 亚洲黄色在线免费观看 | 欧美精品久久久久久久久久丰满 | 国产高清第一页 | 国产1区2 | 99久久精品国产亚洲 | 在线播放日韩av | 色婷婷精品 | 91豆麻精品91久久久久久 | 丁香五香天综合情 | 日日夜夜精品网站 | 最近中文字幕高清字幕在线视频 | 日韩精品视频久久 | 丁香影院在线 | 亚洲欧美日本国产 | 久草在线费播放视频 | 久久久久久久久久久久av | 在线观看电影av | 婷婷综合亚洲 | 麻豆视频一区二区 | 人人爱人人添 | 国产成人高清在线 | 毛片www | 日韩精品中文字幕av | 成人av网页 | 超碰人人舔 | 亚洲免费一级 | 亚洲电影成人 | 日本h视频在线观看 | 69久久99精品久久久久婷婷 | 日本韩国中文字幕 | 男女全黄一级一级高潮免费看 | 亚洲成人免费观看 | 国精产品999国精产 久久久久 | 激情黄色一级片 | 日本在线视频一区二区三区 | 在线亚洲高清视频 | 精品国产区 | 精品色999 | 天天干天天做天天爱 | 中文字幕av网站 | 久久国产精品一国产精品 | 久草热久草视频 | 韩国精品福利一区二区三区 | 国产永久免费高清在线观看视频 | 成人性生交大片免费看中文网站 | 久久在线视频在线 | 久久草视频 | 国产糖心vlog在线观看 | 免费看片成年人 | 国产精品99久久久久久小说 | 涩涩网站在线播放 | 国产精品99蜜臀久久不卡二区 | 国产福利91精品一区二区三区 | 伊人资源视频在线 | 亚洲涩涩涩 | 日韩系列在线观看 | 最新国产一区二区三区 | 99久久www| 深爱五月激情五月 | 久久系列 | 国产精品毛片一区 | 黄色电影在线免费观看 | 国内精品视频久久 | 久久久久久综合网天天 | 中文字幕日韩免费视频 | 99性视频 | 久久精品国产成人精品 | 亚洲天堂精品视频在线观看 | 六月丁香婷婷网 | 色就色,综合激情 | a黄色一级| 国产亚洲免费观看 | 国产一区二区三区视频在线 | 手机av在线免费观看 | 国产伦精品一区二区三区在线 | 免费观看不卡av | 久久久精品 一区二区三区 国产99视频在线观看 | 久日视频| 偷拍精品一区二区三区 | 99久久www免费 | 天天激情 | 国产在线观看网站 | 天天天射 | 黄色综合 | 国内精品视频一区二区三区八戒 | 久久成人午夜视频 | 久草在线视频看看 | 激情久久综合网 | 国产91在线观 | 久久国产麻豆 | 久久不见久久见免费影院 | 麻豆视频免费在线播放 | 国产小视频在线播放 | 狠狠干中文字幕 | 久久午夜电影网 | 国产精品久久久久久久婷婷 | www黄色 | 国产91精品久久久久 | 天天操天 | 国产原创在线观看 | 一色屋精品视频在线观看 | av中文在线观看 | 精品免费观看 | 一区二区三区免费看 | 国产在线精品播放 | 丝袜网站在线观看 | 美女黄频在线观看 | 在线国产小视频 | 日韩av电影中文字幕在线观看 | av免费观看网站 | 亚洲精品999 | 久久视频网 | 久草国产在线观看 | 日韩小视频网站 | 五月天激情综合网 | 色激情在线 | 久久久伦理| 欧美一区二区三区在线看 | 日韩欧美在线第一页 | 伊人永久在线 | 国产精品入口a级 | 婷色在线 | 日韩黄色在线电影 | 婷婷激情综合五月天 | 国产在线观看中文字幕 | 精产嫩模国品一二三区 | 久久国产精品网站 | 欧美成人亚洲成人 | 亚洲自拍自偷 | 一区二区三区免费播放 | 日韩精品久久久久久久电影99爱 | av电影免费 | 久久精品人人做人人综合老师 | 伊人永久 | 婷婷久久五月天 | 中文字幕免费看 | 国产精品综合久久久久 | 91精选 | 日日骑 | 久久久精华网 | 国产精品白丝jk白祙 | 精品专区一区二区 | 亚洲欧洲成人精品av97 | 国产精品精品国产 | 久久免费视频网站 | 精品国产日本 | www.天天操 | 精品视频一区在线观看 | 中文在线a天堂 | 日韩欧美网址 | 在线观看91视频 | 在线观看免费成人av | 国产又粗又长的视频 | 日韩伦理片hd | 色网站在线观看 | 国产精品黑丝在线观看 | 免费a视频 | 国产专区免费 | 2017狠狠干| 久久99久| 亚洲va欧洲va国产va不卡 | 亚洲码国产日韩欧美高潮在线播放 | 精品一区三区 | 久久视频这里有精品 | 成人在线免费观看网站 | 久久精品久久久精品美女 | 中文字幕亚洲欧美 | 免费看的黄色录像 | 九九热精品国产 | 婷婷丁香激情综合 | 久草免费在线视频观看 | 在线中文字幕一区二区 | 一区二区三区手机在线观看 | 久久亚洲国产精品 | 中文字幕在线精品 | 国产精品黄色 | 深爱五月激情网 | 国产中出在线观看 | 国产成人精品三级 | 成人免费观看网址 | 青青河边草免费观看完整版高清 | 在线观看成人毛片 | 国产网红在线 | 久久人人97超碰精品888 | 91大神dom调教在线观看 | 丁香综合网 | 九九热免费精品视频 | 免费高清在线观看成人 | 国产精品手机在线观看 | 国产精品视频99 | 色网站视频| 五月亚洲综合 | 久久精品这里热有精品 | 久久少妇 | 91大神免费视频 | 精品夜夜嗨av一区二区三区 | 欧美日韩不卡在线观看 | 婷婷综合网 | 国产一区二区久久久 | 日韩精品一区二区三区三炮视频 | 免费a v视频 | 九九视频精品在线 | 久久久精品电影 | 国产老妇av| 91久久丝袜国产露脸动漫 | 午夜视频免费播放 | 亚洲伊人天堂 | 一区二区三区在线播放 | 91伊人久久大香线蕉蜜芽人口 | www亚洲精品| 午夜婷婷综合 | 国产成人精品一区二三区 | 国产精品久久久久久久毛片 | 天天色成人 | 一区二区三区观看 | 久久久久久久免费观看 | 91在线观看视频网站 | 久草网视频在线观看 | 色综合天天综合 | 久久免费国产精品 | 中文字幕在线观看网 | 欧美午夜激情网 | 偷拍视频一区 | 日韩中文字幕一区 | 久艹视频免费观看 | 亚洲乱码精品久久久久 | 国产福利在线 | www.国产精品| 久草免费在线观看视频 | 成人高清在线 | 日韩在线色视频 | 99视频偷窥在线精品国自产拍 | 亚洲一区二区三区四区精品 | 亚洲第一中文网 | 久久久久久国产精品999 | www.大网伊人 | 少妇视频一区 | 日韩免费高清在线观看 | 国产精品久久久免费看 | 精品久久久久久国产 | 欧美激情视频一区 | 日韩一区二区三区免费视频 | 亚洲黄色免费观看 | 黄色av电影在线观看 | 精品国产区 | 日韩精品一区二区三区在线视频 | 国产精品久久久 | 99情趣网视频 | 亚洲精品在线观看免费 | 亚洲国产精品99久久久久久久久 | 亚洲精品456在线播放 | 亚洲精品99久久久久久 | 91成人欧美 | 日韩.com| 精品久久久久久久久久 | 91精品免费看 | 日本中文字幕在线看 | 99这里只有精品视频 | 精品日韩中文字幕 | 久久久久一区二区三区四区 | 久99久精品视频免费观看 | 亚洲综合色站 | 国产一区二区三精品久久久无广告 | 国产精品18videosex性欧美 | 国产精品短视频 | 91片在线观看 | 久草香蕉在线视频 | 亚洲aⅴ在线 | 91久久黄色 | 国产一级淫片免费看 | 91豆花在线观看 | 国产午夜三级一区二区三桃花影视 | 欧美激情视频在线观看免费 | 亚洲在线网址 | 麻花豆传媒一二三产区 | 日本h视频在线观看 | 中文字幕色在线 | 丁香六月天婷婷 | 国产亚洲精品日韩在线tv黄 | 成人在线观看av | 2022久久国产露脸精品国产 | 97超碰在线久草超碰在线观看 | 伊人色**天天综合婷婷 | 精品久久精品久久 | 欧美日韩免费观看一区=区三区 | 黄色三级视频片 | 中文字幕电影网 | 91精品久久久久久久久久久久久 | 国产精品一区二区视频 | 在线观看一区二区视频 | 在线国产一区二区 | 日本中文字幕一二区观 | 国产精品久久99综合免费观看尤物 | 欧美韩国在线 | 午夜久久精品 | 激情综合六月 | 亚洲成a人片77777kkkk1在线观看 | av在线在线 | 探花视频免费在线观看 | 日韩一区二区三区免费电影 | a亚洲视频 | 精品福利在线 | 久久精品视频观看 | 国产伦精品一区二区三区四区视频 | 最新中文字幕在线观看视频 | 国产黄在线| 中文字幕在线专区 | 91手机在线看片 | 精品女同一区二区三区在线观看 | 最近中文国产在线视频 | 欧美久久久久久久久久久久久 | 天天干天天天天 | 一区二区三区在线观看 | 一二区精品 | 麻豆久久 | 久久激情视频 | 日韩免费av片 | 免费看精品久久片 | 亚洲国产欧美一区二区三区丁香婷 | av大全在线 | 成人h动漫在线看 | 欧美日韩大片在线观看 | 国内精品久久久久久中文字幕 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲国产中文字幕 | 黄色三级免费片 | 成人av免费网站 | 日本黄色免费在线观看 | 欧美最新大片在线看 | 中文在线免费看视频 | 国产一区二区在线视频观看 | 日韩成人免费在线观看 | 高清av网站 | 日韩狠狠操 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 久久狠狠干 | 一区二区免费不卡在线 | 日日添夜夜添 | 91最新在线视频 | 日韩中字在线 | 国产精品专区在线观看 | 中文字幕欧美日韩va免费视频 | 天天干天天射天天插 | 亚洲黄色一级视频 | 中文字幕国产精品 | 亚洲作爱视频 | 亚洲 综合 精品 | 天天做夜夜做 | 伊色综合久久之综合久久 | 91在线成人 | 四虎永久免费在线观看 | bbb搡bbb爽爽爽 | 日韩激情网 | 亚洲成人av一区二区 | 99欧美视频 | 日本性生活免费看 | 91.精品高清在线观看 | 特黄特黄的视频 | 亚洲精品视频免费观看 | 菠萝菠萝在线精品视频 | 日韩免费看 | 久久久69| 久久曰视频 | 欧美资源 | 97**国产露脸精品国产 | 91精品国自产在线 | 精产嫩模国品一二三区 | 黄网站污 | 午夜私人影院 | 精品91| 中文字幕亚洲五码 | 91精品亚洲影视在线观看 | 伊人伊成久久人综合网站 | 日韩在线电影一区二区 | 欧美aaa级片| 色播五月激情综合网 | 国产亚洲综合性久久久影院 | 国产精品麻豆91 | 欧美日韩免费一区二区 | 久久综合综合久久综合 | 91女神的呻吟细腰翘臀美女 | av东方在线 | 国产女v资源在线观看 | www.亚洲精品| 996久久国产精品线观看 | 国产精品专区一 | 久草在线国产 | 一区二区精品久久 | 色99网| 久久视频这里有精品 | 懂色av懂色av粉嫩av分享吧 | 毛片视频电影 | 亚洲精品午夜久久久久久久久久久 | 91亚洲精品国偷拍自产在线观看 | 久久久久久免费毛片精品 | 亚洲一区二区三区毛片 | 午夜久久福利 | 一级一片免费观看 | 精品一区二区免费 | 99久久精品免费看国产麻豆 | 久久久午夜视频 | 91视频国产免费 | 日日爽 |