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更具备扩展性,用户可以自定义数据用于描述实例、服务、集群等;
集群:服务实例的集合,服务实例组成一个默认集群,集群可以被进一步按需求划分,划分的单位可以是虚拟集群,相同集群下的实例才能相互感知。
应用通过 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 还提供服务实例的上下线操作,在服务详细页面,可以点击实例的 “上线” 或者 “下线” 按钮,被下线的实例,将不会包含在健康的实例列表里。
Nacos 服务发现的更多相关文章
- SpringCloud使用Nacos服务发现实现远程调用
本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...
- SpringBoot使用Nacos服务发现
本文介绍SpringBoot应用使用Nacos服务发现. 上一篇文章介绍了SpringBoot使用Nacos做配置中心,本文介绍SpringBoot使用Nacos做服务发现. 1.Eureka闭源 相 ...
- SpringCloud之Nacos服务发现(十七)
一 Nacos简介 Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现.配置和管理. Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并 ...
- Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理
随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...
- Spring Cloud Alibaba学习笔记(2) - Nacos服务发现
1.什么是Nacos Nacos的官网对这一问题进行了详细的介绍,通俗的来说: Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题: 1.服务A如何发现服务B 2.管理微服务的配置 ...
- Alibaba Nacos 服务发现组件集群部署
前面学习了单机模式下的启动,生产环境中部署nacos肯定是使用集群模式cluster保证高可用. 官方文档的集群部署推荐使用VIP+域名模式,把所有服务列表放到一个vip下面,然后挂到一个域名下面. ...
- Nacos服务发现源码解析
1.Spring服务发现的统一规范 Spring将这套规范定义在Spring Cloud Common中 discovery包下面定义了服务发现的规范 核心接口:DiscoveryClient 用于服 ...
- Nacos服务发现
基础配置初始化 NacosDiscoveryClientConfiguration NacosDiscoveryProperties 初始化Nacos基础配置信息的bean,主要指yaml中配置Nac ...
- 配置中心Nacos(服务发现)
服务演变之路 单体应用架构 在刚开始的时候,企业的用户量.数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码.编译.打包并且部署在⼀个Tomcat容器中的架构模式就是单体应用架构,这样的架构既 ...
- Nacos 解读:服务发现客户端
Nacos是阿里巴巴的微服务开源项目,用于服务发现和配置管理,开源以来我就一直关注,在此准备以几篇文章来窥其全貌,但大段大段贴代码就没必要了,这里用自己的一些理解和总结来帮助大家理解.文章将基于截止目 ...
随机推荐
- HTTP和HTTPS的定义和区别
http是什么? 超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上.它指定了客户端可能发送给服务器什么样的消息以及 ...
- bzoj 4176
题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}d(ij)$ 首先推一发式子: $\sum_{i=1}^{n}\sum_{j=1}^{n}d(ij)$ 有一个结论:$d(nm)=\s ...
- Vue 二维码生成插件
1. 安装 qrcode.vue 仓库地址 // vue2 安装1.x版本.vue3 安装3.x版本 npm install --save qrcode.vue // 或 yarn add qrcod ...
- ArrayList 的toArray的转换数组方法的注意事项
ArrayList 的toArray的转换数组方法的注意事项 toArray()一共有两个方法 toArray(T[] a) 和toArray() 源码是 进行使用toArray()方法时候,使用 ( ...
- 确定linux系统网卡对应的物理网口
没插网线的情况下系统上执行ethtool -p eth0 #eth0 对应的物理口一个灯在不停的闪烁ethtool --identify eth0 30 #eth0 对应的物理口闪烁30秒 ... ...
- [cisco][LAB]OSPF in NBMA
NBMA為一種沒有廣播類型的的網路連接,這會使得OSPF建立需要手動設定 拓樸如下: R1# ! interface Loopback0 ip address 172.16.1.1 255.255.2 ...
- 【前端样式】关于Element-plus 菜单 unique-opened不生效的问题
需要保证el-sub-menu 的唯一性,即index得写在el-sub-menu上,否则 unique-opened 属性不生效.
- Kibana+X-pack安装使用
安装Kibana 下载解压安装包,一定要装与ES相同的版本 下载地址: https://www.elastic.co/downloads/kibana wget https://artifacts.e ...
- 7 Free Energies: 7.4 Umbrella Sampling Example
7.4 Umbrella Sampling Example计算丙氨酸二肽 Phi/Psi 旋转的 PMF http://ambermd.org/tutorials/advanced/tutori ...
- MySql.Data 链接MySql数据库 查询语句中带有中文的奇怪问题
首先Nuget管理器安装MySql.Data 1.ado.net 直接链接 public static void Test() { MySqlConnection myconn = null; MyS ...