Skip to content
大纲

Gateway网管

微服务网关

不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题

  • 客户端会多次请求不同的微服务,增加了客户端的复杂性
  • 存在跨域请求,在一定场景下处理相对复杂
  • 认证复杂,每个服务都需要独立认证
  • 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施
  • 某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难

以上这些问题可以借助网关解决

  • 网关是介于客户端和服务器端之间的中间层,所有的外部请求都统一发到网关服务(bizspring-module-gateway),网关再根据路由规则转发到相应服务,所以尽管我们的微服务可能会有成百上千个子服务,我们只需配置好路由规则将网关对外就可以了,服务器防火墙也只要开放网关服务的端口(9999)。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由网关来做,这样既提高业务灵活性又不缺安全性,架构图如图所示:

优点如下

  • 安全 ,只有网关系统对外进行暴露,微服务可以隐藏在内网,通过防火墙保护。
  • 易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。
  • 易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
  • 少了客户端与各个微服务之间的交互次数
  • 易于统一鉴权。

动态路由实现

网关中有两个重要的概念,那就是路由配置和路由规则,路由配置是指配置某请求路径路由到指定的目的地址。而路由规则是指匹配到路由配置之后,再根据路由规则进行转发处理。 Spring Cloud Gateway作为所有请求流量的入口,在实际生产环境中为了保证高可靠和高可用,尽量避免重启,需要实现Spring Cloud Gateway动态路由配置。

  • 路由模块

(bizspring-module-gateway)启动时加载路由配置并开启监听实现动态(DynamicRouteInit.java)

  • nacos中配置路由信息

(dynamic_routes)

  • 动态路由就是这么简单,更新路由配置不再需要重启服务

版权许可