当前位置: 首页 > news >正文

【架构师】零基础到精通——网关策略

博客昵称:架构师Cool
最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。
作者简介:一名退役Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟!
博主小留言:哈喽!各位CSDN的uu们,我是你的小弟Cool,希望我的文章可以给您带来一定的帮助
个人百万笔记知识库, 所有基础的笔记都在这里面啦,点击左边蓝字即可获取!助力每一位未来架构师!
欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

网关策略

    • 1、流量治理
      • 1-1、API鉴权
      • 1-2、集群隔离
      • 1-3、请求隔离
      • 1-4、灰度发布
    • 2、监控告警
      • 2-1、立体化监控
      • 2-2、多维度告警
    • 3、关键设计
      • 3-1、异步外调
      • 3-2、外调链接池化
      • 3-3、释放连接
      • 3-4、对象池化设计
      • 3-5、上下文切换
      • 3-6、监控告警
    • 4、解决方案
      • 4-1、Shepherd API网关
      • 4-2、Mashape Kong
      • 4-3、Soul
      • 4-4、Apiman
      • 4-5、Gravitee
      • 4-6、Tyk
      • 4-7、Traefik
      • 4-8、小豹API网关

1、流量治理

1-1、API鉴权

请求安全是API网关非常重要的能力,集成了丰富的安全相关的系统组件,包括有基础的请求签名、SSO单点登录、基于SSO鉴权的UAC/UPM访问控制、用户鉴权Passport、商家鉴权EPassport、商家权益鉴权、反爬等等。业务研发人员只需要简单配置,即可使用。

1-2、集群隔离

API网关按业务线维度进行集群隔离,也支持重要业务独立部署。如下图所示:

1-3、请求隔离

服务节点维度,API网关支持请求的快慢线程池隔离。快慢线程池隔离主要用于一些使用了同步阻塞组件的API,例如SSO鉴权、自定义鉴权等,可能导致长时间阻塞共享业务线程池。快慢隔离的原理是统计API请求的处理时间,将请求处理耗时较长,超过容忍阈值的API请求隔离到慢线程池,避免影响其他正常API的调用。除此之外,也支持业务研发人员配置自定义线程池进行隔离。具体的线程隔离模型如下图所示:

在这里插入图片描述

1-4、灰度发布

API网关作为请求入口,往往肩负着请求流量灰度验证的重任。

灰度场景

在灰度能力上,支持灰度API自身逻辑,也支持灰度下游服务,也可以同时灰度API自身逻辑和下游服务。如下图所示:

在这里插入图片描述

灰度API自身逻辑时,通过将流量分流到不同的API版本实现灰度能力;灰度下游服务时,通过给流量打标,分流到指定的下游灰度单元中。

灰度策略

支持丰富的灰度策略,可以按照比例数灰度,也可以按照特定条件灰度。

2、监控告警

2-1、立体化监控

API网关提供360度的立体化监控,从业务指标、机器指标、JVM指标提供7x24小时的专业守护,如下表:

监控模块主要功能
1统一监控Raptor实时上报请求调用信息、系统指标,负责应用层(JVM)监控、系统层(CPU、IO、网络)监控
2链路追踪Mtrace负责全链路参数透传、全链路追踪监控
3日志监控Logscan监控本地日志异常关键字:如5xx状态码、空指针异常等
4远程日志中心API请求日志、Debug日志、组件日志等可上报远程日志中心
5健康检查Scanner对网关节点进行心跳检测和API状态检测,及时发现异常节点和异常API

2-2、多维度告警

有了全面的监控体系,自然少不了配套的告警机制,主要的告警能力包括:

告警类型触发时机
1限流告警API请求达到限流规则阈值触发限流告警
2请求失败告警鉴权失败、请求超时、后端服务异常等触发请求失败告警
3组件异常告警自定义组件处理耗时长、失败率高告警
4API异常告警API发布失败、API检查异常时触发API异常告警
5健康检查失败告警API心跳检查失败、网关节点不通时触发健康检查失败告警

3、关键设计

3-1、异步外调

在这里插入图片描述

基于Netty实现异步外调主要有两种方式可以实现:

  • 方式一:建立全局Map,上线文传递(不参与远程传输)requestId,响应时使用requestId进行映射上游信息
  • 方式二:直接将上游信息包装成Context进行上线文传递(不参与远程传输)

方式一需要独立维护一个全局映射表,同时需要考虑请求超时和丢失的情况,否则会出现内存不断增长问题。

