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

反向代理+网关部署架构

后端要做的事情:鉴权认证、限流/熔断、日志处理

反向代理+网关部署架构

缺点:需要同时维护反向代理和网关
优点:针对Api服务和网页服务的不同能够灵活处理

统一网关部署架构

缺点:不能够针对网页服务和API服务灵活处理,需要在统一网关层进行分别判断
优点:能避免跨域等问题

后端网关

后端网关(Backend Gateway)是分布式系统架构中的核心组件,主要负责 请求转发、协议转换、流量管控和安全防护,充当客户端与后端服务之间的智能中介。
后端网关(Backend Gateway)是分布式架构中的核心枢纽,主要负责 请求的智能调度、安全管控和系统治理。以下是它处理的具体任务和实际应用场景的深度解析:

一、核心处理任务

1. 流量调度与路由
  • 动态路由
    根据请求路径、Header或参数将请求分发到不同服务(如 /api/orders → 订单服务集群)。
  • 灰度发布
    通过流量染色(如 Header: version=canary)将部分用户请求导流到新版本服务。
  • 多环境路由
    将测试请求自动路由到测试环境(如 Header: env=beta)。

示例(Nginx配置):

location /api/users {proxy_pass http://user-service-v2;  # 指向用户服务v2集群
}
2. 安全防护
  • 统一鉴权
    验证JWT/OAuth2令牌,拦截未授权请求(如购物车接口必须携带有效Token)。
  • 防攻击
    封禁高频访问IP(防止CC攻击),过滤SQL注入/XSS恶意参数。
  • 数据脱敏
    对响应中的手机号、身份证等字段自动打码。

示例(Kong网关插件):

# 启用JWT插件
curl -X POST http://kong:8001/apis/{api}/plugins \-d "name=jwt"
3. 系统稳定性保障
  • 熔断降级
    当订单服务响应超时5秒,自动切换至兜底逻辑(如返回缓存数据)。
  • 限流控制
    限制秒杀接口每秒最多1000次请求(令牌桶算法)。
  • 负载均衡
    按服务器CPU使用率动态分配流量(替代传统的轮询策略)。

示例(Spring Cloud Gateway熔断配置):

filters:- name: CircuitBreakerargs:name: paymentServicefallbackUri: forward:/fallback/payment
4. 性能优化
  • 缓存加速
    缓存商品分类信息,降低数据库查询压力(TTL=10分钟)。
  • 数据聚合
    合并用户基本信息+积分详情,减少客户端请求次数(BFF模式)。
  • 协议转换
    将HTTP REST请求转换为内部gRPC调用,提升传输效率。

示例(GraphQL网关聚合):

# 一次请求获取用户订单+物流信息
query {user(id: "123") {orders {idtrackingInfo {status}}}
}
5. 可观测性
  • 日志采集
    记录请求耗时、状态码、调用链ID(关联ELK分析)。
  • 监控埋点
    统计API成功率,推送至Prometheus+Grafana仪表盘。
  • 实时告警
    当支付接口错误率>5%时触发企业微信告警。

二、实际业务场景

案例1:电商大促
  • 任务:保障核心链路(商品详情→购物车→支付)
  • 网关动作
    • 支付接口限流5000 QPS
    • 非核心接口(如评价服务)自动降级
    • 恶意爬虫请求拦截率>99%
案例2:金融系统
  • 任务:合规与风控
  • 网关动作
    • 敏感操作(转账)强制二次认证
    • 请求参数加密(SM4国密算法)
    • 操作日志审计留存6个月

三、技术实现对比

功能NginxSpring Cloud GatewayKong
路由灵活性中(需写Lua脚本)高(Java DSL配置)高(声明式配置)
协议支持HTTP/WebSocketHTTP/gRPCHTTP/gRPC/WebSocket
扩展性依赖插件开发集成Spring生态丰富插件市场
性能极高(C语言)高(Netty)高(Nginx基础)

http://www.dtcms.com/a/313226.html

相关文章:

  • Java学习第一百零二部分——API网关
  • Claude Code入门学习笔记(五)--Claude Code命令行输入
  • 大白话讲解MCP
  • 多种单文件版分析型数据库调用底层函数对比
  • [Oracle] TO_DATE()函数
  • cs285 lecture13
  • 手机端使用表格填写表单问题
  • 复现YOLOV5+训练指定数据集
  • STM32-ESP8266通过MQTT与阿里云通讯
  • MySQL连接算法和小表驱动大表的原理
  • 李宏毅深度学习教程 第8-9章 生成模型+扩散模型
  • 【Django】-7- 实现注册功能
  • 09.Redis 常用命令
  • Android 之 蓝牙通信(2.0 经典)
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-58,(知识点:硬件产品的功率优化)
  • C++中多线程和互斥锁的基本使用
  • 【RH124 问答题】第 8 章 监控和管理 Linux 进程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现实时食物水果的检测识别(C#代码UI界面版)
  • 使用 Spring Initializr 生成项目结构:Java 开发效率提升指南
  • 【QT】常⽤控件详解(二)windowOpacitycursorfontsetToolTipfocusPolicystyleSheet
  • 大语言模型涉及的一些概念(持续更新)
  • VisualStudio的一些开发经验
  • 思二勋:数字资产化与资产数权化是RWA运作的核心逻辑
  • AtCoder Beginner Contest 417
  • MySQL事务与存储引擎的学习(一)
  • Docker国内镜像列表
  • Effective C++ 条款19: 设计class犹如设计type
  • Python从入门到精通计划Day02: Python语法探秘:当现代艺术遇到古典音乐
  • 最小半径覆盖问题【C++解法+二分+扫描线】
  • 【CF】Day118——杂题 (随机哈希 / 思维 | 贪心 / DP | 位运算构造 | 状态压缩 + 建图 + 最短路 | 构造 | 贪心)