> 文章列表 > 【微服务笔记16】微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建

【微服务笔记16】微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建

【微服务笔记16】微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建

这篇文章,主要介绍微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建。

目录

一、Gateway服务网关

1.1、什么是Gateway

1.2、Gateway基础环境搭建

(1)基础环境介绍

(2)引入依赖

(3)添加路由配置信息

(4)运行测试

1.3、Gateway三个核心概念

1.4、Gateway配置信息

(1)routes路由信息配置

(2)defaultFilters默认过滤器配置

(3)predicates断言配置

1.5、高可用网关环境搭建

(1)搭建nginx环境

(2)创建两个Gateway工程


一、Gateway服务网关

1.1、什么是Gateway

在微服务架构里面,会存在很多的微服务应用程序,这些服务集群部署在一起对外提供服务,一般实际开发中,都会通过一个公共的入口地址将微服务应用暴露给客户端,这个公共的入口将其单独作为一个微服务应用,这个应用程序就叫做:服务网关,常见的网关有:zuul、Gateway等,其中Gateway的出现就是为了替代zuul网关。基于网关,可以实现统一用户认证、统一权限校验、接口限流、服务降级、接口调用统计、协议适配等功能。

有五种实现网关功能的方案,分别是:

  • 第一种:nginx + Lua。
  • 第二种:Kong。
  • 第三种:Traefik。
  • 第四种:Spring Cloud Netflix Zuul。
  • 第五种:Spring Cloud Gateway。

1.2、Gateway基础环境搭建

(1)基础环境介绍

这篇文章搭建的基础环境主要包含下面几个工程:

  • 注册中心:eureka服务端(直接使用前几篇文章的应用程序)。
  • 服务提供者:搭建一个服务消费者(consumer-client)、一个服务提供者(provider-client)(直接使用前几篇文章的应用程序)。
  • 网关工程(gateway-server):搭建Gateway网关工程(这篇文章需要创建的新工程)。

(2)引入依赖

  • 创建一个【gateway-server】工程,引入【gateway】依赖。
<!-- 引入 Gateway 依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

(3)添加路由配置信息

server:port: 8888
spring:application:name: gateway-server# 配置 gateway 路由信息cloud:gateway:# 指定路由信息routes:- id: consumer-client # 路由唯一标识,一般和微服务应用名称相同即可# 目标路由的服务地址,这里采用的是静态路由(将微服务的地址写死在配置文件里面)uri: http://localhost:8081/# 配置断言,也就是请求的URI满足哪些规则,才可以匹配当前这个routes路由信息predicates:# 这里使用路由断言,所有 /api/consumer 开头的请求,都将转发到 http://localhost:8081/ 这个服务上面- Path=/api/consumer/

(4)运行测试

依次启动eureka、consumer-client、provider-client、gateway-server四个工程,打开postman,访问gateway-server网关工程访问接口【http://localhost:8888/api/consumer/getUserInfo?username=csdn2023】,此时可以正常返回响应结果,就表示网关工程的基础环境就搭建成功。

1.3、Gateway三个核心概念

Gateway网关中,有三个重要的核心概念,分别是:路由Routes、断言Predicates、过滤器Filter。路由Routes是Gateway网关中最基本的一个组成部分,它主要负责定义微服务的路由信息,它是由路由ID、目标URI、一组断言、一组过滤器组成的。

当客户端一个请求到达Gateway网关的时候,首先会被Gateway Handler Mapping处理,根据URI找到能够匹配的Routes路由信息,然后将路由信息发送到Global Web Handler进行微服务应用程序的接口调用,调用之前会经过一系列的Filter,接口调用成功之后,也会经过一系列的Filter,最终返回给客户端,这就是Gateway网关的一个大致工作原理。

断言是指定路由信息满足哪些规则时候,才会匹配成功,简单的理解为,断言就是一系列的if判断语句,只有当前客户端请求满足条件的时候,才能够找到这个路由信息,然后根据这个路由信息去调用微服务。

过滤器Filter是在调用微服务的过程中,可以在过滤器中增加一些额外的操作,比如:增加header头信息、去掉某些请求参数等等,有两种类型的过滤器:Gateway Filter路由过滤器 和 Global Filter全局过滤器。

1.4、Gateway配置信息

在GatewayProperties类中定义了Gateway网关相关的配置信息,其中大致包含:routes、defaultFilters、streamingMediaTypes等信息,如下所示:

(1)routes路由信息配置

其中routes是最关键的配置信息,用于定义路由信息,每一个路由信息都被抽象成了RouteDefination对象,这个类中包含:id、uri、order、predicates、filters、metadata。

id用于指定路由的唯一标识,一般和微服务名称相同即可;uri用于指定目标微服务的服务地址(可以指定具体的服务地址,也可以结合注册中心实现动态路由功能);order用于指定多种路由中的优先级;predicates用于指定断言;filters用于设置过滤器;metedata用于设置元数据信息。

(2)defaultFilters默认过滤器配置

Gateway给我们提供了一些默认的过滤器,使用的时候通过defaultFilters属性指定,每一个过滤器对象被抽象成一个FilterDefination类。

(3)predicates断言配置

predicates属性用于指定路由的断言,满足断言的URI将匹配当前这个路由信息。断言可以有多个,只要满足其中一个条件,就可以匹配当前这个路由信息,按照顺序依次匹配,只要前面匹配成功了,后面的断言就不会执行了,每一个断言对象都被抽象成了一个PredicateDefination类。

1.5、高可用网关环境搭建

在高并发的场景下,一台Gateway网关服务没办法处理大量的请求,如果此时Gateway服务宕机了,那么整个微服务系统也将不可用,所以为了提高服务的可用性,需要对Gateway部署多台服务结点,也就是集群部署Gateway网关。

那这里就有一个问题啦,客户端应该和哪个Gateway进行交互呢???为了解决这个问题,就需要借助于Nginx服务器来实现请求的分发,将请求依次分发到不同的Gateway网关中,从而实现高可用的网关环境。

(1)搭建nginx环境


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;upstream gateway {server 127.0.0.1:8888;server 127.0.0.1:9999;}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}location /api-gateway {# 负载均衡proxy_pass http://gateway;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

(2)创建两个Gateway工程

要实现Gateway网关的高可用,就需要部署多台网关工程,然后通过nginx请求转发,指定通过哪一台Gateway网关进行请求处理。采用这种模式搭建的Gateway网关,就可以实现高可用,即使其中一台Gateway宕机了,也有其他的Gateway可以继续提高服务。

到此, Gateway服务网关的基础环境、高可用网关环境搭建就搭建完啦。

综上,这篇文章结束了,主要介绍微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建。