3-2、外调链接池化

在这里插入图片描述

使用Netty实现API网关外调微服务时,因建立连接需要极度消耗资源,所以需要考虑将外调的链接进行池化管理,设计时需要注意以下几点:

  • 初始化适当连接(过多过少都不适合)
  • 考虑连接能随流量增减而进行自动扩缩容
  • 取出的连接需要检查是否可用
  • 连接需要考虑双向心跳探测

3-3、释放连接

http的链接是独占的,所以在释放的时候要特别小心,一定要等服务端响应完了才能释放,还有就是链接关闭的处理也要小心,总结如下几点:

  • Connection:close

  • 空闲超时,关闭链接

  • 读超时关闭链接

  • 写超时,关闭链接

  • Fin,Reset

  • 写超时:writeAndFlush包含Netty的encode时间和从队列里把请求发出去即flush的时间。因此后端超时开始需要在真正flush成功后开始计时,这样才最接近服务端超时时间(还有网络往返时间和内核协议栈处理时间)

3-4、对象池化设计

针对高并发系统,频繁创建对象不仅有分配内存开销,还对gc会造成压力。因此在实现时,会对频繁使用的对象(如线程池的任务task,StringBuffer等)进行重写,减少频繁的申请内存的开销。

3-5、上下文切换

在这里插入图片描述

整个网关没有涉及到IO操作,但在IO编解码和业务逻辑都用了异步,是有两个原因

  • 防止开发写的代码有阻塞
  • 业务逻辑打日志可能会比较多

在突发的情况下,但是我们在push线程时,支持用Netty的IO线程替代,这里做的工作比较少,这里由异步修改为同步后(通过修改配置调整),CPU的上下文切换减少20%,进而提高了整体的吞吐量,就是不能为了异步而异步,Zuul2的设计类似。

3-6、监控告警

协议层

  • 攻击性请求。只发头,不发/发部分body,采样落盘,还原现场,并报警
  • Line or Head or Body过大的请求。采样落盘,还原现场,并报警

应用层

  • 耗时监控。有慢请求,超时请求,以及tp99,tp999等
  • QPS监控和报警
  • 带宽监控和报警。支持对请求和响应的行、头、body单独监控
  • 响应码监控。特别是400和404
  • 链接监控。对接入端的链接,以及和后端服务的链接,后端服务链接上待发送字节大小也都做了监控
  • 失败请求监控
  • 流量抖动报警。流量抖动要么是出了问题,要么就是出问题的前兆

4、解决方案

在这里插入图片描述

4-1、Shepherd API网关

在这里插入图片描述

4-2、Mashape Kong

访问地址:https://github.com/Kong/kong

在这里插入图片描述

4-3、Soul

访问地址:https://github.com/Dromara/soul

在这里插入图片描述

4-4、Apiman

访问地址:https://apiman.gitbooks.io/apiman-user-guide/user-guide/gateway/policies.html

在这里插入图片描述

4-5、Gravitee

访问地址:https://docs.gravitee.io/apim_policies_latency.html

在这里插入图片描述

4-6、Tyk

访问地址:https://tyk.io/docs

4-7、Traefik

访问地址:https://traefik.cn

Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

在这里插入图片描述

功能特性

  • 它非常快
  • 无需安装其他依赖,通过Go语言编写的单一可执行文件
  • 支持 Rest API
  • 多种后台支持:Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, 并且还会更多
  • 后台监控, 可以监听后台变化进而自动化应用新的配置文件设置
  • 配置文件热更新。无需重启进程
  • 正常结束http连接
  • 后端断路器
  • 轮询,rebalancer 负载均衡
  • Rest Metrics
  • 支持最小化官方docker 镜像
  • 后台支持SSL
  • 前台支持SSL(包括SNI)
  • 清爽的AngularJS前端页面
  • 支持Websocket
  • 支持HTTP/2
  • 网络错误重试
  • 支持Let’s Encrypt (自动更新HTTPS证书)
  • 高可用集群模式

4-8、小豹API网关

访问地址:http://www.xbgateway.com

小豹API网关(企业级API网关),统一解决:认证、鉴权、安全、流量管控、缓存、服务路由,协议转换、服务编排、熔断、灰度发布、监控报警等。

在这里插入图片描述

相关文章:

【架构师】零基础到精通——网关策略

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名退役Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小…...

【java 8】方法引用与构造器引用

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…...

SGI 空间配置器

