Nginx和Gateway

一、nginx

1. 定义与概述

  • 定义
    nginx 是一个开源的高性能 HTTP 服务器、反向代理服务器和负载均衡器,同时也支持邮件代理(IMAP/POP3/SMTP)等功能。
  • 概述
    nginx 以其高并发、低内存消耗、优秀的稳定性著称,常用于静态资源服务、反向代理、负载均衡以及缓存加速等场景。

2. 使用背景

  • 高并发访问:在面对大量并发请求时,nginx 能够高效处理请求,保护后端应用服务器不被直接暴露。
  • 负载均衡:通过反向代理和负载均衡功能,将流量均匀分配到后端多个应用服务器,实现高可用和故障转移。
  • 静态资源服务:对于图片、JS、CSS 等静态资源,nginx 能够提供快速的响应和缓存能力。
  • 安全防护:作为边缘服务器,nginx 可以进行 HTTPS 终端、请求过滤、限流、防火墙等功能,有效保护内部服务。

3. 如何使用

  • 安装部署:可以通过源码编译、包管理器或者容器化方式部署 nginx。
  • 配置文件:通过编辑 nginx.conf 等配置文件,定义 server、location、upstream 等模块,配置反向代理、负载均衡、静态文件路径、缓存策略等。
  • 示例配置
    http {
        upstream backend {
            server app1.example.com;
            server app2.example.com;
        }
    
        server {
            listen       80;
            server_name  www.example.com;
    
            location / {
                proxy_pass http://backend;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
            }
    
            location /static/ {
                root /data/www;
                expires 30d;
            }
        }
    }
    

4. 解决的问题

  • 高并发处理与负载均衡:将大量请求均衡分配到后端服务上。
  • 静态资源加速:通过缓存和高效文件服务,加速静态内容的传输。
  • 安全隔离与反向代理:隐藏后端真实服务器,提供 HTTPS 终端、请求过滤和限流等安全防护。

二、Gateway(API 网关)

1. 定义与概述

  • 定义
    API Gateway 是位于客户端与微服务系统之间的统一入口,负责路由转发、请求聚合、认证授权、限流熔断、日志监控等功能。常见的实现包括 Spring Cloud Gateway、Zuul、Kong 等。
  • 概述
    在微服务架构中,由于服务众多且分布式部署,API Gateway 通过对外提供单一入口,可以屏蔽后端服务的复杂性,统一管理 API 接口和安全策略。

2. 使用背景

  • 微服务架构:系统由多个独立服务构成,每个服务可能有不同的部署地址和协议,通过 API 网关对外暴露统一的接口。
  • 安全与治理:统一进行认证授权、日志监控、限流、熔断、请求路由等,有利于后端服务解耦。
  • 请求聚合:对于前端页面需要从多个服务获取数据时,API 网关可以将多个后端请求合并成一个响应,降低客户端复杂度。

3. 如何使用

  • 部署方式:API Gateway 一般作为独立的服务运行,部署在网络边缘,接收所有外部请求。
  • 配置与路由:在配置文件中定义路由规则,将不同的请求路径映射到不同的后端服务;支持过滤器(Filter)实现请求预处理、日志记录、权限验证、限流熔断等。
  • 示例(Spring Cloud Gateway 配置)
    spring:
      cloud:
        gateway:
          routes:
            - id: user-service
              uri: lb://USER-SERVICE
              predicates:
                - Path=/user/**
              filters:
                - StripPrefix=1
            - id: order-service
              uri: lb://ORDER-SERVICE
              predicates:
                - Path=/order/**
              filters:
                - StripPrefix=1
    
  • 编程扩展:可以通过自定义过滤器和路由逻辑实现特定业务需求。

4. 解决的问题

  • 统一入口与路由转发:屏蔽后端服务的复杂性,对外提供统一的访问地址。
  • 安全管理:集中处理认证、授权、请求过滤等安全问题。
  • 服务治理:实现请求限流、熔断降级、日志监控、统计分析等,帮助管理分布式微服务系统。
  • 协议转换和请求聚合:支持不同协议的转换和多个请求的聚合处理,简化客户端操作。

三、共性与区别

1. 共性

  • 请求转发:二者都承担了请求转发的职责,将外部请求转交给内部的后端服务。
  • 性能优化:都通过一定的策略(如负载均衡、缓存、限流)来优化系统性能和可用性。
  • 安全隔离:均起到对内隐藏真实后端服务的作用,从而保护内部系统。

2. 区别

  • 职责范围
    • nginx:主要关注静态资源服务、反向代理、负载均衡和基本的安全防护;偏向于传输层和应用层较低级别的处理。
    • Gateway:主要针对微服务场景提供 API 管理、认证授权、请求聚合、限流熔断等更高层次的业务治理;更注重业务逻辑和服务治理。
  • 可编程性与扩展性
    • nginx 主要通过配置文件和有限的模块扩展来实现功能,编程灵活性较低。
    • API Gateway 通常提供更丰富的扩展机制(如过滤器、拦截器),方便定制化业务逻辑。
  • 应用场景
    • nginx 适用于大部分 Web 场景,如静态资源服务、简单代理和负载均衡。
    • API Gateway 更适用于微服务架构中,需要统一管理和治理大量分布式服务接口的场景。

四、nginx 与 Gateway 的配合使用

image.png

在实际生产环境中,两者可以协同工作,各自发挥优势:

  • 前端 nginx 反向代理
    在架构中,通常将 nginx 部署在网络边缘作为第一道防线,用于处理静态资源请求、SSL 终端、全局的反向代理和负载均衡,将请求分发到后端 API Gateway 或直接转发到静态服务器。
  • 后端 API Gateway
    API Gateway 部署在 nginx 后面,专注于微服务 API 的路由转发、权限认证、限流熔断等细粒度控制。nginx 将请求转发给 Gateway,由 Gateway 进一步解析并将请求路由到各个微服务。
  • 优势互补
    • nginx 负责外部流量的快速响应和初步过滤,减轻 API Gateway 的压力;
    • API Gateway 负责更复杂的业务逻辑处理和服务治理,提供细粒度的安全控制和监控。

配合示例

  1. nginx 配置:将所有 API 请求(例如以 /api/ 开头的请求)转发到 API Gateway 服务:
    server {
        listen 80;
        server_name api.example.com;
    
        location /api/ {
            proxy_pass http://gateway_service;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        location /static/ {
            root /data/www;
            expires 30d;
        }
    }
    
  2. API Gateway 配置:根据转发过来的请求路径进行路由转发:
    spring:
      cloud:
        gateway:
          routes:
            - id: user-service
              uri: lb://USER-SERVICE
              predicates:
                - Path=/api/user/**
            - id: order-service
              uri: lb://ORDER-SERVICE
              predicates:
                - Path=/api/order/**
    

总结

  • nginx 主要用于高性能的静态资源服务、反向代理和负载均衡,适用于网络边缘和基础传输层优化;
  • API Gateway 专注于微服务 API 的统一入口、路由转发、服务治理及安全控制,适用于业务层的细粒度管理。
  • 两者可以互补使用:nginx 作为外部请求的第一道防线,将请求转发给 API Gateway 进行进一步的业务处理和路由分发,从而构建一个高性能、安全且易于维护的分布式系统。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容