Alibaba微服务组件Nacos注册中心

1. Nacos介绍

1.1 什么是Nacos

  • 官方文档:Nacos的官方文档
  • Nacos致力于帮助发现,配置和管理微服务。Nacos提供了一组简单易用的特性集,让我们更快的实现动态服务发现,服务配置,服务元数据以及流量管理。
  • Nacos的关键特性包括:
  1. 服务发现和服务健康检测
  2. 动态配置服务
  3. 动态DNS服务
  4. 服务以及其元数据管理

1.2 主流的注册中心的介绍和对比

在这里插入图片描述

  1. Nacos是比较特殊的,有AP和CP两个模式
  2. Nacos的临时节点是存储在内存中的,下线直接删除,是AP模式
  3. Nacos的持久节点是存储在磁盘中的的,一般我们是用Mysql存储,是CP模式

1.3 Nacos架构

在这里插入图片描述

  • NamingService:命名服务,注册中心核心接口
  • ConfigService:配置服务,配置中心核心接口
  • OpenAPI文档openAPI文档

2. Nacos的部署

2.1 下载源码编译

cd nacos/
mvn -Prelease-nacos clean install -U

2.2 下载安装包

2.3 启动

  • 我们的nacos的启动默认是集群模式启动的
  • 我们分为两种:
    (1)集群模式启动
    (2)单机模式启动

2.3.1 单机模式

在这里插入图片描述

  • 单机启动nacos,执行命令
bin/startup.sh -m standalone

注意,我们这里加上了-m standalone ,加上这个之后就成为了单机模式,如果什么都不加的话则是集群模式

  • 同样我们也可以修改启动方式
    在这里插入图片描述
  • 访问nacos的管理端,http://ip:8848/nacos,默认的用户名密码是:nacos/nacos
    在这里插入图片描述

2.3.2 集群模式

由此可见,我们的nacos的集群其实是利用nginx进行访问的。

2.3.2.1 搭建单机伪集群模式
  1. 单机搭建伪集群,复制nacos的安装包,修改为nacos8849,nacos8850,nacos8851
    在这里插入图片描述
  2. 以nacos8849为例,进入nacos8849的目录
    (1)修改conf/application.properties的配置文件,使用外置数据源
#使用外置mysql数据源 
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=root
 db.password.0=root

在这里插入图片描述
(2)将conf/cluster.example修改为cluster.conf,添加节点配置

# ip:port 
192.168.3.14:8849 
192.168.3.14:8850 

(3)nacos8850和nacos8851按照同样的方式进行配置

  1. 创建mysql数据库,sql文件的位置是在:conf/nacos-mysql.sql
  2. 修改启动脚本,该脚本在bin/startup.sh的JVM参数
    在这里插入图片描述
  3. 分别启动nacos8849,nacos8850,nacos8851,这里我们以nacos8849为例,进入nacos8849的目录,启动nacos
bin/startup.sh

在这里插入图片描述
6. 测试

  • 登录http://ip:8849/nacos,用户名和密码都是nacos
    在这里插入图片描述
  1. 配置nginx,利用nginx的反向代理来完成nacos的集群统一入口
    在这里插入图片描述

配置完成之后,我们可以访问http://nginx的ip:8847(上面nginx监听的是8847)/nacos
以此通过反向代理来完成nacos的集群访问

2.4 prometheus + grafana监控Nacos

  • 文档:Nacos的监控手册
  • Nacos0.8.0版本完善了监控系统,支持通过暴露metrics数据接入第三方监控系统监控Nacos的运行状态。
  1. Nacos暴露metrics数据
management.endpoints.web.exposure.include=*
  1. 测试:访问http://localhost:8848/nacos/actuator/prometheus
    在这里插入图片描述
  2. prometheus采集Nacos metrics数据
  • 启动prometheus服务
prometheus.exe --config.file=prometheus.yml
  • 测试:访问http://localhost:9090/graph
    在这里插入图片描述
  1. grafana展示metrics的数据
  • 测试:http://localhost:3000/
    在这里插入图片描述

3. Nacos的核心功能

  • Nacos的核心功能主要有:
  1. 服务注册
  2. 服务心跳
  3. 服务同步
  4. 服务发现
  5. 服务健康检查

3.1 服务注册

  • Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如IP地址,端口信心等。Nacos Server接受到注册请求之后,就会把这些元数据信息存储在一个 双层的内存Map中

注意:这个双层map,第一个key是namespace,第二个key是group:servicename组合而成,所以我们的nacos是以namespace和group进行实例区分的,其他的像是cluster与version需要程序手动控制隔离。

3.2 服务心跳

  • 在服务注册之后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直是处可用状态的,防止被剔除,默认是5s发送一次心跳

3.3 服务同步

  • Nacos Server集群之间会相互同步服务实例,用来保证服务信息的一致性,leader raft。
  • 具体的Raft协议,我们在另外的博客中进行了详细的解释

3.4 服务发现

  • 服务消费者(Nacos Client)在调用服务提供者的服务的时候,会发送一个Rest请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。

3.5 服务健康检查

  • Nacos Server会开启一个定时任务用来检查注册服务实例的健康状态,对于超过15s没有收到客户端心跳的实例会将他的healthy属性设置为false
  • 客户端服务发现的时候不会发现healthy属性是false的实例
  • 如果某个实例在30s之后还是没有收到心跳,则直接被剔除
  • 剔除的实例如果恢复了,重新发送心跳则会进行重新注册。

3.6 Nacos的整体架构

在这里插入图片描述

3.7 服务注册表结构

在这里插入图片描述

3.8 服务领域模型

在这里插入图片描述

3.9 服务实例数据

  • 我们直接访问固定API的请求
    在这里插入图片描述

4. Spring Cloud Alibaba的Nacos的快速开始

4.1 Spring Cloud Alibaba版本的选型

在这里插入图片描述
在这里插入图片描述

4.2 搭建Nacos-client服务

4.2.1 引入pom依赖

  • 引入版本的管理,在父pom文件中引入
<dependencyManagement>
    <dependencies>
        <!--引入springcloud的版本-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 当前项目中引入依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

4.2.2 application.properties文件中配置

  • 注意: server-addr后面的内容不需要写协议,就是不写http这些的
# nacos的配置
spring:
  cloud:
    nacos:
      discovery:
        # 远程地址,记得不要写协议,就是在最前面不要写http
        server-addr: 192.168.0.108:8848

4.2.3 启动springboot应用,观察是否注册成功

  • 启动之后,登录nacos的管理页面
    在这里插入图片描述

4.2.4 测试

  • 使用RestTemplate进行服务调用
String url = "http://service-order/order/findOrderByUserId/"+id;
  • 注意:我们这里是直接使用微服务名字进行调用的,那么我们就需要使用@LoadBalance注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
  • 到这里我们的nacos已经安装完毕了,并且测试成功。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值