Nacos 服务发现
更多内容,前往 IT-BLOG
一、Nacos 简介
Nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。Nacos 使服务更容易注册,并通过 DNS或 HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求;官网
为什么需要注册中心:微服务可能是部署在云环境的,服务实例的网络位置或许是动态分配的。另外,每一个服务一般会有多个实例来做负载均衡,由于宕机或升级,服务实例网络地址会经常发生变动改变。再者,每一个服务也可能应对临时访问压力增加新的服务节点。
基于上述问题,服务之间如何感知?服务如何管理?这就是服务发现解决的问题。如下图:
总结一下,在微服务环境中,由于服务运行实例的网络地址和数量是不断动态变化的 ,因此无法使用固定的配置文件来记录服务提供方的网络地址,必须使用动态的服务发现机制用于实现微服务间的相互感知。各服务实例会上报自己的网络地址,这样服务中心就形成了一个完整的服务注册表,各服务实例会通过服务发现中心来获取访问目标服务的网络地址,从而实现服务发现的机制。
二、搭建 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 在经过阿里内部多年生产经验后提炼出的数据模型,则是一种服务-集群-实例的三层模型,这样基本可以满足服务在所有场景下的数据存储和管理。
元信息能够让 nacos更具备扩展性,用户可以自定义数据用于描述实例、服务、集群等;
集群:服务实例的集合,服务实例组成一个默认集群,集群可以被进一步按需求划分,划分的单位可以是虚拟集群,相同集群下的实例才能相互感知。
应用通过 Namespace、Service、Cluster(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 还提供服务实例的上下线操作,在服务详细页面,可以点击实例的 “上线” 或者 “下线” 按钮,被下线的实例,将不会包含在健康的实例列表里。