什么是zuul

Zuul是从设备和网站到Netflix流应用的后端的所有请求的网关。作为边缘服务应用程序,Zuul旨在实现动态路由,监控,弹性和安全性。它还可以根据需要将请求路由到多个Amazon Auto Scaling Groups。

为什么我们建立Zuul?

路由是微服务体系结构不可或缺的一部分。例如,/api/users映射到用户服务,/api/shop映射到商店服务。zuul是Netflix基于JVM的路由器和服务器端负载均衡器。

Netflix API流量的数量和多样性有时会导致线上生产环境问题迅速出现,而且没有任何警告。我们需要一个能够快速改变行为的系统,以便来应对这些情况。

Zuul使用一系列不同类型的过滤器,使我们能够快速灵活地将功能应用于我们的边缘服务。 这些过滤器可帮助我们执行以下功能:

  • 身份验证和安全 - 识别每个资源的身份验证要求,并拒绝不满足的请求。

  • 洞察和监测 - 跟踪边缘的有意义的数据和统计数据,以便我们准确地了解线上生产环境情况。

  • 动态路由 - 根据需要将请求动态路由到不同的后端集群。

  • 压力测试 - 逐渐增加到集群的流量,以衡量性能。

  • 负载分配 - 为每种类型的请求分配容量并删除超出限制的请求。

  • 静态响应处理 - 直接在边缘构建一些响应,而不是将它们转发到内部集群

  • 多区域弹性 - 跨AWS地区的路由请求,以使我们的ELB使用多样化,并使我们的边缘更接近我们的成员

Zuul包含多个组件:

  • zuul-core - 库,其中包含编译和执行过滤器的核心功能。

  • zuul-simple-webapp-webapp-其中显示了如何使用zuul-core构建应用程序的简单示例

  • zuul-netflix - 库将其他NetflixOSS组件添加到Zuul中,例如使用功能区进行路由请求。

  • zuul-netflix-webapp - webapp-它将zuul-core和zuul-netflix一起包装成一个易于使用的包

Zuul通过使用其他Netflix OSS组件,为我们提供了对我们系统的深入了解:

  • Hystrix被用来包装呼叫到我们的来源,这使我们能够在发生问题时减少流量并划分优先级。

  • Ribbon是我们的客户端,它提供来自Zuul的所有出站请求,它提供了有关网络性能和错误的详细信息,并处理负载均衡。

  • Turbine实时聚合细粒度的度量标准,以便我们可以快速观察并对问题做出反应。

  • Archaius处理配置并提供动态更改属性的功能。

我们可以创建一个过滤器,将特定的客户或设备路由到单独的API集群进行调试。在使用zuul之前,我们使用Hadoop查询数十亿个记录的请求,以查找我们感兴趣的数千个请求。

我们有一个自动化的过程,在zuul过滤器中使用动态Archaius配置来稳定地增加路由到一个小型源服务器集群的流量。当实例接收到更多的流量时,我们会测量它们的性能特征和容量。

SpringCloud已经创建了一个嵌入的zuul代理,来简化一个非常常见的用例的开发。此功能对于代理所需后端服务的用户界面很有用,避免了对所有后端独立管理CORS和身份验证问题的需要。

要启用它,请使用@enablezuulproxy注释Spring Boot主类,然后将本地调用转发到相应的服务。按照惯例,ID为“users”的服务将从位于/users的代理接收请求。

代理使用路径定位通过发现服务转发到相应的实例,并且所有请求都在hystrix命令中执行,因此故障将显示在hystrix度量中。

zuul请求生命周期

在这张图片中,可以检查在访问源服务器之前,Zuul提供了一些功能,可以在请求中添加或在请求(响应)之后添加,如过滤,路由,聚合,错误处理等。

在我的示例中,我使用zuul实现了过滤器/路由。在这个示例中,我有两个组件:service和zuul。

服务将提供一些操作:

@RestController
@SpringBootApplicationpublic class BookApplication {   @RequestMapping(value = "/available")   public String available() { return "Spring in Action";    }   @RequestMapping(value = "/checked-out") public String checkedOut() {    return "Spring Boot in Action";   }   public static void main(String[] args) {    SpringApplication.run(BookApplication.class, args); }
}
spring.application.name=book
server.port=8090

Zuul服务

@EnableZuulProxy
@SpringBootApplication public class GatewayApplication {   public static void main(String[] args) {    SpringApplication.run(GatewayApplication.class, args);  }   @Bean  public SimpleFilter simpleFilter() {    return new SimpleFilter();  }
}   public class SimpleFilter extends ZuulFilter {  private static Logger log = LoggerFactory.getLogger(SimpleFilter.class);   @Override  public String filterType() {    return "pre"; }   @Override  public int filterOrder() {  return 1;   }   @Override  public boolean shouldFilter() { return true;    }   @Override  public Object run() {   RequestContext ctx = RequestContext.getCurrentContext();   HttpServletRequest request = ctx.getRequest(); log.info(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString())); return null;    }
}
zuul.routes.books.url=http://localhost:8090
ribbon.eureka.enabled=false
server.port=8080

