一、微服务网关介绍

1.1 存在的问题

在分布式项目中,不同的微服务有不同的网络地址,而外部的客户端完成一个业务需求时,可能涉及到多个微服务接口,若让客户端直接与多个微服务通信,会带来以下问题:

  • 业务复杂,客户端会多次请求不同的微服务,增加了业务处理时间和业务复杂度
  • 存在跨域的问题
  • 认证复杂,各个微服务都需要先对用户的请求进行身份认证
  • 安全问题,直接将各个微服务模块都暴露给客户端
  • 访问困难,根据实际情况,部分微服务设置了防火墙等方式,无法直接访问
  • 重构复杂,随着项目咖啡啊,若项目需要重新划分微服务,如将多个微服务合并成一个微服务,或是拆分微服务,若是由客户端直接与微服务通信,则会导致工作复杂度增加

 

1.2 微服务网关

1.2.1 概述

使用微服务网关即能解决上面的问题。

网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过网关,这就可以形成这样的功能架构:

  • 网关:处理安全、性能、监控方面的业务
  • 业务微服务:更专注于业务逻辑的实现

整体架构图如下:

       【GateWay】 微服务网关

1.2.2 优点

  • 降低了业务复杂度,让客户端只需发起一次请求到网关,由网关根据业务需求请求各个微服务处理,并将结果返回给客户端。
  • 可以统一解决跨域问题
  • 能够在网关服务中统一处理认证、日志、监控、限流
  • 提高了安全性,由统一的访问入口,降低了业务服务的暴露风险和服务器受攻击面积
  • 便于重构,客户端只负责向网关请求,实际的后端业务处理由后端自己完成,即若修改了后端业务逻辑,无需升级客户端,降低了前后端的耦合性。

 

1.2.3 常用技术

常见的实现微服务网关的技术有:

  • nginx:高性能的HTTP和方向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
  • zuul:由 Netflix 出品的基于JVM路由和服务器的负载均衡器
  • spring-cloud-gateway:由 spring 出品的基于spring 的网关项目,集成断路器、路径重写等

由于spring-cloud-gateway 的性能优于 zuul,且无缝兼容 springboot 等框架的项目,故市场大部分使用 spring-cloud-gateway

 

二、微服务网关的搭建

 

 

 

相关文章: