目录

  • 后台服务网关
    • Spring Cloud Gateway
      • 遇到问题
    • Apache ShenYu
    • Higress
    • fizz-gateway-community
    • 企业案例
  • 前台流量网关
    • APISIX
  • API网关介绍
    • API管理
    • 全异步
    • 链式处理
    • 请求限流
    • 服务降级
    • 业务隔离
    • 网关功能

后台服务网关

Spring Cloud Gateway

基于Nacos实现Spring Cloud Gateway实现动态路由

Spring Gateway 如何搭建网关服务以及实现动态路由?

微服务spring cloud gateway 路由参数和过滤策略配置(yaml和json格式)

Spring Cloud Gateway自定义过滤器

从0到1学SpringCloud——11 gateway网关路由配置详解

从0到1学SpringCloud——12 gateway 动态配置网关路由规则

springcloud gateway网关获取post请求参数,网关路由,网关限流,熔断降级等实际操作

遇到问题

1.get请求含有特殊字符报400 bad request问题解决
spring-boot.version: 2.7.5
spring-cloud.version: 2021.0.5
yml配置:

#tomcat公共配置
server:tomcat:relaxed-query-chars: '[,],{,},|'relaxed-path-chars: '[,],{,},|'

Apache ShenYu

官网文档

Apache ShenYu Github

国产高性能java网关–神禹shenyu

微服务网关Apache Shenyu

Apache ShenYu(incubating) 发布 2.4.3,异步高性能跨语言响应式 API 网关

docker 部署 shenyu

docker pull apache/shenyu-admin
docker network create shenyu
docker run --name sheny-admin -d -p 9095:9095 --net shenyu apache/shenyu-admindocker network create shenyu
docker pull apache/shenyu-bootstrap
docker run --name sheny-bootstrap -d -p 9195:9195 --net shenyu apache/shenyu-bootstrap

默认账户admin/123456

Higress

Higress是什么

fizz-gateway-community

fizz-gateway-community: 微服务API聚合网关

企业案例

阿里技术专家:“双11”亿级流量背后的API网关、微服务架构实践!

京东API网关实践之路

成本直降50%,下一代网关震撼发布

网关系统就该这么设计

前台流量网关

APISIX

百万级 QPS 业务新宠,Apache APISIX 打造网关实践新体验

API 网关选型及包含 BFF 的架构设计

APISIX 入门

API网关介绍

API网关(API Gateway)是一个服务器集群,对外的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,对外提供REST/HTTP的访问API。同时还具有其它非业务相关的职责,如身份验证、监控、负载均衡、缓存、流量控制等。

API管理

API网关核心功能是 API 管理。提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线等基础功能;提供测试,预发布,发布等多种环境;提供版本管理,版本回滚。

API配置包括 前端配置 和 后端配置 。前端配置指的是Http相关的配置,如HTTP 方法、URL路径,请求参数等。后端配置指的是微服务的相关配置,如服务名称、服务参数等。这样通过API配置,就完成了前端Http到后端微服务的转换。

全异步

由于API网关主要处理的是网络I/O,那么通过非阻塞I/O以及I/O多路复用,就可以达到使用少量线程承载海量并发处理,避免线程上下文切换,大大增加系统吞吐量,减少机器成本。

常用解决方案有 Tomcat/Jetty+NIO+servlet3.1 和 Netty+NIO,这里推荐Netty+NIO,能实现更高的吞吐量。Spring 5.0 推出的WebFlux反应式编程模型,特点是异步的、事件驱动的、非阻塞,内部就是基于Netty+NIO 或者 Servlet 3.1 Non-Blocking IO容器 实现的。

链式处理

链式处理即通过责任链模式,基于 Filter 链的方式提供了网关基本的功能,例如:路由、协议转换、缓存、限流、监控、日志。也可以根据实际的业务需要进行扩展,但注意不要做耗时操作。

Spring cloud gateway (基于 Spring WebFlux)的工作机制大体如下:

Gateway 接收客户端请求。
客户端请求与路由信息进行匹配,匹配成功的才能够被发往相应的下游服务。
请求经过 Filter 过滤器链,执行 pre 处理逻辑,如修改请求头信息等。
请求被转发至下游服务并返回响应。
响应经过 Filter 过滤器链,执行 post 处理逻辑。
向客户端响应应答。

请求限流

请求限流是在面对未知流量的情况下,防止系统被冲垮的最后一道有效的防线。可以针对集群、业务系统和具体API维度进行限流。

具体实现可以分为集群版和单机版,区别就是集群版是使用后端统一缓存如Redis存储数据,但有一定的性能损耗;单机版则在本机内存中进行存储(推荐)。

常用的限流算法:计数器、漏桶、令牌桶(推荐)

熔断降级
服务熔断

当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

熔断是为了解决服务雪崩,特别是在微服务体系下,通常在框架层面进行处理。内部机制采用的是断路器模式,其内部状态转换图如下:

服务降级

当负荷超出系统整体负载承受能力时,为了保证核心服务的可用,通常可以对非核心服务进行降级,如果返回缓存内容或者直接返回。

服务降级的粒度可以是API维度、功能维度、甚至是系统维度,但是都需要事前进行服务级别的梳理和定义。

真实场景下,通常是在服务器负载超出阈值报警之后,管理员决定是扩容还是降级。

业务隔离

API网关统一了非业务层面的处理,但如果有业务处理的逻辑,不同业务之间就可能会相互影响。要进行业务系统的隔离,通常可以采用线程池隔离和集群隔离,但对于Java而言,线程是比较重的资源,推荐使用集群隔离。

网关功能

