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

反向代理+网关部署架构

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

反向代理+网关部署架构

缺点:需要同时维护反向代理和网关
优点:针对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.xdnf.cn/news/16899.html

相关文章:

  • Flask ORM 模型(轻松版)
  • 如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?
  • Unity_数据持久化_IXmlSerializable接口
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘scikit-learn’问题
  • ESP32学习-I2C(IIC)通信详解与实践
  • Azure DevOps — Kubernetes 上的自托管代理 — 第3部分
  • GB 44496-2024《汽车软件升级通用技术要求》对行业从业者的变革性影响
  • 13-day10生成式任务
  • 从Docker衔接到导入黑马商城以及前端登录显示用户或密码错误的相关总结(个人理解,仅供参考)
  • 【AI编程工具IDE/CLI/插件专栏】-国外IDE与Cursor能力对比
  • 【openlayers框架学习】九:openlayers中的交互类(select和draw)
  • 【LLM】 BaseModel的作用
  • MySQL面试题及详细答案 155道(021-040)
  • Spring Cloud微服务中的内存泄漏问题定位与解决方案
  • SelectDB数据库,新一代实时数据仓库的全面解析与应用
  • Linux 环境下 Docker 安装与简单使用指南
  • 百度招黑产溯源安全工程师
  • 《软件测试与质量控制》实验报告二 单元测试
  • MSQL-聚簇索引与非聚簇索引的比较
  • Python编程基础与实践:Python文件处理入门
  • SpringBoot 信用卡检测、OpenAI gym、OCR结合、DICOM图形处理、知识图谱、农业害虫识别实战
  • 【7.5 Unity AssetPostprocessor】
  • 【自动化运维神器Ansible】YAML支持的数据类型详解:构建高效Playbook的基石
  • linux ext4缩容home,扩容根目录
  • Trae + Notion MCP:将你的Notion数据库升级为智能对话机器人
  • 元宇宙重构未来交通新图景
  • 无人机光伏巡检漏检率↓78%!陌讯多模态融合算法实战解析
  • 机试备考笔记 2/31
  • Agentic RAG:自主检索增强生成的范式演进与技术突破
  • 深入 Go 底层原理(二):Channel 的实现剖析