吐血整理微服务架构API网关的小技巧(Gateway简单入门)

目录

一、场景介绍

二、API网关

什么是API网关?

API能做什么事情?

三、Gateway 

什么是Gateway

Gateway的几个重要组件

怎么用Gateway?

四、搭建入门Gateway(省去Cloud配置)

引入依赖

配置yml(也可使用配置类在项目中配置)

四、总结


一、场景介绍

开发过程中,随着业务需求的增加,处理请求瓶颈等等原因,大部分公司会将原有的单体架构服务向微服务架构迁移。举个简单的例子,原某个单体架构中有用户中心,基础数据,支付等等多种业务。一个服务完全满足不了现在的需求,于是拆分出,用户模块,基础数据模块,支付模块,损益模块等多个微服务。

                              

  • user-service   用户服务   /user/*
  • account-service   支付服务  /account/*
  • infomation-service   基础信息服务  /information/*

服务拆分以后,对应业务可以在对应模块开发,减轻了原有单体服务的 "重量",各个微服务各司其职,起到自己对应的作用,前端调用也从原有的打在一个单体服务的情况,分发到各个微服务。

                           

但是这样的缺点也很明显。

  • 如果服务部署在不同的服务器上,对应的IP   10.1.1.1/infor 、 10.1.1.2/user 、 10.1.1.3/accout,那么映射关系就是多个,配置很繁琐。
  • 接口不能统一管理,每个服务的接口都是各玩各的,那么问题也就很明显了,最简单的例子,接口鉴权A是A,B是B,C是C。
  • 熔断机制,超时机制,过滤机制,鉴权机制,每个服务都要配置,这样公用配置岂不是要配置3份甚至更多,维护也要维护三份,这样的事情就是浪费时间好么。

那么,我们可不可以对微服务接口进行统一接入管理,公有流量,访问策略统一执行,调用者完全透明。而每个微服务只专心创建和管理提供接口即可。这时候我们就需要引用API网关。

                                  

二、API网关

  • 什么是API网关?

网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

  • API能做什么事情?

        

三、Gateway 

  • 什么是Gateway

Gateway是Spring官方基于Spring5.x,Boot2.x开发的网关,相当于Zuul1.x的升级版,替代版,但是相较于Zuul更高效,而且因为是Spring官方出品,跟SpringCloud融合度更高,使用起来更方便。不仅提供了统一的路由方式,而且提供了Filter链,可以很好的实现路由中心,鉴权中心等功能。而且对服务的限流,熔断,监控也很好的提供了支持。

  • Gateway的几个重要组件

  1. Route(路由):网关的基本构建块。由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
  2. Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
  3. Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,可以使用它修改请求和响应。
  • 怎么用Gateway?

其实就是在Route设置对应的断言,也就是匹配规则,比如断言设置的是 10.1.1.4/user/*  对应 10.1.1.2/user/* ,设置了对应的自定义Filter,Gateway就会按照路由的配置自动转发到对应的服务上面,并且在请求之前会走到自定义的Filter执行过滤规则,这些按照配置都会自动完成,所以对于初始使用来说还是蛮简单的。

四、搭建入门Gateway(省去Cloud配置)

按常规,微服务中搭配Cloud,我们将每个微服务的接口注册到注册中心中,Gateway按照路由就会去注册中心中寻找对应的接口进行转发调用,但是本文仅仅是给大家演示一个入门Demo,所以省去了Cloud部分,直接实现去服务中调用,相当于一个高级些的HttpClient。

  • 引入依赖

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
  • 配置yml(也可使用配置类在项目中配置)

server:
  port: 9099


spring:
  cloud:
    gateway:
      routes:
        - id: server-account
          uri: http://localhost:9083
          predicates:
            - Path=/account/*/*

如上图配置,比如我们访问Gateway的localhost:9099/account/*/*时,Gateway就会按照断言规则去localhost:9083/account/*/*上调用请求。

四、总结

本文仅仅是简单的介绍API网关,目的在于大家理解,为什么我们使用微服务架构以后,还要统一管理API接口,一方面是方便接口调用,另一方面跟做一个切面很像,在接口调用之前,做一个公有策略。后续文章我准备继续探索Gateway,融入Hystrix实现熔断,增加Filter实现Token鉴权,完成鉴权中心和流量中心的配置。

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值