初识API网关

article/2025/8/27 6:14:38

网关是什么

百度百科:网关(Gateway)又称网间连接器、协议转换器,在网络层以上实现,连接两个或者多个广域网或者局域网。

我们这里说的是API网关,指的是所有api调用的统一入口。

api网关的在架构中的位置,如下图
在这里插入图片描述
​ 图1

为什么需要网关

随着微服务的增多,如果跟之前一样还是客户端直接对接不同的微服务,会有很多不便:

  1. 客户端多次请求不同的服务,增加了客户端的复杂性
  2. 可能存在跨域问题
  3. 每个服务都需要独立身份认证
  4. 随着项目的发展,将难以重构

网关的功能

在这里插入图片描述

  1. 安全防护

    • 防刷,黑白名单
  2. 协议适配

    • 封闭内部不同的协议实现,对外提供统一的协议
  3. 流量监控和容错

    • 限流,降级,熔断
  4. 统一接入

    • 统一认证鉴权
    • 统一限流
    • 避免新增服务还需要新分配域名,配置nginx,服务拆分还需要客户端配合改造。
  5. 其他:日志,缓存(幂等接口的缓存)

常见的网关实现

zuul

基于web servlet,核心是一系列的filtres,无缝集成hystrix,zuul1是单线程接收转发处理,阻塞IO,不支持长连接。目前已有zuul2.
在这里插入图片描述

kong

本质基于nginx+lua(略)

traefik

go语言开发,目前比较适合k8s。

gateway

组成部分:
在这里插入图片描述

  1. 路由:最基础部分,唯一的ID对应的目的URL,包含若干断言和过滤器。
  2. 断言:根据配置的路由规则,对http request进行断言匹配。(if else)
  3. 过滤器:对请求和响应进行修改。

工作原理:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvGkzEjz-1644834368139)(images/image-20210606214157231.png)]

​ 客户端向Spring Cloud Gateway发出请求。如果gateway handler mapping确定了一个请求与路由匹配,它将被发送到gateway Web handler。过滤器被虚线分隔的原因是,过滤器可以在发送代理请求之前和之后运行逻辑。执行所有的“pre”过滤逻辑。然后发出代理请求。代理请求发出后,将运行“post”筛选逻辑。

servicemesh

去中心化的方案(略)

怎么使用网关

以spring cloud gateway为例

路由规则

路由规则
datetime
after
before
between
Cookie
Header
Host
Method
Path
Query
RemoteAddr
weight
  1. Path

    spring:cloud:gateway:routes:- id: baidu_   #          路由ID唯一uri: http://baidu.com   #          路由URI,路由到的服务地址predicates:  #          断言判断Path=/baidu/**  # 匹配对应的URl请求,将匹配的请求加到URI后面
    
  2. Query

    spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=red, gree.   #包含请求参数red并且参数值满足正则表达式gree。如green,geet都匹配
    
  3. Method

    spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- Method=GET,POST  #GET,POST方法匹配
    
  4. DateTime

    spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2017-01-20T17:42:47.789-07:00[America/Denver]  #该时间之后
    
    spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2017-01-20T17:42:47.789-07:00[America/Denver]  #该时间之前
    
    spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:#该时间之间- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
    
  5. RemoteAddr

    spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr=192.168.1.1/24  #请求地址匹配到
    
  6. Header

    spring:cloud:gateway:routes:- id: header_routeuri: https://example.orgpredicates:- Header=X-Request-Id, \d+   #请求头包含
    
  7. weight

    spring:cloud:gateway:routes:- id: weight_highuri: https://weighthigh.orgpredicates:- Weight=group1, 8  #group1组80%的流量- id: weight_lowuri: https://weightlow.orgpredicates:- Weight=group1, 2  #group1组20%的流量
    

动态路由

根据服务名称路由

spring:cloud:gateway:routes:- id: baidu_   #路由ID唯一uri: lb://customer-service   #动态路由,根据注册中心的服务名称自动选择predicates:  # 断言判断Path=/baidu/**  # 匹配对应的URl请求,将匹配的请求加到URI后面

根据serviceId自动路由

spring:cloud:gateway:discovery:locator:enabled: true    #从注册中心自动获取

过滤器

网关过滤器(gatewayFilter)

只作用在当前路由上或者通过spring.cloud.default-filters配置在全局,作用在所有路由上.

https://docs.spring.io/spring-cloud-gateway/docs/2.2.8.RELEASE/reference/html/#gatewayfilter-factories

全局过滤器(globalFilter)

不需要在配置文件里配置,作用在所有的路由上,最终通过gatewayFilterAdapter包装程gatewayfilterChain可识别的过滤器.

https://docs.spring.io/spring-cloud-gateway/docs/2.2.8.RELEASE/reference/html/#global-filters

GlobalFilter
LoadBalancer
LoadBalancerClientFilter-阻塞
ReactiveLoadBalancerClientFilter-非阻塞
HttpClient
NettyRoutingFilter
NettyWriteResponseFilter
Websocket
WebsocketRoutingFilter
ForwardPath
ForwardPathFilter
RouteToRequestUrl
RouteToRequestUrlFilter
webClient

自定义过滤器

自定义网关过滤器

实现接口: GatewayFilter,Ordered

自定义全局过滤器

实现接口:GlobalFilter, Ordered , 交给容器会自动生效,不需要配置.