1.用户鉴权和登陆校验,支持接口级别配置。
2.黑白名单,分全局和应用,以及 IP 维度,参数级别。
3.流量控制,支持自动和手动,自动是对超大流量自动拦截,通过令牌桶算法实现。
4.智能熔断,在 Histrix 的基础上做了改进,支持自动升降级,我们是全部自动的,也支持手动配置立即熔断,就是发现服务异常比例达到阀值,就自动触发熔断。
5.灰度发布,我对新启动的机器的流量支持类似 TCP 的慢启动机制,给机器一个预热的时间窗口。
6.统一降级,我们对所有转发失败的请求都会找统一降级的逻辑,只要业务方配了降级规则,都会降级,我们对降级规则是支持到参数级别的,包含请求头里的值,是非常细粒度的,另外我们还会和 varnish 打通,支持 varnish 的优雅降级。
7.流量调度,支持业务根据筛选规则,对流量筛选到对应的机器,也支持只让筛选的流量访问这台机器,这在查问题/新功能发布验证时非常用,可以先通过小部分流量验证再大面积发布上线。
8.流量 copy,我们支持对线上的原始请求根据规则 copy 一份,写入到 MQ 或者其他的 upstream,来做线上跨机房验证和压力测试。
9.请求日志采样,我们对所有的失败的请求都会采样落盘,提供业务方排查问题支持,也支持业务方根据规则进行个性化采样,我们采样了整个生命周期的数据,包含请求和响应相关的所有数据。

微服务 API 网关架构演进 Spring Cloud Gateway ShenYu APISIX相关推荐

  1. vivo亿级微服务 API 网关架构实践

    一.背景介绍 网关作为微服务生态中的重要一环,由于历史原因,中间件团队没有统一的微服务API网关,为此准备技术预研打造一个功能齐全.可用性高的业务网关. 二.技术选型 常见的开源网关按照语言分类有如下 ...

  2. vivo 微服务 API 网关架构实践

    一.背景介绍 网关作为微服务生态中的重要一环,由于历史原因,中间件团队没有统一的微服务API网关,为此准备技术预研打造一个功能齐全.可用性高的业务网关. 二.技术选型 常见的开源网关按照语言分类有如下 ...

  3. 微服务接入oauth2_微服务权限终极解决方案,Spring Cloud Gateway+Oauth2实现统一认证和鉴权!...

    最近发现了一个很好的微服务权限解决方案,可以通过认证服务进行统一认证,然后通过网关来统一校验认证和鉴权.此方案为目前最新方案,仅支持Spring Boot 2.2.0.Spring Cloud Hox ...

  4. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  5. 微服务为什么一定要选spring cloud?

    作者:董添 李秉谦 || 网易乐得技术团队 来自:http://tech.lede.com/ 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技术栈 ...

  6. 微服务为什么离不开spring cloud?

    转载自  微服务为什么离不开spring cloud? 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技术栈也是多种多样的,本系列文章主要介绍这些 ...

  7. 又肝了下微服务 API 网关“金刚”,也是蛮香的~

    " 摘要: 原创出处 http://www.iocoder.cn/Kong/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. 快速安装 3. Kong 控制台 4. ...

  8. 微服务浅述---架构演进

    微服务浅述---架构演进 提到架构演进,我们很容易想到'单体应用---分布式/SOA---微服务'的演进过程,那么为什么会有这个必然演进?演进的过程中遇到了哪些坑?是怎么解决这些坑的? 为什么会有这个 ...

  9. 使用微服务/ API网关(如Solo Gloo)公开在AWS EKS中运行的微服务

    因此,您决定在AWS中运行Kubernetes工作负载. 正如我们在设置AWS EKS 之前所看到的,需要很多耐心和头痛. 您也许可以使其正常运行. 对于其他用户,您应该从Weaveworks中 ek ...

最新文章

  1. numpy使用np.argmax函数获取一维数组中最大值所在的索引(index of largest value in numpy array with np.argmax)
  2. android4.0浏览器在eclipse中编译的步骤
  3. C++ Code_ImageList
  4. 如何使用eclipse打开已有工程
  5. docusign文档打不开_怎样查看 docusign pdf 电子签名
  6. RME二次开发之“修改矩形风管为圆形风管”即实现“天圆地方”连接。
  7. c语言 显示 图形界面,「分享」C语言如何编写图形界面
  8. [改善Java代码]若有必要,使用变长数组
  9. 第6章 上传视频业务流程开发 6.1
  10. 再谈初学者关心的ssh应用方方面面
  11. C/C++指针数组与数组指针彻底搞明白
  12. ASP.NET MVC实现网站验证码功能
  13. html5 在线留言,html5实现手机弹窗留言对话框
  14. 通往互联网架构师之路---全栈工程师
  15. easyboot的一个严重不足
  16. Non-UTF-8 code starting with ‘\xb5‘ in file D:\eclipse\Python\test\__init__.
  17. 一个神奇的分布式计算框架:jini
  18. CMD命令进入MySQL数据库的方法
  19. 有一个美女程序媛是一种什么样的体验,分享一下她所推荐的学习资料给你
  20. arduino动态刷新显示_360Hz刷新率加Fast IPS,这是电竞显示器的未来?不见得

热门文章

  1. [PTA] 7-5 输出倒三角图案
  2. Kotlin入门-万物皆对象,基础类型
  3. 用Pages打开word弹出警告
  4. 第6关:手机销售统计
  5. 黑马点评项目-达人探店
  6. 你的微信绑定了银行卡,要记得调整这2个设置,防止资金被盗刷
  7. 7034mysql意外停止_中国名创解决mysql数据库意外自动关闭(停止)的问题
  8. 朋友圈计算机代码,微信小程序仿朋友圈代码
  9. 我在iPhone上装了70亿参数大模型,来自陈天奇团队最新成果
  10. linux编译lapack,linux下Fortran编译Lapack、clapack库及使用的方法