前言 空间配置器是 STL 六大组件之一,它总是隐藏在容器的背后,默默工作,默默付出。本文为《STL 源码剖析》读书笔记,主要讨论 SGI 版本空间的配置和释放,对代码进行解读时会改变一些写法,使其更易于阅读。…...

2023年白酒行业研究报告

第一章 行业概况 白酒是中国传统的酿酒业之一,历史悠久,源远流长。白酒指以高粱等粮谷为主要原料,以大曲、小曲或麸曲及酒母等为糖化发酵剂,经蒸煮、糖化、发酵、蒸馏、陈酿、勾兑而制成的,酒精度(体积分数)在18%-68%…...

华为OD机试 -合规数组(Java) | 机试题+算法思路+考点+代码解析 【2023】

合规数组 题目 给定一个正整数数组 检查数组中是否存在满足规则的数组组合 规则: A = B + 2C 输入 第一行输出数组的元素个数 接下来一行输出所有数组元素,用空格隔开 输出 如果存在满足要求的数 在同一行里依次输出规则里A B C的取值,用空格隔开 如果不存在输出0 示…...

华为OD机试真题Python实现【英文输入法】真题+解题思路+代码(20222023)

英文输入法 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。注意 英文单词联想时区分大小写缩略形式如"don’t&quo…...

改进YOLO系列 | 添加轻量化Decouple_Head 和 ASFF_Head

绿色为ASFF_Head,浅蓝色Decoupled_Head,深蓝色是第三步加的_initialize_dh_biases方法后的效果。 参数量与计算量对比 模型参数量 parameters计算量GFLOPsyolov5s_Head723538916.5ASFF_Head1267484725.0Decoupled_Head892869722.0结构图 本篇介绍的这个Decouple_Head和YOLOX…...

LLFlow沦为和代码解读

LLFlow沦为和代码解读 1.测试时代码的运行位置 sr:什么意思 sr 和 z 这里又将模型设置为了训练模式 所以下面这部分代码应该是测试时运行的所有代码 这个就是测试时使用的网络模型框架 下面应该就是self.netG的网络模型框架 但是这个z的网络模型框架代码还不…...

C语言学习及复习笔记-【9】数组

目录9. 数组9.1 数组的定义9.2 数组与指针的区别9.3 数组大小计算9.4 数组的赋值9.5多维数组寻址方式9.6 函数数组9. 数组 9.1 数组的定义 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往…...

Kubernetes入门教程 --- 使用kubeadm进行集群安装

Kubernetes入门教程 --- 使用kubeadm和二进制安装1. Introduction1.1 架构图1.2 关键字介绍1.3 简述2. 使用Kubeadm Install2.1 申请三个虚拟环境2.2 准备安装环境2.3 配置yum源2.4 安装Docker2.5 时间同步2.6 安装组件2.7 部署集群2.8 Master安装网络插卡3. 查询状态3.1 查询n…...

华为OD机试真题Python实现【相对开音节】真题+解题思路+代码(20222023)

相对开音节 题目 相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外) 常见的单词有bike cake 给定一个字符串,以空格为分隔符 反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数 (连续子串中部分字符可以重复) …...

海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路

1. 前言 sensor输出格式: YUV422 8bit 硬件连接: MIPI_YUV相机(4lane MIPI) -> SS928V100 MIPI0(4lane) 框图: 2. 几个问题 基于SS928 SDK中的 vio sample修改; 但是sample里面都是基于RAW RGB sensor开发的sample, 没有现成的MIPI_YUV sensor的参考,需要自己…...

javaee之node.js与es6

问题1:在IDEA控制台为什么node显示不会出来命令 修改完之后记得重新启动电脑 问题2:response.end()作用 在Web开发中,浏览器端的请求到达服务器进行处理的时候,Response.End的作用就是让request执行到此结束,输出到客户…...

11 nacos源码开篇

nacos核心功能点: 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存…...

13.Jenkins集成sonarqube

Jenkins集成sonarqube1.jenkins集成sonarqube2.jenkins以maven的方式集成sonarqube scanner报错1报错21.jenkins集成sonarqube 1.在jenkins插件管理中安装sonarqube scanner 2.jenkins要知道sonarqube服务端是谁,需要配置(系统管理–系统配置–sonarq…...

JavaWeb13-线程休眠和指定唤醒:LockSupport

目录 1.LockSupport.park():休眠当前线程 2.LockSupport.unpark(线程对象):唤醒某一个指定的线程 3.扩展:LockSupport.parkUntil(long)等待最大时间是一个固定时间 4.LockSupport和Interrupt 5.LockSupport VS wait 相同点:…...

【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】

第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性) 1.Spring是什么? ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring:Spring技术栈,Spring不再…...

