深入微服务-Nacos 核心概念及服务发现实战

4 篇文章 0 订阅
3 篇文章 1 订阅

系列文章目录



前言

本系列带着大家深入微服务 Spring体系的各个框架的基本使用以及底层原理。上一篇文章介绍了Nacos的基础概念以及Nacos Server的搭建,本节将带着大家学习下Nacos的核心概念以及客户端实现服务发现的功能


Nacos 服务发现核心概念

Nacos 架构图
image.jpg
服务(Service)
服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)

服务注册中心 (Service Registry)
服务注册中心,它是服务,其实例及元数据的数据库。底层为Map(namespace, Map(group::serviceName, Service)),服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

服务元数据 (Service Metadata)
服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据

服务提供方 (Service Provider)
是指提供可复用和可调用服务的应用方

服务消费方 (Service Consumer)
是指会发起对某个服务调用的应用方

名字服务 (Naming Service)
提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景


Nacos 数据模型

Nacos 数据模型 Key 有三部分组成,Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP

详见
com.alibaba.cloud.nacos.NacosConfigProperties

/**
 * namespace, separation configuration of different environments.
 */
	private String namespace;
/**
* nacos config group, group is config data meta info.
 */
	private String group = "DEFAULT_GROUP";
spring:
  application:
    name: AppName
  cloud:
    nacos:
      config:
        server-addr: nacos:8848
        namespace: namespaceId # 命名空间id
        group: GroupName # 	分组名称 默认为DEFAULT_GROUP
      discovery:
        server-addr: nacos:8848

Nacos 命名空间界面,支持新增,删除,编辑等操作
image.jpg
Nacos 数据模型
image.jpg

Nacos 服务领域模型

Nacos支持服务在所有场景下的数据存储和管理,Nacos 的服务领域模型为 服务-集群-实例的三层模型。
在这里插入图片描述

Nacos 数据逻辑隔离模型

⼀个用户账号可以新建多个命名空间,每个命名空间对应⼀个客户端实例,这个命名空间对应的注册中心物理集群是可以根据规则进行路由的
实际项目生产中可根据Namespace进行环境隔离(master/develop/test/hotfix),应用可以根据不同的分组进行切换配置,满足实际场景的服务隔离需求
在这里插入图片描述

Nacos 服务发现原理

在这里插入图片描述
Nacos服务发现核心概念:

  • 服务注册:Nacos Client 启动的时候会发送REST 请求(1.0默认为http,2.0为grpc)向Nacos Server注册服务并提供元数据信息,包含服务的别名、host、端口等信息。NacosServer接收到Client注册请求会讲实例信息存储到自身的注册表(底层为Map)中
  • 服务心跳:Nacos Client启动之后会启动一个定时任务每隔一段时间进行心跳通知Nacos Server(默认5s发送一次心跳),防止自身服务被剔除
  • 服务发现:Nacos Client在进行服务调用时会向Nacos Server发起REST请求拉取服务列表,并缓存到本地,为防止缓存与实际服务数据不一致,Nacos Client会启动一个定时任务从Nacos Server拉取最新的注册表信息更新到本地缓存
  • 服务健康检查:Nacos Server会启动一个定时任务检测Nacos Client的健康状态,若15s内没有收到客户端的心跳事件,会将实例的health属性设置为false,如果实例超过30s没有收到心跳事件,会从Nacos Server注册表中剔除该实例

实例的health属性为Nacos Client 健康状态,默认为true

上述的机制会在后续的源码解析详细讲解

Nacos 服务发现实战

1.引入Maven

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

2.启动类加上注解@EnableDiscoveryClient

@SpringBootApplication
@EnableFeignClients({ "com.jany" })
@EnableDiscoveryClient
public class NacosClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosClientApplication.class, args);
    }

}

3.配置文件bootstrap.yml

根据实际情况更改
nacos 为Nacos Server地址
username默认为nacos,密码默认为nacos

spring:
  application:
    name: nacos-client-demo
  cloud:
    nacos:
      discovery:
        server-addr: nacos:8848
        username: nacos
        password: nacos

4.启动之后可在Nacos控制台看到注册上来的服务
Nacos 服务发现

总结

本文主要跟大家介绍了Nacos的核心概念以及服务发现实战,希望多多支持,后续会更深入跟大家讲解Nacos内容。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

janyxe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值