偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Nacos注冊(cè)中心之概要設(shè)計(jì)

開(kāi)發(fā) 前端
注冊(cè)中心的核心比配置中心多一個(gè)服務(wù)探活模塊,他倆的相似度非常高,甚至阿里內(nèi)部的注冊(cè)中心就叫ConfigServer。Nacos注冊(cè)中心打算分成幾個(gè)模塊來(lái)分析,本文重點(diǎn)在于概要設(shè)計(jì),基于2.0.0版本。

[[415339]]

本文轉(zhuǎn)載自微信公眾號(hào)「捉蟲(chóng)大師」,作者捉蟲(chóng)大師。轉(zhuǎn)載本文請(qǐng)聯(lián)系捉蟲(chóng)大師公眾號(hào)。

前言

在之前的文章中分析了Nacos配置中心,配置中心的核心是配置的創(chuàng)建、讀取、推送。

注冊(cè)中心的核心比配置中心多一個(gè)服務(wù)探活模塊,他倆的相似度非常高,甚至阿里內(nèi)部的注冊(cè)中心就叫ConfigServer。

Nacos注冊(cè)中心打算分成幾個(gè)模塊來(lái)分析,本文重點(diǎn)在于概要設(shè)計(jì),基于2.0.0版本。

環(huán)境搭建

用Nacos的源碼來(lái)搭建源碼閱讀和調(diào)試環(huán)境,可參考《Nacos配置中心模塊詳解》 Nacos調(diào)試環(huán)境搭建部分。

其中 JVM參數(shù)可以指定只啟動(dòng)Naming模塊,也可以不指定,默認(rèn)全都啟動(dòng)。

example模塊下將NamingExample復(fù)制一份進(jìn)行測(cè)試。

設(shè)計(jì)概要

服務(wù)發(fā)現(xiàn)模型

客戶端視角的服務(wù)發(fā)現(xiàn)模型(注意:服務(wù)端視角的模型定義與客戶端視角有區(qū)別)包含以下幾點(diǎn)內(nèi)容:

  • Service:服務(wù)
  • Cluster:集群
  • Instance:實(shí)例

代碼注釋:We introduce a 'service --> cluster --> instance' model, in which service stores a list of clusters, which contains a list of instances

他們的關(guān)系如下

Service

  • name:服務(wù)名
  • protectThreshold:保護(hù)閾值,限制了實(shí)例被探活摘除的最大比例
  • appName:服務(wù)的應(yīng)用名,暫無(wú)實(shí)際用處
  • groupName:分組名
  • metadata:元數(shù)據(jù)

Cluster

  • serviceName:所屬服務(wù)名
  • name:集群名
  • healthChecker:服務(wù)探活配置,此處僅對(duì)服務(wù)端主動(dòng)探活生效,有TCP、HTTP、MySQL、None幾種方式,默認(rèn)TCP
  • defaultPort:默認(rèn)端口
  • defaultCheckPort:默認(rèn)探活端口
  • useIPPort4Check:是否使用port進(jìn)行探活
  • metadata:元數(shù)據(jù)

Instance

  • instanceId:實(shí)例id,唯一標(biāo)志,Nacos提供了simple和snowflake兩種算法來(lái)生成,默認(rèn)是simple,其生成方式為ip#port#clusterName#serviceName
  • ip:實(shí)例ip
  • port:實(shí)例port
  • weight:實(shí)例權(quán)重
  • healthy:實(shí)例健康狀態(tài)
  • clusterName:所屬集群名
  • serviceName:所屬服務(wù)名
  • metadata:元數(shù)據(jù)
  • enabled:是否接收請(qǐng)求,可用于臨時(shí)禁用或摘流等場(chǎng)景
  • ephemeral:是否為臨時(shí)實(shí)例,后文會(huì)介紹該參數(shù)
  • getInstanceHeartBeatInterval:獲取實(shí)例心跳上報(bào)間隔時(shí)間,默認(rèn)5秒,可配置
  • getInstanceHeartBeatTimeOut:獲取心跳超時(shí)時(shí)間,15秒,配置
  • getIpDeleteTimeout:獲取ip被刪除的超時(shí)時(shí)間,默認(rèn)30秒,可配置
  • getInstanceIdGenerator:獲取id生成器

除了上述的三層模型外,Nacos注冊(cè)中心和配置中心有著一樣的namespace設(shè)計(jì),與client綁定,可隔離環(huán)境,租戶。

接口設(shè)計(jì)

  • registerInstance:注冊(cè)實(shí)例
  • deregisterInstance:注銷(xiāo)實(shí)例
  • getAllInstances:獲取一個(gè)服務(wù)的所有實(shí)例(包括不健康)
  • selectInstances:根據(jù)條件獲取一個(gè)服務(wù)的實(shí)例
  • selectOneHealthyInstance:根據(jù)負(fù)載均衡策略獲取服務(wù)的一個(gè)健康的實(shí)例
  • subscribe:訂閱服務(wù)
  • unsubscribe:取消訂閱服務(wù)
  • getServicesOfServer:根據(jù)條件分頁(yè)獲取所有服務(wù)

