Naocs 2.0版本变更要点详解

3,414 阅读4分钟

最近空闲时间想要重新搭建一套springCloud环境,注册中心自然选择nacos。

发现新版本2.0发布了,决定尝一尝鲜,现记录部分重要的内容。

官方文档地址 Nacos官方地址

一、Nacos 2.0

1.1 概述

经过社区的讨论和开发, Nacos 基于长连接的2.0.0版本的核心功能已开发完成,目前2.0.0正式版本已发布。

启动方式与Nacos 1.x相同,2.0.0支持Nacos1.X服务端的平滑升降级的能力。

  • 相比1.X版本,在性能上有了很大的提升,以下面的做百万服务级别的机器压测:

    指标参数
    机器8核 16g
    集群规模3
    • 注册实例:注册性能总体提升至少2倍,在服务端机能减半的情况下,服务实例数基本一致的情况下,TPS仍能做到2倍左右的提高。

    • 查询实例:查询性能总体提升至少3倍,在服务端机能减半的情况下,服务实例数基本一致的情况下,TPS仍能做到3倍左右的提高,单机多线程场景甚至有10倍的提升。

    • 注销实例:注销性能总体提升至少2倍,在服务端机能减半的情况下,服务实例数基本一致的情况下,TPS仍能做到2倍左右的提高。

  • 相比1.X版本,新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成:

    端口与主端口偏移量描述
    98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
    98491001服务端gRPC请求服务端端口,用于服务间同步等

    注意使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。

    nacos1.x与2.0版本端口对比.png

注意Nacos2.0客户端由于使用了gRPC,无法兼容Nacos1.X服务端,请勿使用2.0以上版本客户端连接Nacos1.X服务端。

1.2 部署Nacos2.0

nacos依赖jdk环境,安装前确保您的环境有jdk1.8+。

1.2.1 安装包下载

本文使用2.0.3版本。

可以通过源码和发行包两种方式来获取 Nacos,本文直接给出最新发行版地址:nacos发行版

建议下载zip包:

image.png

解压后如下所示:

image.png

1.2.2 修改配置

进入conf,打开application.properties,记性修改。主要有以下几个位置要注意:

  • 端口,默认即可,可修改

    ### 访问路劲跟着的后缀,如localhost:8848/nacos:
    server.servlet.contextPath=/nacos
    ### 默认服务端端口:
    server.port=8848
    
  • 数据库mysql放开

    ### If use MySQL as datasource:
    spring.datasource.platform=mysql
    
    ### Count of DB:
    db.num=1
    
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=nacos
    db.password.0=nacos
    

还有mysql的初始化sql,我不知道当前版本是否会自动初始化,如果不行的话,后面自己执行下就可以:nacos-mysql.sql

如果是部署集群还需要添加cluster.conf文件,内部配置自己的服务ip + port:

192.168.16.101:8847
192.168.16.102:8848
192.168.16.103:8849

同时需要VIP或者nginx做动态代理。不要忘记前面提到的要使用TCP的配置。

1.2.3 启动

进入bin目录,发现如下启动文件:

启动文件

  • windows启动 修改startup.cmd:

    set MODE="standalone"
    

    双击startup.cmd

    访问本地地址http://localhost:8848/nacos

    默认账号密码nacos/nacos

    image.png

  • Linux启动

    ### 单实例启动,集群不应加 -m standalone
    ./start.sh -m standalone
    

二、 Nacos Spring Cloud

下面主要介绍下客户端如何配置nacos,分为两个部分服务发现服务配置

2.1 依赖

我们需要分别引入下面两个依赖

<!-- 服务发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

<!-- 服务注册 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

需要注意的是版本,我是用的2.2.7版本对应springboot版本

image.png

在maven仓库 mvnrepository.com/ 自己对比,尽量保证一直,避免不必要的麻烦。

更加不要将1.5.X对应到2.X,遵循下面的规则:

版本 2.2.x.RELEASE 对应的是 Spring Boot 2.2.x 版本。

版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。

版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本。

版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

2.2 配置

首先需要在服务的启动类增加注解:@EnableDiscoveryClient,开启服务发现功能。

关于配置文件我直接列出来我的:

server:
  port: 8686

spring:
  application:
    name: rob-necessities-user      ### 服务名,必须
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 ### nacos地址
        namespace: wjbgn              ### 命名空间
        group: dev                        ### 命名空间下的组
        file-extension: yml             ### naco获取配置文件的后缀
      discovery:
        server-addr: 127.0.0.1:8848 ### nacos地址
        group: dev                        ### 命名空间下的组
        namespace: wjbgn              ### 命名空间

nacos找配置文件的格式是:

${spring.application.name}-${spring.profiles.active}.${file-extension}
  • spring.application.name 即应用名。

  • spring.profiles.active 即为当前环境对应的 profile,

    注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成:

    ${spring.application.name}.${file-extension}
    
  • file-extension 为配置的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

2.3 启动服务

直接启动springboot的启动类即可,成功后访问nacos,看看结果:

image.png

image.png


关于nacos 2.0的安装部署还有使用,其实对于用户来说并没有太大的感知,只需要注意两个新增的gRpc端口的开放,以及nginx或VIP做负载的TCP配置,再就是版本一定对应好了。其他的就不多说了,后面遇到新的问题会持续更新的。

本文项目代码gitee地址 gitee.com/wei_rong_xi…