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

微服务网关详解(定义作用及种类使用)-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.添加依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-gateway</artifactId>
  4. </dependency>

 

2.创建网关配置文件

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

  1. server:
  2. port: 8080
  3.  
  4. spring:
  5. cloud:
  6. gateway:
  7. routes:
  8. - id: service1
  9. uri: http://localhost:8001
  10. predicates:
  11. - Path=/service1/**
  12. - id: service2
  13. uri: http://localhost:8002
  14. predicates:
  15. - Path=/service2/**

 

3.创建启动类

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

  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.gateway.config.GatewayAutoConfiguration;
  4. import org.springframework.cloud.gateway.config.GatewayProperties;
  5. import org.springframework.cloud.gateway.route.RouteLocator;
  6. import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
  7. import org.springframework.context.annotation.Bean;
  8.  
  9. @SpringBootApplication(exclude = GatewayAutoConfiguration.class)
  10. public class GatewayApplication {
  11. public static void main(String[] args) {
  12. SpringApplication.run(GatewayApplication.class, args);
  13. }
  14.  
  15. @Bean
  16. public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  17. return builder.routes()
  18. .route("service1", r -> r.path("/service1/**")
  19. .uri("http://localhost:8001"))
  20. .route("service2", r -> r.path("/service2/**")
  21. .uri("http://localhost:8002"))
  22. .build();
  23. }
  24. }

 

4.启动应用测试

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

  1. http://localhost:8080/service1/endpoint

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

评论交流
    说说你的看法
欢迎您,新朋友,感谢参与互动!