交互流程

Nacos 2.0 為ephemeral不同的實(shí)例提供了兩套流程:

  • ephemeral=false,永久實(shí)例,與server端的交互采用http請(qǐng)求,server節(jié)點(diǎn)間數(shù)據(jù)同步采用了raft協(xié)議,健康檢查采用了server端主動(dòng)探活的機(jī)制
  • ephemeral=true,臨時(shí)實(shí)例,與server端的交互采用grpc請(qǐng)求,server節(jié)點(diǎn)間數(shù)據(jù)同步采用了distro協(xié)議,健康檢查采用了TCP連接的KeepAlive模式

臨時(shí)實(shí)例的交互流程

  • client初始化,與server建立連接

只與其中一臺(tái)server節(jié)點(diǎn)建立長(zhǎng)連接

  • client 注冊(cè)服務(wù),將serviceName+ip+port+clusterName等數(shù)據(jù)打包發(fā)送grpc請(qǐng)求

同時(shí)客戶端緩存已注冊(cè)過(guò)的服務(wù),當(dāng)client與server連接斷開(kāi)重連時(shí),client重新將這些數(shù)據(jù)注冊(cè)到server端

  • server端接收到client的注冊(cè)請(qǐng)求,將注冊(cè)信息存入client對(duì)象(用于保存client的所有數(shù)據(jù))中,并觸發(fā)ClientChangedEvent、ClientRegisterServiceEvent、InstanceMetadataEvent
    • ClientChangedEvent觸發(fā)server節(jié)點(diǎn)之間的數(shù)據(jù)同步(distro協(xié)議)
    • ClientRegisterServiceEvent觸發(fā)更新publisherIndexes(保存service => clientId的Map
    • InstanceMetadataEvent,處理元數(shù)據(jù),Nacos在2.0中將元數(shù)據(jù)與基礎(chǔ)數(shù)據(jù)拆分開(kāi),分為不同的處理流程
  • client訂閱服務(wù)
    • 根據(jù)serviceName、groupName、clusters信息生成key,創(chuàng)建eventListener,同時(shí)向server端發(fā)送訂閱請(qǐng)求,并緩存訂閱信息,用于連接斷開(kāi)重連后再次向server端發(fā)送信息
  • server端接收到client的訂閱請(qǐng)求
    • 將訂閱信息打包為subscribers,并存入client對(duì)象中,觸發(fā)ClientSubscribeServiceEvent事件
    • ClientSubscribeServiceEvent事件更新subscriberIndexes(保存service => clientId的Map
    • ServiceSubscribedEvent事件會(huì)延時(shí)500ms向該client推送該服務(wù)的最新數(shù)據(jù)
  • 反向的操作如注銷(xiāo)、取消訂閱與正向操作類似,不再贅述

最后

 

本文從總體上分析了Nacos 2.0的模型設(shè)計(jì)、接口設(shè)計(jì)以及交互流程,讀完后對(duì)Nacos的服務(wù)發(fā)現(xiàn)有一個(gè)整體上的認(rèn)識(shí)。后續(xù)篇幅會(huì)從細(xì)節(jié)入手,如dubbo Nacos擴(kuò)展、一致性協(xié)議、探活、CMDB擴(kuò)展等逐一進(jìn)行分析。

 

責(zé)任編輯:武曉燕 來(lái)源: 捉蟲(chóng)大師
相關(guān)推薦

2023-03-01 08:15:10

NginxNacos

2023-10-30 09:35:01

注冊(cè)中心微服務(wù)

2022-08-30 22:12:19

Nacos組件服務(wù)注冊(cè)

2023-02-26 00:00:00

2024-04-10 12:22:19

DubboNacos微服務(wù)

2020-06-29 07:58:18

ZooKeeperConsul 注冊(cè)中心

2023-09-12 07:10:13

Nacos架構(gòu)

2023-04-26 08:19:48

Nacos高可用開(kāi)發(fā)

2023-04-28 07:52:14

CAPEureka注冊(cè)中心

2025-05-08 09:31:06

2022-05-02 22:01:49

訂閱模式Eureka推送模式

2023-06-13 08:25:14

注冊(cè)中心Nacos上線

2024-01-02 22:47:47

Nacos注冊(cè)中心節(jié)點(diǎn)

2017-07-03 08:29:42

Spring Clou服務(wù)詳解

2023-07-18 08:28:58

注冊(cè)中心下線Nacos

2021-07-12 08:00:21

Nacos 服務(wù)注冊(cè)源碼分析

2015-10-09 17:01:08

數(shù)據(jù)中心網(wǎng)絡(luò)虛擬化

2012-11-12 14:05:17

數(shù)據(jù)中心防地震

2021-08-09 07:58:36

Nacos 服務(wù)注冊(cè)源碼分析

2021-06-10 06:57:39

Nacos配置模塊
點(diǎn)贊
收藏

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