高可用高并发微服务架构设计:Nginx 与 API Gateway 的协同实践

作者:古渡蓝按

技术栈:Nginx 与 API Gateway

个人微信公众号:微信公众号(深入浅出谈java)

感觉本篇对你有帮助可以关注一下,会不定期更新知识和面试资料、技巧!!!

一、Nginx 和 Gateway 的关系:是替代还是协作?

不是替代关系,而是协作关系。

1. Nginx 的角色(通常在最外层)

  • 反向代理 & 负载均衡:将前端请求分发到多个后端服务或网关实例。
  • 静态资源服务:部署前端(如 Vue/React 打包后的静态文件)。
  • SSL 终止:处理 HTTPS,减轻后端压力。
  • 安全防护:如防 DDOS、限流、WAF(配合模块)。
  • 高可用入口:作为整个系统的统一入口。

2. API Gateway 的角色(在微服务层前面)

  • 服务路由:根据路径将请求转发到具体的微服务(如 /user/** → user-service)。
  • 认证鉴权:统一处理 JWT、OAuth2 等。
  • 限流熔断:防止某个服务被压垮。
  • 日志监控:统一记录请求日志、链路追踪。
  • 协议转换:如 REST → gRPC。

二、典型架构图(高可用 + 高并发)

用户 → DNS → [Nginx LB (HA)] → [API Gateway 集群] → [微服务集群]
↑ ↑
(静态资源) (动态路由/鉴权/限流)

组件说明:

  1. Nginx 集群(主备或双活):

    • 使用 Keepalived + VIP 实现高可用。
    • 多台 Nginx 前置负载均衡(可再加 LVS/F5 或云 SLB)。
  2. API Gateway 集群:
    • 多实例部署,注册到 Nginx 或服务发现(如 Nacos/Eureka)。
    • 支持横向扩展,应对高并发。
  3. 微服务集群:
    • 每个服务多实例部署,通过注册中心发现。

三、配置示例

1. Nginx 配置(反向代理到 Gateway)

# nginx.conf 或 conf.d/gateway.conf

upstream gateway_backend {
server 192.168.1.10:8080 weight=5; # Gateway 实例1
server 192.168.1.11:8080 weight=5; # Gateway 实例2
# 可配置健康检查
keepalive 32;
} server {
listen 80;
server_name api.yourdomain.com; # 静态资源(前端)
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
} # 动态请求代理到网关
location /api/ {
proxy_pass http://gateway_backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
} # WebSocket 支持
location /ws/ {
proxy_pass http://gateway_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

2. Spring Cloud Gateway 配置(application.yml)

spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service # 从注册中心负载均衡
predicates:
- Path=/api/user/**
filters:
- StripPrefix=2 # 去掉 /api/user 前缀 - id: order-service
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- StripPrefix=2 # 全局限流(Redis + Token Bucket)
redis-rate-limiter:
replenishRate: 10 # 每秒补充10个令牌
burstCapacity: 20 # 桶容量20 # 服务发现(如 Nacos)
nacos:
discovery:
server-addr: 192.168.1.100:8848

四、如何实现高可用 & 高并发?

目标 实现方式
高可用 - Nginx 主备(Keepalived)
- Gateway 多实例 + 健康检查
- 微服务多副本 + 熔断降级(Hystrix/Sentinel)
- 数据库主从/集群
高并发 - Nginx 负载均衡 + 缓存静态资源
- Gateway 异步非阻塞(Netty)
- Redis 缓存热点数据
- 消息队列削峰(Kafka/RabbitMQ)
- 水平扩展 Gateway 和微服务
安全 - Nginx WAF(如 ModSecurity)
- Gateway 统一鉴权
- HTTPS + JWT
可观测性 - Gateway 集成 Prometheus + Grafana
- 日志收集(ELK)
- 链路追踪(SkyWalking/Zipkin)

五、常见误区

只用 Nginx 不用 Gateway

→ 适合简单系统,但微服务多了难以维护路由和鉴权。

只用 Gateway 不用 Nginx

→ Gateway 也能做负载均衡,但 Nginx 更成熟,适合做最外层防护和静态资源服务。

推荐:Nginx + Gateway 协同工作

  • Nginx 做“门卫”和“前台”
  • Gateway 做“调度中心”和“安全审计”

六、进阶建议

  1. 使用云原生方案:如 Kubernetes + Ingress (Nginx Ingress Controller) + Istio/Envoy Gateway。
  2. 自动化部署:配合 CI/CD 工具(Jenkins/GitLab CI)自动发布 Gateway 配置。
  3. 灰度发布:在 Gateway 层实现基于 Header 的流量切分。
  4. 性能压测:使用 JMeter 或 wrk 测试 Nginx + Gateway 的吞吐能力。

总结

  • 前端用 Nginx 部署静态资源
  • 后端用 API Gateway 做统一入口、路由、鉴权
  • Nginx 反向代理到 Gateway 集群,实现高可用
  • 通过负载均衡、缓存、异步、集群化实现高并发

高可用高并发微服务架构设计:Nginx 与 API Gateway 的协同实践的更多相关文章

  1. Java高并发高性能分布式框架从无到有微服务架构设计

    微服务架构模式(Microservice Architect Pattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成 ...

  2. 转://Oracle 高可用技术与云基础架构

    众所周知Oracle云基础架构已经在越来越多的行业里应用.大家了解云基础架构是如何演进的嘛?可能有人会说Oracle高可用技术是组成云架构的基础,那它们的关系是怎么样的?大家又了解Oracle高可用技 ...

  3. (转)mysql数据库高可用高扩展性架构方案实施

    http://shanhu.blog.51cto.com/1293405/1212605-----mysql数据库高可用高扩展性架构方案实施

  4. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  5. 人人都可以开发高可用高伸缩应用——论Azure Service Fabric的意义

    今天推荐的文章其实是微软的一篇官方公告,宣布其即将发布的一个支撑高可用高伸缩云服务的框架--Azure Service Fabric. 前两天,微软Azure平台的CTO Mark Russinovi ...

  6. (转)微服务架构 互联网保险O2O平台微服务架构设计

    http://www.cnblogs.com/Leo_wl/p/5049722.html 微服务架构 互联网保险O2O平台微服务架构设计 关于架构,笔者认为并不是越复杂越好,而是相反,简单就是硬道理也 ...

  7. PHP开发 高可用 高安全App后端(免费)

    PHP开发高可用高安全App后端 第1章 本章先讲解课程所含技术点,并演示相关的项目,让小伙伴对课程有个初步的认知,然后再带领小伙伴进行功能的分析,表的ER总关系图 第2章 本章主要讲解课程的一些准备 ...

  8. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  9. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  10. PHP开发高可用高安全App后端☆

    第1章 本章先讲解课程所含技术点,并演示相关的项目,让小伙伴对课程有个初步的认知,然后再带领小伙伴进行功能的分析,表的ER总关系图 第2章本章主要讲解课程的一些准备工作知识.包括工具.环境.模板等. ...

随机推荐

  1. 如何使用MCP开发一个客户端和服务端

    如何使用MCP开发一个客户端和服务端 一.MCP和API以及Function Call核心概念对比 特性 API Function Call MCP (Model Context Protocol) ...

  2. 【中英】【吴恩达课后测验】Course 4 -卷积神经网络 - 第四周测验

    [中英][吴恩达课后测验]Course 4 -卷积神经网络 - 第四周测验 - 特殊应用:人脸识别和神经风格转换 上一篇:[课程4 - 第三周编程作业]※※※※※ [回到目录]※※※※※下一篇:[待撰 ...

  3. springboot实现连接多个数据源

    dynamic datasource 导入依赖 <dependency> <groupId>com.baomidou</groupId> <artifactI ...

  4. STM32学会要花费多长时间?一个从机械转行老程序员的血泪史

    看到这个问题,我不禁想起了6年前那个拿着机械毕业证却被分配到电子部门的懵逼青年--没错,就是我. 当时坐在工位上,面对着桌上那块STM32F103的开发板,内心是崩溃的.我特么学了四年机械,研究生又搞 ...

  5. ET框架服务端部署到Linux

    运行环境:Centos7.3 + JetBrains Rider 2020 + ET 5.0 + Mac笔记本 (这里要说一下低于Centos7的没法安装.net core环境) 服务器和资源服务部署 ...

  6. Sql server 查看那个表占用的空间最多

    要查看 SQL Server 中哪个表占用的空间最多,您可以使用以下查询来列出所有表及其占用的空间大小,并按照占用空间从大到小进行排序: SELECT t.NAME AS TableName, p.r ...

  7. vite V3.0.0 vite.config.ts 引入插件vite-plugin-vue-setup-extend-plus报错(vueSetupExtend不是一个函数)

    vite V3.0.0 vite.config.ts 引入插件报错(***** 不是函数) ·问题 #9414 ·Vitejs/Vite (github.com) 我的错误提示如下 ERROR fai ...

  8. layui 关于table 导入方法

    <!--导入数据操作层--><div class="layui-form-item">    <div class="layui-form- ...

  9. nginx二级域名代理

    二级域名带ssl证书代理 在nginx配置文件,增加代理配置服务 server { listen 443 ssl; #SSL协议访问端口号为443.此处如未添加ssl,可能会造成Nginx无法启动. ...

  10. C++ 元编程 学习二

    简介 C++ 元编程 学习之二 参考资料 C++ 模板元编程实战 code #include <iostream> // 编译器分支与多种返回类型 写法1 template <boo ...