Nacos超詳細(xì)整理,入門(mén)+性能對(duì)比+linux單機(jī)+集群部署

Nacos 服務(wù)注冊(cè)和配置中心

簡(jiǎn)介

gitHub

中文文檔

全名NamingConfiguration,一個(gè)更易于構(gòu)建云原生的動(dòng)態(tài)服務(wù)發(fā)現(xiàn),配置管理和服務(wù)管理平臺(tái).Nacos就是注冊(cè)中心+配置中心的組合,替代Eureka做服務(wù)注冊(cè)中心,替代Config做服務(wù)配置中心

注冊(cè)進(jìn)Nacos

DisCovery Example gitHub

  • maven
父工程
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.3.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

   <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
  • 啟動(dòng)類
    @EnableDiscoveryClient

  • yml

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #配置nacos地址

Nacos默認(rèn)集成了ribbon,所以服務(wù)提供者實(shí)現(xiàn)負(fù)載的情況下,調(diào)用方會(huì)自動(dòng)使用默認(rèn)策略來(lái)進(jìn)行選擇

服務(wù)注冊(cè)中心對(duì)比

服務(wù)注冊(cè)與發(fā)現(xiàn)框架 CAP模型 控制臺(tái)管理 社區(qū)活躍度
Eureka AP 支持 低(2.x版本閉源)
Zookeeper CP 不支持
Consul CP 支持
Nacos AP/CP 支持

據(jù)說(shuō) Nacos 在阿里巴巴內(nèi)部有超過(guò)10萬(wàn)的實(shí)例運(yùn)行,已經(jīng)過(guò)了累死雙十一等各種大型流量的考驗(yàn)

  • Nacos與其他注冊(cè)中心特性對(duì)比
>> Nacos Eureka Consul CoreDNS Zookeeper
一致性協(xié)議 CP+AP AP CP / CP
健康檢查 TCP/HTTP/Mysql/Client Beat Client Beat TCP/HTTP/gRPC/Cmd / Client Beat
負(fù)載均衡 權(quán)重/DSL/metadata/CMDB Ribbon Fabio RR /
雪崩保護(hù) 支持 支持 不支持 不支持 不支持
自動(dòng)注銷實(shí)例 支持 支持 不支持 不支持 支持
訪問(wèn)協(xié)議 HTTP/DNS/UDP HTTP HTTP/DNS DNS TCP
監(jiān)聽(tīng)支持 支持 支持 支持 不支持 支持
多數(shù)據(jù)中心 支持 支持 支持 不支持 不支持
跨注冊(cè)中心 支持 不支持 支持 不支持 不支持
SpringCloud 支持 支持 支持 不支持 不支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8s集成 支持 不支持 支持 支持 不支持

總之我很欣賞阿里的一點(diǎn),野心很大!網(wǎng)上可以搜到他的Nacos全景圖,幾乎所有的覆蓋面他都要去做,包括他的官網(wǎng)建議拋棄zookeeper直接Nacos整合Dubbo,也就誕生了唯一一個(gè)AP,CP都支持的注冊(cè)中心

注: C是所有節(jié)點(diǎn)在同一時(shí)間看到的數(shù)據(jù)時(shí)一致的;而A的定義是所有的請(qǐng)求都會(huì)受到響應(yīng)

何時(shí)選擇使用何種模式?

一般來(lái)說(shuō)如果不需要存儲(chǔ)服務(wù)級(jí)別的信息且服務(wù)實(shí)例是從nacos-client注冊(cè),并能夠保持心跳上報(bào),那么就可以選擇AP模式.當(dāng)前主流的服務(wù)如Spring Cloud和Dubbo服務(wù),都適用于AP模式,AP模式為了服務(wù)的可能性而減弱了一致性,因此AP模式下只支持注冊(cè)臨時(shí)實(shí)例

