记录Nacos的那些事儿

简介: 记录Nacos目前存在的弊端、缺点以及后续。

Nacos 旧史

2018年11月左右,Springcloud 联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本。随后,Spring Cloud 官方Twitter也发布了此消息。

随着这一消息发布,外面才知道 Nacos 的诞生。毕竟是大厂的 KPI 产物,我们来尝尝鲜。

一、环境准备

  • Spring Boot: 2.3.12
  • Spring Cloud: Hoxton.SR12
  • Spring Cloud Alibaba: 2.2.6.RELEASE
  • Maven: 3.5.4
  • Java 1.8 +
  • Oauth2 (Spring Security 5.3.9)

安装 Nacos

下载 Nacos 地址:https://github.com/alibaba/nacos/releases

版本:v1.2.1

执行:

Linux/Unix/Mac:sh startup.sh -m standalone

Windows:cmd startup.cmd -m standalone

启动完成之后,访问:http://127.0.0.1:8848/nacos/,可以进入Nacos的服务管理页面,具体如下:

在上面,我们可以看到启动的服务列表信息,同时,我们也可以去配置此服务的相关配置:

image.png

具体的配置如下:

image.png

这里,我们可以设置配置的类型,比如:yaml、properties。默认的是后者,这里我们可以设置:

spring:
 application:
   name: cas-server
 cloud:
   nacos:
     server-addr: 127.0.0.1:8848
     discovery:
       enabled: true
       namespace: a48cec97-fa0f-48e0-97c7-0aced5c7ecbe #默认public
       #group: mine #${nacos.runtime-env}
       heart-beat-interval: 10
       heart-beat-timeout: 15

     config:
       enabled: true
       #namespace: ${nacos.namespace}
       file-extension: yaml #默认properties
       #group: ${spring.application.name}
       shared-configs:
         - data-id: application-mysql.properties
           refresh: false

不同 namespace 下的服务互调

在 Nacos 里,有几个概念,命令空间 namespace、分组 group 等。虽然这里的关键词跟 K8s 类似,但差别还是很大。这就是我今天想说的坑。这里我们默认配置了 properties。

在 Nacos 中,为了将不同的服务进行划分区域,这也引入了一些概念:namespace、group 我们先来设置一下 namespace,假如我们这里新建一个 namespace:

那么在注册服务时,我们把这个服务放在了这个 new-NS下,启动该服务,我们来看信息:

我们可以看到cas-server服务在 namespace 名称为 new-NS 下。

下面,我们继续加入一个新服务,把这个新服务放在默认的 namespace 下,假设利用它来调用 cas-server 服务。

image.png

接下来,我们通过命令调用服务:

curl -i -H "Accept: application/json" -H "Authorization:bearer fbbb08b5-fc9c-4bf9-a676-6a1d5d6a0dda" -X GET http://localhost:2001/api/user/get

此时可以看到日志:

image.png

这里由于被访问的服务是需要鉴权的,所以可以看到:这里的日志是去请求统一认证鉴权中心的check_token接口。由于这两个服务都被注册到 Nacos,这里直接通过域名来请求了。

但从日志中可以看到,抛出异常:java.lang.IllegalStateException: No instances available for cas-server,这是因为无法解析到这个域名对应的 ip。但从上面,我们可以看到明明有注册信息,为啥不能访问呢?

这就是 Nacos 现在呈现的第一个坑:无法在跨namespace 下访问其他服务。如果我们把cas-server也放在默认的 namespace 下呢?

image.png

再次,我们通过命令调用服务,会发现可以正常请求了:

image.png

我们发现正常请求后,返回了信息,只不过返回的是400,这是由于我这个 token 失效了,无效的token,请重新认证访问

同 namespace 下不同组的服务互调

上面说到不同 namespace 下的服务互调的问题,接下来,我们看看同一 namespace 下不同分组的服务互调是咋样的呢?

同样的,我们假设把 cas-server 分配到一个新的 group:

spring:
 application:
   name: cas-server
 cloud:
   nacos:
     server-addr: 127.0.0.1:8848
     discovery:
       enabled: true
       group: mine
       heart-beat-interval: 10
       heart-beat-timeout: 15

新服务rest-service还是放在默认分组DEFAULT_GROUP里:

image.png

接下来,我们通过命令调用服务:

curl -i -H "Accept: application/json" -H "Authorization:bearer fbbb08b5-fc9c-4bf9-a676-6a1d5d6a0dda" -X GET http://localhost:2001/api/user/get

我们来看看日志:

image.png

发现还是跟前面说的那种情况请求后一样,仍然抛出异常:java.lang.IllegalStateException: No instances available for cas-server

结论

在 Nacos 较高版本中验证这两种情况,同样得出相同的结论:同一namespace下的不同group的服务无法相互调用,不同namespace下的同group的服务无法相互调用

PS

在这里说出 Nacos 的坑,并不是在指责 Nacos 团队哈,只是希望官方尽快出新的 feature。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
网络协议 数据库连接 Nacos
nacos常见问题之nacos报错400如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
19天前
|
运维 Java API
nacos常见问题之Nacos读取配置文件失败如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
19天前
|
Nacos
nacos日志
"服务下线,在nacos看哪个日志文件的 ? alipay-jraft.log config-memory.log config-trace.log nacos.log naming-raft.log remote-digest.log tps-control.log cmdb-main.log config-notify.log core-auth.log naming-distro.log naming-rt.log remote-push.log config-client-request.log config-pull-check.log istio-main.log naming-e
157 1
|
7天前
|
存储 Nacos 数据安全/隐私保护
【SpringCloud】Nacos的安装、Nacos注册、Nacos服务多级存储模型
【SpringCloud】Nacos的安装、Nacos注册、Nacos服务多级存储模型
26 1
|
安全 关系型数据库 MySQL
Nacos持久化到本地以及Nacos的集群配置
Nacos持久化到本地以及Nacos的集群配置
393 0
Nacos持久化到本地以及Nacos的集群配置
|
19天前
|
前端开发 Java 网络安全
nacos常见问题之Nacos获取配置文件时报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
19天前
|
运维 Java API
nacos常见问题之nacos 2.2.3报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
19天前
|
Kubernetes Nacos 数据库
nacos常见问题之修改nacos密码后报错403如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
19天前
|
SQL 关系型数据库 Nacos
nacos操作
nacos操作
|
19天前
|
Nacos
Nacos的某些配置
Nacos的某些配置
43 2