Nacos 服务发现

更多内容,前往 IT-BLOG

一、Nacos 简介


Nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。Nacos 使服务更容易注册,并通过 DNS或 HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求;官网

为什么需要注册中心:微服务可能是部署在云环境的,服务实例的网络位置或许是动态分配的。另外,每一个服务一般会有多个实例来做负载均衡,由于宕机或升级,服务实例网络地址会经常发生变动改变。再者,每一个服务也可能应对临时访问压力增加新的服务节点。

基于上述问题,服务之间如何感知?服务如何管理?这就是服务发现解决的问题。如下图:

上图中服务实例本身并不记录服务生产方的网络地址,所有服务实例都包含一个服务发现客户端
【1】在每个服务启动时会向服务发现中心上报自己的网络位置。这样,在服务发现中心内部会形成一个服务注册表,服务注册表是服务发现的核心部分,是包含所有服务实例的网络地址的数据库。
【2】服务发现客户端会定期从服务发现中心同步服务注册表 ,并缓存在客户端。
【3】当需要对某服务进行请求时,服务实例通过该注册表,定位目标服务网络地址。若目标服务存在多个网络地址,则使用负载均衡算法从多个服务实例中选择出一个,然后发出请求。

总结一下,在微服务环境中,由于服务运行实例的网络地址和数量是不断动态变化的 ,因此无法使用固定的配置文件来记录服务提供方的网络地址,必须使用动态的服务发现机制用于实现微服务间的相互感知。各服务实例会上报自己的网络地址,这样服务中心就形成了一个完整的服务注册表,各服务实例会通过服务发现中心来获取访问目标服务的网络地址,从而实现服务发现的机制。

二、搭建 Nacos服务端


下载地址:链接

下载后解压,进入 bin目录,双击 startup.cmd。启动服务 nacos的默认端口是8848:

三、服务生产者与消费者配置

【1】引入 nacos依赖

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

【2】application.yml 配置 nacos 服务地址和应用名称

1 spring:
2   cloud:
3     nacos:
4       discovery:
5         server-addr: 127.0.0.1:8848
6   application:
7     name: quickstart-provider

【3】启动类上添加 @EnableDiscoveryClient

@EnableDiscoveryClient

 多实例的情况是相同的服务,不同的端口号,注册到 Nacos的服务名是相同的,就会识别为多个实例;

四、服务发现数据模型

Nacos 在经过阿里内部多年生产经验后提炼出的数据模型,则是一种服务-集群-实例的三层模型,这样基本可以满足服务在所有场景下的数据存储和管理。

命令空间(Namespace):用户进行租户粒度的配置隔离,命令空间不仅适用于 nacos的配置管理,同样适用于服务发现。Namespace的常用场景之一是不同环境配置的隔离,例如开发测试环境和生产环境的资源隔离。
服务:提供给客户端的软件功能,通过预定义接口网络访问;
服务名:服务提供的标识,通过该标识可以唯一确定其指代的服务;
实例:提供一个或多个服务的具有可访问网络地址(IP:port)的进程,启动一个服务,就产生一个服务实例;
元信息:nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签,从作用范围来看,分为服务级别的元数据、集群的元数据及实例的元数据;

元信息能够让 nacos更具备扩展性,用户可以自定义数据用于描述实例、服务、集群等;

集群:服务实例的集合,服务实例组成一个默认集群,集群可以被进一步按需求划分,划分的单位可以是虚拟集群,相同集群下的实例才能相互感知。

应用通过 NamespaceServiceCluster(DEFAULT)的配置,描述了该服务向那个环境(如开发环境)的哪个集群注册实例:

1 spring:
2   cloud:
3     nacos:
4       discovery:
5         server-addr: 127.0.0.1:8848   #注册中心地址
6         namespace: adsfjklk-3224-83k4-9ds2-r3kkl2khb43k8  #环境
7         cluster-name: DEFAULT #集群名称  默认为 DEFAULT
8   application:
9     name: quickstart-provider

五、服务管理

服务流量权重支持及流量保护:Nacos 为用户提供了流量权重控制的能力,同时开发了服务流量的阈值保护,以帮助用户更好的保护服务不被意外打垮。如下图所示,可以点击实例的 “编辑” 按钮,修改实例的权重。如果想增加实例的流量,可以将权重调大,如果不想实例接收流量,则可以将权重设为0;

服务元数据管理:Nacos 提供了多个维度的服务元数据暴露,帮助用户存储自定义的信息。这些信息都是以 K-V的数据结构存储,在控制台上,会以 k1=v1 这样的格式展示。在服务详细页面,也能看到添加的元数据信息。
服务优雅上下线:Nacos 还提供服务实例的上下线操作,在服务详细页面,可以点击实例的 “上线” 或者 “下线” 按钮,被下线的实例,将不会包含在健康的实例列表里。

posted @ 2020-11-14 15:23  Java程序员进阶  阅读(681)  评论(0编辑  收藏  举报