微服务网关详解(定义作用及种类使用)

微服务网关详解(定义作用及种类使用)-mikechen

微服务网关定义

微服务网关是在微服务架构中常用的组件,用于提供统一的入口和访问点,对外暴露服务并处理相关的请求。

 

微服务网关作用

微服务网关在微服务架构中扮演着重要的角色,具有以下几个主要作用:

微服务网关详解(定义作用及种类使用)-mikechen

1.统一入口

微服务网关为整个微服务架构提供了统一的入口和访问点。客户端只需与网关进行通信,无需直接调用后端的多个微服务,简化了客户端的调用方式。

 

2.路由和负载均衡

微服务网关可以根据路由规则将请求分发到相应的微服务实例,通过配置路由规则,可以根据请求的路径、参数、标头等信息来决定请求应该转发到哪个微服务。

同时,网关还可以实现负载均衡,将请求均匀地分发到多个后端微服务实例上,提高系统的性能和可伸缩性。

 

3.安全认证和授权

微服务网关可以集中处理安全认证和授权的逻辑,它可以对请求进行身份验证、访问控制和权限校验,确保只有经过授权的请求能够访问后端的微服务,提供统一的安全策略。

 

4.日志和监控

微服务网关可以记录请求和响应的日志,并提供监控和分析功能,这样可以追踪和监控系统的运行情况,帮助进行故障排查和性能优化。

 

微服务网关有哪些

在微服务架构中,有多种可供选择的微服务网关。以下是一些常用的微服务网关:

1.Zuul网关

ZuulSpring Cloud中的微服务网关,是Spring Cloud组件之一,用于提供动态路由、请求过滤和负载均衡等功能。

微服务网关详解(定义作用及种类使用)-mikechen

Zuul网关具有路由、负载均衡、安全认证等功能,它可以与Eureka等服务注册中心集成,并支持多种过滤器,用于实现请求处理和转换。

 

2.Spring Cloud Gateway

Spring Cloud Gateway是一个基于SpringSpring Boot构建的轻量级网关服务,用于构建微服务架构中的API网关。

Spring Cloud提供的微服务网关,它支持动态路由、断路器、限流、请求转换等功能,并可以与Spring Cloud服务注册中心集成。

Spring Cloud Gateway网关原理,如下图所示:

微服务网关详解(定义作用及种类使用)-mikechen

Spring Cloud Gateway的执行流程如下:

  1. 客户端发送请求: 客户端向Spring Cloud Gateway发送HTTP请求。
  2. 路由匹配: Gateway根据配置的路由规则,对请求进行路由匹配。
  3. 过滤器执行: 根据路由规则匹配成功后,请求将通过一系列的过滤器链进行处理。
  4. 调用目标服务: 经过过滤器链的处理后,Gateway将请求转发给目标服务。
  5. 目标服务处理: 目标服务接收到请求后,进行相应的业务处理,并生成响应结果。
  6. 响应返回: 目标服务将处理完成的响应结果返回给Gateway。
  7. 过滤器链反向执行: Gateway接收到目标服务的响应结果后,通过过滤器链对响应进行处理和修改。
  8. 返回响应给客户端: 经过过滤器链的处理后,Gateway将最终的响应结果返回给客户端。

 

3.Envoy

由CNCF(Cloud Native Computing Foundation)维护的开源微服务网关。Envoy具有高性能的代理和负载均衡功能,支持动态路由、服务发现、TLS加密等特性。

 

4.Kong

一个功能强大的开源API网关和微服务网关。Kong提供了路由、认证、授权、限流、日志等功能,并支持扩展插件和高可用部署。

 

5.Traefik

一个现代化的开源反向代理和负载均衡器,也可用作微服务网关。Traefik支持自动化配置和动态路由,可以与多种后端服务集成,并提供HTTPS支持和自动证书管理。

 

6.Tyk

一个开源API网关和微服务网关,提供了强大的访问控制、认证、限流、监控等功能。Tyk支持插件扩展和多种部署模式。

 

微服务网关使用

以下是一个简单的微服务网关使用示例,以Spring Cloud Gateway为例。

1.添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

 

2.创建网关配置文件

创建一个application.yml(或application.properties)文件,并配置网关的相关信息,例如监听端口、路由规则等。

server:
  port: 8080

spring:
  cloud:
    gateway:
      routes:
        - id: service1
          uri: http://localhost:8001
          predicates:
            - Path=/service1/**
        - id: service2
          uri: http://localhost:8002
          predicates:
            - Path=/service2/**

 

3.创建启动类

创建一个Spring Boot启动类,并添加@EnableGateway注解启用网关功能。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.config.GatewayAutoConfiguration;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;

@SpringBootApplication(exclude = GatewayAutoConfiguration.class)
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("service1", r -> r.path("/service1/**")
                        .uri("http://localhost:8001"))
                .route("service2", r -> r.path("/service2/**")
                        .uri("http://localhost:8002"))
                .build();
    }
}

 

4.启动应用测试

启动你的Spring Boot应用程序,使用任意HTTP客户端发送请求到网关的监听端口。

http://localhost:8080/service1/endpoint

网关将根据配置将请求转发到相应的微服务实例。

陈睿mikechen

十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法