0%

Nacos 2.0版本变更要点详解

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

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

官方文档地址: Nacos

Nacos 2.0

概述

经过社区的讨论和开发, Nacos 基于长连接的2.0.0版本的核心功能已开发完成,目前2.0.0正式版本已发布。
启动方式与Nacos 1.x相同,2.0.0支持Nacos1.X服务端的平滑升降级的能力。

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

指标 参数
机器 8核 16g
集群规模 3
  1. 注册实例:注册性能总体提升至少2倍,在服务端机能减半的情况下,服务实例数基本一致的情况下,TPS仍能做到2倍左右的提高。
  2. 查询实例:查询性能总体提升至少3倍,在服务端机能减半的情况下,服务实例数基本一致的情况下,TPS仍能做到3倍左右的提高,单机多线程场景甚至有10倍的提升。
  3. 注销实例:注销性能总体提升至少2倍,在服务端机能减半的情况下,服务实例数基本一致的情况下,TPS仍能做到2倍左右的提高。

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

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

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

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

部署Nacos2.0

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

安装包下载

本文使用2.0.3版本。
可以通过源码和发行包两种方式来获取 Nacos,本文直接给出最新发行版地址:nacos发行版
建议下载zip包:

解压后如下所示:

修改配置

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

1
2
3
4
### 访问路劲跟着的后缀,如localhost:8848/nacos:
server.servlet.contextPath=/nacos
### 默认服务端端口:
server.port=8848

数据库mysql放开

1
2
3
4
5
6
7
8
9
10
### 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:

1
2
3
192.168.16.101:8847
192.168.16.102:8848
192.168.16.103:8849

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

启动

进入bin目录

  • windows启动 修改startup.cmd:
    1
    set MODE="standalone"
    双击startup.cmd
    访问本地地址http://localhost:8848/nacos
    默认账号密码nacos/nacos
  • Linux启动
    1
    2
    ### 单实例启动,集群不应加 -m standalone
    ./start.sh -m standalone
Nacos Spring Cloud

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

依赖

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

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 服务发现-->
<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版本

在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 版本。

配置

首先需要在服务的启动类增加注解:@EnableDiscoveryClient,开启服务发现功能。
关于配置文件我直接列出来我的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server:
port: 8686

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

nacos找配置文件的格式是:
${spring.application.name}-${spring.profiles.active}.${file-extension}

  1. spring.application.name 即应用名。
  2. spring.profiles.active 即为当前环境对应的 profile,
    注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成:
    ${spring.application.name}.${file-extension}
  3. file-extension 为配置的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
启动服务

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


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