通过zuul和book服务的协同工作,我们可以访问http://localhost:8080/books查看这些操作。

长按订阅更多精彩▼

了解Netflix-zuul网关服务相关推荐

  1. Zuul网关服务使用详解

    1.微服务架构所面临的问题? 1)针对某个功能,客户端在微服务架构的情况下需要请求多个模块接口 2)针对于身份认证.日志.流量控制等公共模块每个微服务都需要做一遍,不利于业务与非业务的拆分 针对于这些 ...

  2. SpringCloud之Zuul网关服务

    Zuul是spring cloud中的微服务网关.网关: 是一个网络整体系统中的前置门户入口.请求首先通过网关,进行路径的路由,定位到具体的服务节点上. Zuul是一个微服务网关,首先是一个微服务.也 ...

  3. springboot+Zuul网关服务

    springboot+Zuul网关服务 点关注不迷路,欢迎再来! 精简博客内容,尽量已专业术语来分享. 努力做到对每一位认可自己的读者负责. 帮助别人的同时更是丰富自己的良机. 网关服务有效的降低维护 ...

  4. Spring Cloud 系列之 Netflix Zuul 服务网关(三)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Netflix Zuul 服务网关(一) Spring Cloud 系列之 Netflix Zuul 服务网关(二) ...

  5. SpringCloud→SpringCloud搭建Zuul动态服务网关(五)

    文章目录 SpringCloud搭建Zuul动态服务网关 网关分类 开放Api 微服务网关 API服务管理平台 网关设计 开放API接口 内网API接口 网关框架 使用Zuul实现反向代理 使用Zuu ...

  6. 全面解析 Netflix 的微服务架构设计

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 1简介 多年来,Netflix 一直是全球最出色的在线订阅制视频流 ...

  7. 全面解析Netflix的微服务架构设计

    作者 | Cao Duc Nguyen 策划 | 万佳 本文描绘了 Netflix 流媒体服务的整体云架构图景,并从可用性.延迟.可扩展性和对网络系统或系统中断的适应性方面分析了系统的设计. 1 简介 ...

  8. SpringCloud 之 Zuul 网关搭建及配置

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:Anakki blog.csdn.net/qq_29 ...

  9. properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!...

    本文同步Java知音社区,专注于Java 作者:kosamino http://www.cnblogs.com/jing99/p/11696192.html Zuul是spring cloud中的微服 ...

  10. 网关的作用是什么_SpringCloud中Zuul网关原理及其配置,看它就够了

    正文 Zuul是spring cloud中的微服务网关.网关:是一个网络整体系统中的前置门户入口.请求首先通过网关,进行路径的路由,定位到具体的服务节点上. Zuul是一个微服务网关,首先是一个微服务 ...

最新文章

  1. 什么是HTML5?HTML5发展前景如何?
  2. 微信公众平台开发(76) 获取用户基本信息
  3. 《汇编语言》王爽—第七章实验六详解
  4. Serilog输出日志到mysql_ASP.NET Core利用Docker ElasticSearch Kibana来记录日志
  5. 基于python的电影推荐系统论文_一种电影推荐系统的设计与实现
  6. Javashop 7.0 统一登录unionID问题修改
  7. Python优化机制:常量折叠
  8. LigerUI的简单使用示例
  9. 几何光学学习笔记(28)-6.3光照度和光出射度
  10. 前端唤起QQ和加群功能
  11. 生鲜电商:卖什么?卖给谁?怎么卖?
  12. 用友NC平台之基本概念解析(一)
  13. Spring Framework 开发参考手册 之十四 JMS支持
  14. python笔记 同行输出 print格式化输出
  15. 计算机械产量定额,机械台班产量定额的计算方式
  16. 搭建Wordpress Mu的插件和注意事项
  17. 阿里专家直击前端盛会JSConf2017_Day2:见证Moment.js精彩分享
  18. QGIS 3D:三维DEM数据加载渲染漫游
  19. word插入页码技巧
  20. ESP8266学习-内置网页配置(一)

热门文章

  1. android文本自动添加图片格式,Android中多行文本末尾添加图片排版问题的解决方法...
  2. 模板 - 计算几何相关公式大全
  3. C++11 unordered_map详细介绍
  4. 二分查找与二叉排序树
  5. from name as id为啥报错
  6. C++——虚函数(Virtual Member Functions) 【functions语意学】
  7. Elasticsearch 5
  8. 系统间通信——dubbo
  9. .NetCore~框架版本号不同引起dotnet不能run它
  10. 做Linux背锅2年,我总结了这六类好习惯和30个血的教训