前端react面试题(边面边更)

展示组件(Presentational component)和容器组件(Container component)之间有何不同 展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是…...

产品3C认证在哪里办理

​一、什么是CCC认证 3C认证的全称为“中国强制性产品认证”,英文名称China Compulsory Certification,英文缩写CCC。它是中国政府为保护消费者人身安全和国家安全、加强产品质量管理、依照法律法规实施的一种产品合格评定制度。年12月,国家…...

UA-DETRAC数据集转YOLO格式

一: 数据集下载 原官方数据集 链接:https://pan.baidu.com/s/1P_CeSIpJIYSA1dykmFhgYw 提取码: 7f4g 处理完成数据集(每10帧取一张) 链接:后续添加 提取码:后续添加 二: 处理标…...

2026 Java AI框架选型:Spring AI/LangChain4j企业级对比

文章目录引子:Java程序员的"AI焦虑"一、血统与基因:两个截然不同的"家族遗传"1.1 Spring AI:Spring生态的"嫡长子"1.2 LangChain4j:Java AI界的"瑞士军刀"二、代码实战:同样的…...

Windows下OpenClaw安装详解:对接Kimi-VL-A3B-Thinking图文模型

Windows下OpenClaw安装详解:对接Kimi-VL-A3B-Thinking图文模型 1. 为什么选择OpenClaw与Kimi-VL-A3B-Thinking组合 去年我在处理大量图文资料归档时,发现手动整理效率极低。直到尝试将OpenClaw与Kimi-VL-A3B-Thinking模型对接后,才真正实现…...

臭氧污染成因难辨?EKMA曲线+OZIPR模型实战,手把手教你锁定O₃关键前体物!

在大气臭氧(O₃)污染已成为制约我国环境空气质量改善的核心瓶颈的当下,精准识别O₃生成的关键前体物(NOₓ与VOCs),是制定科学减排策略、破解“臭氧污染成因复杂、控制因子难辨”困境的核心前提。EKMA曲线作…...

OpenClaw对话式编程:Qwen3-14B辅助代码生成与调试

OpenClaw对话式编程:Qwen3-14B辅助代码生成与调试 1. 为什么需要对话式编程助手 作为一个长期与代码打交道的开发者,我经历过太多深夜调试的煎熬时刻——盯着报错信息反复修改却始终无法通过测试,或是为了一个简单的功能翻遍Stack Overflow…...

文件自动同步软件哪个好?企业级高效安全同步方案测评

文件自动同步软件对于许多中大型企业来说,是不可或缺的底层基础设施。不管是内部的多个服务器系统之间,跨部门团队之间,还是和外部的供应链伙伴、总部分支机构之间,都需要依赖文件自动同步软件来实现安全、自动化的文件传输与数据…...

VR摩托车|沉浸式交通安全教育的新方向

在交通安全教育不断创新的今天,如何让参与者真正理解风险、形成安全意识,成为教育场景中的关键问题。传统的宣讲与视频观看虽然信息完整,却常因缺乏代入感而难以真正触动体验者。而“VR摩托车”作为一款结合虚拟现实技术、实景交互系统和交通…...

MJh代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线

在当今数字化时代,保护.NET应用程序的源代码安全变得尤为重要。你是否担心自己的知识产权被轻易窃取?是否希望防止竞争对手通过反编译分析你的核心业务逻辑?今天,我将为你详细介绍一款强大的开源混淆工具——Obfuscar,…...

Notepad--:中文开发者的跨平台文本编辑解决方案

Notepad--:中文开发者的跨平台文本编辑解决方案 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 核心价值&a…...

2026出海企业培训10大常见痛点问题:预算、效果、选型关注点

随着“一带一路”倡议深化与全球化竞争加剧,中国企业出海步伐持续加速。截至2025年底,中国在境外设立企业超过5万家,遍布190个国家和地区。对外投资存量连续9年保持世界前三,2025年对外直接投资1743.8亿美元,比上年增长…...

【人生底稿】07:2017-2018:从Java后端到全栈,我如何用一年时间为北漂埋下伏笔

2017-2018,从纯Java后端到全栈开发,自学AngularJS、安卓,完成监控运维平台升级;2018年6月,跟着领导辞职北漂创业。14年老码农亲述:所有的沉淀,都是为了更好的出发。 一、开篇:2017&a…...