Nacos、Gateway、Feign

95 阅读5分钟

Nacos

用于构建云原生应用的动态服务发现(注册中心)、配置管理(配置中心)和服务管理平台。

注意:配置中心和注册中心的依赖包不同,注册中心的依赖包是 nacos discovery,而配置中心的依赖包是 nacos config。

1.注册中心

服务注册和服务发现。

微服务集群中,调用者和服务提供者连接管理和请求转发的功能,保证了服务调用者能够稳定的调用到健康的服务。

让程序的开发者无需过多的关注服务提供者的稳定性、健康程度以及调用地址,因为这些都可以依靠 Nacos 进行监测、管理和自动转发。

注册中心中有两个角色:一个是服务提供者 Provider,另一个是服务调用者 Consumer。

2.配置中心

配置中心的作用是将本地配置文件云端化,所谓的云端也就是 Nacos 的服务器端,解决了配置文件的安全性与统一性的问题。

同时又提供了实时的修改、查看、回滚和动态刷新配置文件的功能。

3.配置列表

  1. 命名空间:隔离不同环境不同应用程序 配置的机制。一个命名空间通常用于标识不同的环境。

 

  1. Data ID 是 Nacos 配置中心中每个配置项的唯一标识,类似于文件名的概念。每个配置文件在 Nacos 配置中心中的唯一标识由 命名空间Data ID 决定。

 

  1. MD5 是一个哈希值,用于标识配置文件的内容。每当配置内容发生变化时,Nacos 会计算并更新配置文件的 MD5 值。MD5 值有助于 Nacos 追踪配置文件的版本变化,确保配置的正确性和一致性。

4.服务列表

通过服务注册与发现机制,Nacos 维护了一个集中式的服务列表,包含了服务的元数据、健康状况、配置信息等。

启动项目后就可以去Nacos管理后台看看服务是否已经注册到Nacos当中。

不同的服务之间可能会存在:依赖关系 

  1. 服务名是 Nacos 中注册服务时的唯一标识符,用于标识一个特定的服务。

  2. 服务实例的 IP 地址 是 Nacos 注册服务时服务实例的网络地址,用于标识实例所在的物理或虚拟主机。

  3. 端口,用于与外界进行通信。与 IP 地址共同标识了一个服务实例的具体位置。

  4. 临时实例指的是一个生命周期受限的服务实例。它是动态注册的,通常由某个客户端或容器自动注册到 Nacos,且它在没有心跳或者被显式取消注册时会自动过期。

  5. 权重是一个用于负载均衡的配置项,决定了服务实例在负载均衡时的优先级。权重越高,表示该服务实例接收的流量比例越大。

  6. 健康状态是 Nacos 用于标识服务实例是否健康的状态。如果健康检查失败,该实例将不会被纳入负载均衡的候选池中。

7.元数据是附加信息,用于描述服务实例的特性、配置或标签。

网关

通常用于处理外部请求的入口,配置多个路由,每个路由代表一个微服务。

(1)充当客户端与微服务系统之间的中间层,负责接收客户端的请求,并将请求转发到适当的后端服务;

(2)简化客户端与各个微服务之间的交互,减少客户端对服务细节的了解。客户端只需要知道网关的地址和一些统一的接口,而不需要关注背后的多个微服务。

(3)流量入口,进行前置处理、校验,像token的解析、xss攻击的拦截、黑名单、白名单。

功能:请求路由、负载均衡、安全认证、API限流、日志记录、跨域处理、故障处理等。

Feign

是一个声明式的http客户端,优雅的实现 http 请求的发送,用于与其他服务进行通信。

特点:声明式接口、简化 HTTP 调用(使用注解)、灵活的配置和扩展

使用:只需要声明一个接口,并使用注解来描述 HTTP 请求,Feign 会自动生成实现。

Feign 穿透 是指当使用 Feign 调用远程服务时,尤其是在服务间调用中,Feign 客户端直接请求目标服务,而没有经过任何网关或代理层。

在项目中,当网关请求 A 服务后, A 服务需要调用 B **服务时,并没有经过网关。

A 服务将请求的 header 解析出来放入 ThreadLocal ,然后放入请求 B 服务的 Header B 服务重复解析放入 ThreadLocal *

这种内部的穿透无所谓,但如果在外部调用不用网关就可能会造成安全问题。

一个请求的整体流程如下:

  • API 网关 接收请求并根据路由规则转发到目标微服务。

  • 认证与鉴权:网关可能会检查请求的合法性和权限。

  • 负载均衡:网关通过服务发现和负载均衡选择合适的服务实例。

  • 微服务处理请求:目标微服务根据业务逻辑执行操作(如数据库查询、缓存访问等)。

  • 服务间调用:如有需要,目标服务会通过 Feign、RestTemplate 等方式调用其他微服务。

  • 返回响应:目标服务将结果返回给网关,网关再将响应返回给客户端。