微服务门神-网关了解

时间:2022-12-13 10:53:17

引言

书接上篇 微服务守护神-Sentinel-其他 ,讲完微服务守护神-Sentinel之后,接下来就是微服务门神-网关组件:Gateway

问题引入

小伙伴们都知道在微服务架构中,一个系统会被拆分为很多个微服务,每一个微服务都能对外提供接口,用户访问就如下图啦。

微服务门神-网关了解

仔细观察,你就会发现这种设计,就会存在着诸多的问题:

  • 客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性

  • 认证复杂,每个服务都需要独立认证。

  • 微服务做集群的情况下,客户端并没有负责均衡的功能

 此时怎么办?怎么优雅解决掉这些问题呢?答案很简单,引入API网关。

API网关

所谓的API网关,就是指微系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、路由转发等等。

用上API网关后,上面的用户访问图变成这样了:

微服务门神-网关了解

此时肯定有小伙伴会问:网关是如何知道微服务的地址?网关如何进行负载均衡?网关又怎么关联到具体的微服务?答案其实很简单,网关也可以作为一个微服务,启动时将自己的信息注册到注册中心并且拉取其他微服务的信息,拦截所有请求再通过事先配置好的路由规则找到真实的服务地址,再基于Ribbon负载均衡调用。

最终总结:1>请求分发 2>负载均衡 3>过滤拦截 4>网络隔离

常见网关

  • Nginx+lua

使用nginx的反向代理和负载均衡可实现对api服务器的负载均衡及高可用,lua是一种脚本语言,可以来编写一些简单的逻辑, nginx支持lua脚本

  • Kong

基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。 问题:只支持Http协议;二次开发,*扩展困难;提供管理API,缺乏更易用的管控、配置方式。

  • Zuul

Netflix开源的网关,功能丰富,使用JAVA开发,易于二次开发 问题:缺乏管控,无法动态配置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx,Spring Cloud Gateway

  • Gateway

Spring公司为了替换Zuul而开发的网关服务

注意:SpringCloud alibaba技术栈中并没有提供自己的网关,我们可以采用Spring Cloud Gateway来做网关

Gateway

Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流。

优点:

  • 性能强劲:是第一代网关Zuul的1.6倍

  • 功能强大:内置了很多实用的功能,例如转发、监控、限流等

  • 设计优雅,容易扩展

缺点:

  • 其实现依赖Netty与WebFlux,不是传统的Servlet编程模型,学习成本高

  • 不能将其部署在Tomcat、Jetty等Servlet容器里,只能打成jar包执行

  • 需要Spring Boot 2.0及以上的版本,才支持

好,到这就可以来,大体了解Gateway网关就可以啦,下一篇,我们来看下Gateway怎么玩~一起期待。

 看文字不过瘾可以切换视频版:SpringCloud Alibaba 极简入门