Nacos
1、认识与安装nacos
什么是nacos?
Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。
官方介绍是这样的:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
官方网址:http://nacos.io
nacos安装
1、先到nacos的GitHub官网进行下载:https://github.com/alibaba/nacos/tags
2、下载完成后,点击解压到我们方便找到的路径当中
3、在命令行当中启动bin文件夹当中的startup.cmd
startup.cmd -m standalone
4、在浏览器中输入http://192.168.17.1:8848/nacos/index.html (默认的账号密码都是nacos)
如果需要修改端口,在conf文件夹当中用记事本打开application.properties文件,找到server.port修改即可
2、服务注册
1、在父工程中添加spring-cloud-alilbaba的管理依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2、添加nacos的客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、在yml配置文件当中配置naco服务地址
spring
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
3、Nacos服务分级存储模型
关于服务跨集群调用问题
- 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高
- 本地集群不可访问时,再去访问其它集群
spring
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
discovery:
cluster-name: HZ #集群名称
如果没有定义集群默认默认就是归属本地
Nacos服务分级存储模型
- 一级是服务,例如userService
- 二级是集群,例如杭州/上海
- 三级是实例,例如杭州机房的某台部署了userService的服务器
设置实例的集群属性方法:
在配置文件中添加spring.cloud.nacos.dicovery.cluster-name属性即可
4、NacosRule负载均衡
在没开启NacosRule负载均衡之前,Nacos默认使用轮询的方式在各个服务器当中进行访问。
配置NacosRule:
userService #配置服务名称
ribbon:
NFloadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #开启NacosRule负载均衡
- NacosRule负载均衡默认同集群服务实例优先
- NacosRule确定了可用实例后,访问方式为随机访问
- 如果跨集群访问会有警告信息
5、服务实例的权重设置
目的:在服务器设备性能好的机器上多承担一些用户请求,性能差的少承担一些用户请求
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高!
配置方式:
1、在Nacos控制台选中实例后面的编辑按钮
2、将权重设置为你想要的大小(0-1)即可(越小访问的几率也越小)
6、环境隔离配置
Nacos管理台有一个单独的菜单”命名空间”,里面默认存在一个名为”public” 的默认命名
空间,我们在使用Nacos时不管是作为注册中心还是配置中心,都是作用在该命名空间之下
的,那么这个命名空间到底起着什么作用呢?其实Nacos基于Namespace帮助用户逻辑隔离
多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环
境的同一个配置(如数据库数据源)可以定义不同的值。
让我们先来看看隔离之前的配置:
开启两个服务分别开启了orderService和userService,此时在nacos控制台的界面为;
到nacos控制台新建一个命名空间名为dev
配置orderService环境隔离:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务地址
discovery:
namespace: 7712e234-2a11-4bd6-a5ba-e12caedef75a #dev环境,此字符串为nacos控制台新建命名空间时生成的id
重启服务之后,nacos控制台显示为:
可以发现,orderService被分组到了dev,此时接口调用会发现orderService无法调用userService,提示服务器错误
圈红翻译:负载平衡器没有可用于客户端的服务器:userservice
可知
- namespace用来做环境隔离
- 每个namespace都有唯一id
- 不通namespace下的服务不可见
7、Nacos、Eureka
相同点
- 都支持服务注册和服条拉取
- 都支持服务提供者心跳方式做健康检测
区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被
剔除 - Nacos支持服务列表变更的消息推送模式,服务列表
更新更及时 - Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/147349.html