http://chatgpt.dhexx.cn/article/p9S9ddeG.shtml

相关文章

API Gateway(API网关)介绍

API Gateway是一个服务器,也可以说是进入系统的唯一节点。这跟面向对象设计模式中的Facade模式很像。API Gateway封装内部系统的架构,并且提供API给各个客户端。它还可能有其他功能,如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处…

API网关简介|TaobaoAPI接入

API网关是什么 在日常工作中,不同的场合下,我们可能听说过很多次网关这个名称,这里说的网关特指API网关(API Gataway)。字面意思是指将所有API的调用统一接入API网关层,由网关层负责接入和输出。 那么在什…

谈谈 API 网关

作者:预流 链接:https://www.jianshu.com/p/b52a2773e75f 背景 理论上,客户端可以直接向微服务发送请求,每个微服务都有一个公开的URL,该URL将映射到微服务的负载均衡器,由它负责在可用实例之间分发请求。…

API网关之Kong网关简介

1. Kong简介 Kong是一款基于OpenResty(Nginx Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统…

如何手撕一个API 网关(API Gateway)?

一、什么是API Gateway 一个比较普遍的定义如下: API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。 API网关方式的核心要点是&…

接口网关

1、什么是接口网关? 接口网关的作用:拦截请求,类似Nginx(在nginx中配置拦截策略),对该请求进行权限控制,负载均衡、日志管理、接口调用监控等 所有请求都交给接口网关,让网关再进行…

微服务中的 API 网关(API Gateway)

以下是个人于搭建脚手架过程中的一些理念。 SpringCloud微服务架构中,会使用到网关服务。那么可想而知,网关作为边缘服务,其承受的压力是最大的,当然是要考虑网关的高可用,那么就需要多个网关服务集群部署&#xff0c…

API网关,网关平台API流量统一入口

API网关作为API网关平台的API流量的统一入口承担着非常重要的数据输入输出工作,API网关最核心的作用是对服务进行路由并进行数据转发,API网关将成为前后端交互以及内外网交互的唯一数据进出口,所以API网关适合于进行服务鉴权.数据缓存.流量控…

API 网关 (API Gataway)

API 网关 (API Gataway) API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会…

云原生中为什么需要API网关?

目录 一、API 的状态二、API 价值链三、API 挑战四、安全和访问控制五、可靠性和性能六、可见性和治理七、什么是 API 网关?八、为什么需要 API 网关?九、结论越来越多的组织正在转向 API 驱动的架构。 这种强大的方法可帮助他们快速创新,与同类最佳的外部服务集成,并以前所…

API网关介绍及选型(kong)

文章目录 为什么需要 API 网关API网关的功能API网关选型API 网关实现对比 kong vs tyk kongKong 支持功能Kong 的管理方式kong端点kong策略模式 docker启动kong基于kong oauth2 acl的用户接入权限管理整体流程需求实现 API网关是一个服务器,是系统的唯一入口。从面…

API 网关如何工作?

API 网关如何工作? 在本文中阅读和探索 API 网关、其优势及其工作原理! 鲁奇塔瓦玛 API 网关是微服务架构的重要组成部分。API 网关是一种软件模式,它放置在应用程序编程接口 (API) 或一组微服务之前,以促进传入请求和传出数据和服…

API网关

1、API网关介绍 API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分…

一文搞懂 API 网关

Content 前言API GatewayAPI注册协议转换服务发现服务调用优雅下线性能缓存限流稳定性熔断降级日志隔离网关管控平台其他 总结 前言 假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等。 那么这里就会遇到一…

使用spring cloud搭建微服务框架

bubbozookeeper制作的基于dubbo的微服务框架,可以说算是有点过时了,我们先来了解一下什么是微服务。 微服务就是对某个应用系统的每个API进行有效的拆分,然后通过某种连接方式,用以提供给其他应用系统调用的API的服务,…

开源微服务框架 汇总

诞生于 2014 年的“微服务架构”,其思想经由 Martin Fowler 阐述后,在近几年持续受到重视,理论与相关实践都不断发展,目前它已经成为了主流软件架构模式。 关于微服务架构是什么,没有一个明确的定义,每个实…

微服务框架支持

事务上下文 目录概述需求: 设计思路实现思路分析1.Seata 的事务上下文由 RootContext 来管理。2.应用可以通过 RootContext 的 API 接口来获取当前运行时的全局事务 XID。3.应用是否运行在一个全局事务的上下文中,就是通过 RootContext 是否绑定 XID 来判…

开源微服务框架

诞生于 2014 年的“微服务架构”,其思想经由 Martin Fowler 阐述后,在近几年持续受到重视,理论与相关实践都不断发展,目前它已经成为了主流软件架构模式。 关于微服务架构是什么,没有一个明确的定义,每个实…

微服务框架入门(springcloud)

在学习微服务之前我们先理解一下什么是微服务? 微服务是springcloud吗? 微服务是分布式架构的一种,分布式架构就是要把服务拆分,拆分的过程中存在着许多的问题,springcloud仅仅是解决了拆分过程中的服务治理问题,至于其他的复制的问题并没有给出方案 传统的架构把业务写在…

golang 微服务框架

rpcx是一个类似阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golang net/rpc实现。 谈起分布式的RPC框架,比较出名的是阿里巴巴的dubbo,包括由当当网维护的dubbox。 不知道dubbo在阿里的内部竞争中败给了HSF,还是阿里有意将其闭源…