如果需要在服務(wù)級(jí)別編輯或者存儲(chǔ)配置信息,那么CP是必須,K8s服務(wù)和DNS服務(wù)則適用于CP模式,CP模式下則支持注冊(cè)持久化實(shí)例,此時(shí)則是以Raft協(xié)議為集群模式運(yùn)行,該模式下注冊(cè)實(shí)例之前必須先注冊(cè)服務(wù),如果服務(wù)不存在則會(huì)返回錯(cuò)誤.

Nacos切換CAP選擇

curl -X PUT "$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP"

分布式配置中心

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

config 的yml要區(qū)分于出來(lái)的bootstrap.yml,Nacos同Springcloud-config一樣,在項(xiàng)目初始化時(shí),要保證先從配置中心進(jìn)行配置拉取之后,才能保證項(xiàng)目的正常啟動(dòng)

bootstrap.yml

spring:
 application:
  name: nacos-config-client
 cloud:
  nacos:
   discovery:
    server-addr: 192.168.10.63:8848
   config:
    server-addr: 192.168.10.63:8848
    file-extension: yaml #指定yaml格式的配置

application.yml

server:
  port: 3377

spring:
  profiles:
    active: dev
    

在控制臺(tái)添加對(duì)應(yīng)DataId的配置文件,具體規(guī)則我們?cè)诠倬W(wǎng)可以查看Nacos Config gitHub

也就是分為三部分組成,實(shí)例名稱+profile級(jí)別+后綴名

感興趣的也可以看我以前的文章Spring Cloud Config,原理就是用SpringCloudConfig做的,也同時(shí)支持動(dòng)態(tài)刷新

發(fā)布之后我們就可以用配置中心的文件來(lái)進(jìn)行項(xiàng)目配置了

具體原理是怎么通知到項(xiàng)目,以及項(xiàng)目是怎么以配置中心為基準(zhǔn)的我也整理過(guò)
Spring Cloud Bus,Nacos 也是參照Cloud一步一步整合升級(jí)來(lái)的

分類配置

Nacos已經(jīng)干翻了eureka+config+bus,并且他們沒(méi)有的他也有,介紹點(diǎn)新功能

  • Namespace 命名空間

Nacos默認(rèn)的命名空間是public,Namespace主要用來(lái)實(shí)現(xiàn)隔離
比如說(shuō)我們現(xiàn)在有三個(gè)環(huán)境:開(kāi)發(fā),測(cè)試和生產(chǎn)環(huán)境,我們就可以創(chuàng)建三個(gè)Namespace.不同的Namespace之間是隔離的

  • Group 組

Group默認(rèn)DEFAULT_GROUP,Group可以把不同的微服務(wù)劃分到同一個(gè)分組里面去

  • Cluster 集群 默認(rèn)DEFAULT

集群配置&持久化

在單機(jī)版啟動(dòng)的情況下,Nacos默認(rèn)是采用內(nèi)嵌式數(shù)據(jù)庫(kù)derby,所以在我們重啟或斷點(diǎn)的情況下,只要重啟就可以保證我們配置的文件還在,但在我們集群的環(huán)境下不可能每個(gè)服務(wù)去單獨(dú)配置一遍,并且還不共享,所以官網(wǎng)就推薦我們必須要配置集群環(huán)境,并且支持mysql數(shù)據(jù)庫(kù)來(lái)持久化,官網(wǎng)推薦使用linux環(huán)境

  1. 修改conf文件里的application.properties,添加數(shù)據(jù)庫(kù)對(duì)應(yīng)項(xiàng)和配置,詳細(xì)看官網(wǎng)

  2. 修改啟動(dòng)命令,添加 -p命令

while getopts ":m:f:s:p:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        s)
            SERVER=$OPTARG;;
    p)  
        PORT=$OPTARG;;

  1. 修改luster.conf, 配置指定的集群端口

  2. 修改啟動(dòng)命令,添加port指定

nohup $JAVA -Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
  1. 重啟nacos,并端口形式,例: `./startup.sh -p 8849

  2. 配置nginx代理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容