Nacos
用于构建云原生应用的动态服务发现(注册中心)、配置管理(配置中心)和服务管理平台。
注意:配置中心和注册中心的依赖包不同,注册中心的依赖包是 nacos discovery,而配置中心的依赖包是 nacos config。
1.注册中心
服务注册和服务发现。
微服务集群中,调用者和服务提供者连接管理和请求转发的功能,保证了服务调用者能够稳定的调用到健康的服务。
让程序的开发者无需过多的关注服务提供者的稳定性、健康程度以及调用地址,因为这些都可以依靠 Nacos 进行监测、管理和自动转发。
注册中心中有两个角色:一个是服务提供者 Provider,另一个是服务调用者 Consumer。
2.配置中心
配置中心的作用是将本地配置文件云端化,所谓的云端也就是 Nacos 的服务器端,解决了配置文件的安全性与统一性的问题。
同时又提供了实时的修改、查看、回滚和动态刷新配置文件的功能。
3.配置列表
- 命名空间:隔离不同环境 或 不同应用程序 配置的机制。一个命名空间通常用于标识不同的环境。
- Data ID 是 Nacos 配置中心中每个配置项的唯一标识,类似于文件名的概念。每个配置文件在 Nacos 配置中心中的唯一标识由 命名空间 和 Data ID 决定。
- MD5 是一个哈希值,用于标识配置文件的内容。每当配置内容发生变化时,Nacos 会计算并更新配置文件的 MD5 值。MD5 值有助于 Nacos 追踪配置文件的版本变化,确保配置的正确性和一致性。
4.服务列表
通过服务注册与发现机制,Nacos 维护了一个集中式的服务列表,包含了服务的元数据、健康状况、配置信息等。
启动项目后就可以去Nacos管理后台看看服务是否已经注册到Nacos当中。
不同的服务之间可能会存在:依赖关系
-
服务名是 Nacos 中注册服务时的唯一标识符,用于标识一个特定的服务。
-
服务实例的 IP 地址 是 Nacos 注册服务时服务实例的网络地址,用于标识实例所在的物理或虚拟主机。
-
端口,用于与外界进行通信。与 IP 地址共同标识了一个服务实例的具体位置。
-
临时实例指的是一个生命周期受限的服务实例。它是动态注册的,通常由某个客户端或容器自动注册到 Nacos,且它在没有心跳或者被显式取消注册时会自动过期。
-
权重是一个用于负载均衡的配置项,决定了服务实例在负载均衡时的优先级。权重越高,表示该服务实例接收的流量比例越大。
-
健康状态是 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 等方式调用其他微服务。
-
返回响应:目标服务将结果返回给网关,网关再将响应返回给客户端。