sbc(六) Zuul GateWay 网关应用(上)

简介: 看过之前SBC系列的小伙伴应该都可以搭建一个高可用、分布式的微服务了。

前言


看过之前SBC系列的小伙伴应该都可以搭建一个高可用、分布式的微服务了。 目前的结构图应该如下所示:



各个微服务之间都不存在单点,并且都注册于 Eureka ,基于此进行服务的注册于发现,再通过 Ribbon 进行服务调用,并具有客户端负载功能。


一切看起来都比较美好,但这里却忘了一个重要的细节:


当我们需要对外提供服务时怎么处理?


这当然也能实现,无非就是将我们具体的微服务地址加端口暴露出去即可。


那又如何来实现负载呢?


简单!可以通过 Nginx F5 之类的工具进行负载。


但是如果系统庞大,服务拆分的足够多那又有谁来维护这些路由关系呢?


当然这是运维的活,不过这时候运维可能就要发飙了!


并且还有一系列的问题:


  • 服务调用之间的一些鉴权、签名校验怎么做?


  • 由于服务端地址较多,客户端请求难以维护。


针对于这一些问题 SpringCloud 全家桶自然也有对应的解决方案: Zuul


当我们系统整合 Zuul 网关之后架构图应该如下所示:



我们在所有的请求进来之前抽出一层网关应用,将服务提供的所有细节都进行了包装,这样所有的客户端都是和网关进行交互,简化了客户端开发。


同时具有如下功能:


  • Zuul 注册于 Eureka 并集成了 Ribbon 所以自然也是可以从注册中心获取到服务列表进行客户端负载。


  • 功能丰富的路由功能,解放运维。


  • 具有过滤器,所以鉴权、验签都可以集成。


基于此我们来看看之前的架构中如何集成 Zuul


集成 Zuul


为此我新建了一个项目 sbc-gateway-zuul 就是一个基础的 SpringBoot 结构。其中加入了 Zuul 的依赖:


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


由于需要将网关也注册到 Eureka 中,所以自然也需要:


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


紧接着配置一些项目基本信息:


# 项目配置
spring.application.name=sbc-gateway-zuul
server.context-path=/
server.port=8383
# eureka地址
eureka.client.serviceUrl.defaultZone=http://node1:8888/eureka/
eureka.instance.prefer-ip-address=true


在启动类中加入开启 Zuul 的注解,一个网关应用就算是搭好了。


@SpringBootApplication
//开启zuul代理
@EnableZuulProxy
public class SbcGateWayZuulApplication {
}


启动 Eureka 和网关看到已经注册成功那就大功告成了:



服务路由


路由是网关的核心功能之一,可以使系统有一个统一的对外接口,下面来看看具体的应用。


传统路由


传统路由非常简单,和 Nginx 类似,由开发、运维人员来维护请求地址和对应服务的映射关系,类似于:


zuul.routes.user-service.path=/user-service/**
zuul.routes.user-sercice.url=http://localhost:8080/


这样当我们访问 http://localhost:8383/user-service/getUserInfo/1 网关就会自动给我们路由到 http://localhost:8080/getUserInfo/1 上。


可见只要我们维护好这个映射关系即可自由的配置路由信息(user-sercice 可自定义),但是很明显这种方式不管是对运维还是开发都不友好。由于实际这种方式用的不多就再过多展开。


相关文章
|
1月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
61 1
Gateway服务网关
|
1月前
|
人工智能 Kubernetes API
应用网关的演进历程和分类
唯一不变的是变化,在现代复杂的商业环境中,企业的业务形态与规模往往处于不断变化和扩大之中。这种动态发展对企业的信息系统提出了更高的要求,特别是在软件架构方面。为了应对不断变化的市场需求和业务扩展,软件架构必须进行相应的演进和优化。网关作为互联网流量的入口,其形态也在跟随软件架构持续演进迭代中。我们下面就聊一聊网关的演进历程以及在时下火热的 AI 浪潮下,网关又会迸发怎样新的形态。
187 10
|
29天前
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
38 0
|
3月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
177 5
|
3月前
|
测试技术 微服务
微服务(八)-服务网关zuul(四)
微服务(八)-服务网关zuul(四)
|
3月前
|
监控 前端开发 Java
微服务(七)-服务网关zuul(三)
微服务(七)-服务网关zuul(三)
|
3月前
|
负载均衡 前端开发 安全
微服务(六)-服务网关zuul(二)
微服务(六)-服务网关zuul(二)
|
5月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
2月前
|
安全 5G 网络性能优化
|
3月前
|
监控 负载均衡 安全
微服务(五)-服务网关zuul(一)
微服务(五)-服务网关zuul(一)