热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Zuul网关_zuul网关的作用

Zuul网关_zuul网关的作用首先我们要知道为什么要使用网关呢?先复习一下之前说过的微服务的知识,最开始我们运行微服务就是三个重要部分1.服务端2.消费端3.注册中心首先用户在消

首先我们要知道为什么要使用网关呢?

先复习一下之前说过的微服务的知识,最开始我们运行微服务就是三个重要部分
1.服务端
2.消费端
3.注册中心

首先用户在消费端发出消息,这个时候就需要负载均衡器Ribbon去调配服务,而且要使用到Hystrix去保护服务器,以免访问过多出现服务器过载,及时进行服务降级,然后我们通过消费端访问服务端的方法在最开始的时候使用的是RestTemplate去访问,当时是直接调配这个方法去访问,现在改进了一下,有Feign的出现,把Ribbon,Hystrix,还有RestTemplate都包含了,所以我们可以直接用Feign去访问服务端,但是我的服务器不可能说随便谁都可以访问,至少要经过登录验证才可以访问,以前我们是在controller里面直接编写登录方法,但是现在如果我们在一个大平台比如滴滴平台上,不可能说每一个消费端都去编写一个controller,这样代码量太多而且冗余,占用内存量大,因此,网关的出现解决了这个问题。

zuul网关的工作示意图:
在这里插入图片描述
网关在负载均衡器那边,网关是由什么集成的呢?首先我们要知道,一个网关它是不是也要调用用户管理,对吧?所以它也是需要负载均衡器Ribbon去调用管理工具,还有就是网关如果出现了故障或者出现了访问量过多导致系统过载,那么网关也是需要熔断和服务降级的,所以网关也需要Hyrix去保护它。蓝色部分的是外层服务,外层服务收到请求之后会调用内层服务,这个调用的组件就是Feign,然后一切都是在注册中心中进行,

如果不使用网关会造成什么影响呢?

不使用网关的话,我们将会面临两个问题:

1.用户不需要经过网关,也不需要权限管理,直接就可以访问我们的微服务
用户不用经过审核,也就是不需要走登录流程,直接就可以访问你的微服务,这样听起来是不是挺可怕,因为你的各种用户的信息,用户管理,购物车,甚至下单地址什么的信息都可以随便被别人访问,这就对用户的隐私造成很大的破坏,导致了用户没办法保障自己的隐私问题。
2.代码的冗余
为什么代码会冗余呢?如果没有网关,我们的每一个微服务是不是要自己建一个controller的权限对吧,那如果我们在每个微服务那里建立一个访问权限的话,这个代码量就很大,你很难保证你有多少个微服务,比如电商网站,你不仅需要用户管理微服务,还需要购物车,商品详情等等微服务,每个都配置一个访问权限,这个量就很大了,而且最重要的是,这还只是对外的权限管理配置,如果微服务自己之间也是不是也需要配置呀?那么我们不可能又要在每个微服务的controller那里再加上对其他微服务的权限管理,这样一来代码量太大了,造成代码冗余。

因此服务网关的作用非同小可,服务网关做的功能有三个:
1.路由
2.负载均衡
3.权限控制

我们可以通过网关向外界提供一个Rest API,这里说一下什么是Rest API呢?就拿登录界面来说,API就是你所看到的登陆界面的前端部分,而Rest就是实现这些前端部分的方法,因此网关对外提供一个Rest API其实也就是提供一个登录页面让外界进行登录验证,才能访问微服务。

zuul说白了就是一序列的过滤器,用来过滤各种信息

总结一下,zuul有这些功能:
1.身份验证。可以进行对用户的身份验证
2.审核。也可以对用户传来的信息进行审核与排查。
3.路由。根据不同的地址路由到不同微服务,,比如用户管理这个微服务的controller写的地址师order开头的,那用户就可以通过输入order去访问用户管理页面的这个微服务。
4.压力测试。因为所有的请求都会经过zuul网关,所以zuul就可以趁这个机会进行测试请求的数量多不多,而且得到相对应的数据,来决定是否需要运行。
5.负载均衡。也就是分配到微服务的实例进行运行
6.静态响应。静态响应就是如果是访问一些静态网页的话可以直接在zuul网关处进行访问了,就可以不进入内部资源里面进行访问了。

以下就是一个完整的服务请求过程
在这里插入图片描述
无论是电脑端还是手机端发送过来的请求都会经过zuul网关的处理,如果进行练额身份验证和审查通过后,就可以直接访问里面的服务,如果不通过,将会被拦截在外面。然后访问服务就是直接向微服务发送请求,微服务再在Eureka注册中心进行注册,然后拉取相关的服务进行对用户的服务

具体如果要实现什么服务,Eurka会通过具体的地址去调用

还有一点需要说明一下,就是路由和负载均衡的区别:

1.路由
路由是用户请求访问网关的时候,网关根据用户输入的地址进行调取相关的微服务,(因为用户地址和微服务地址一样,所以被调用),也就是顺着路径找到家。
2.负载均衡
要理解负载均衡,首先你要知道的是,微服务由三个组件组成,服务端,注册中心,消费端,你在调取一个微服务时,相当于消费端向注册中心发送了一个请求,那有很多个服务端,我们该调用哪一个服务端呢,这个问题就交由Ribbon去解决,Ribbon会帮你随机调用一个服务端进行服务,这就是负载均衡。就像滴滴平台,你向滴滴平台发送了打车请求,滴滴平台就相当于一个注册中心,你发送请求后,滴滴平台的Ribbon负载均衡器就会进行功能,优先给你安排服务等级比较高的滴滴师傅。以上便是负载均衡的介绍

好接下来让我们进行实操

首先创建一个zuul模块

在这里插入图片描述
在这里插入图片描述
只选择这个即可

我们配置组件还是要记得那三个步骤:
1.配置启动器
2.覆盖配置
3.添加到引导类

然而我们在配置上图选项后,它已经自动帮我们配置了启动器依赖
然而我们只需要在yml中去配置就可以了

在这里插入图片描述
配置端口号,配置微服务名字

接下来我们需要配置引导类
在这里插入图片描述
这个便是zuul的组件配置,配置在引导类这边

我们接下来还要对yml进行配置
在这里插入图片描述
这个配置的意思就是网关的路径配置,routes后面写的是服务端或者消费端的微服务名字
然后path配置的就是网址路径
url配置的也是网址

如果引导类没有被我们加载进来可以手动加载进来
在这里插入图片描述
这里已经配置好了,先详细说明一下

在这里插入图片描述
这个path和url是什么含义呢?
我先从操作上跟你们描述一遍它的作用,我们上面配置的端口号是10010嘛,所以如果我们去访问网址,localhost:10010/service-provider/user/2,(解释一下后面为什么是user/2,因为我们在服务端配置的controller的地址访问就是user/2这样子去访问的),然后网页会跳转到这个网址:
http://localhost:8082/user/2

看懂了吧?也就是说你只要输入了端口号还有service-provider还有相关controller配置地址和id,就可以访问到http://localhost:8082/,这就是网关的作用,帮助你进行跳转。


推荐阅读
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • 本文深入解析了Spring Cloud路由网关Zuul的核心功能及其典型应用场景。通过对方志朋老师教材的学习和实践,详细探讨了Zuul在微服务架构中的重要作用,包括请求路由、过滤器链管理以及服务动态扩展等关键特性。同时,结合实际案例,展示了Zuul在高并发和复杂业务场景下的应用优势,为读者提供了全面的技术参考。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文深入探讨了 Spring Cloud 微服务架构中 Gateway 组件的应用,详细介绍了其在实现高效请求路由与过滤方面的关键作用。文章首先从基本配置入手,逐步讲解了如何通过静态路由和动态路由实现灵活的服务访问控制。此外,还特别介绍了如何配置 Gateway 以自动从 Nacos 服务注册中心拉取服务列表,进一步提升系统的可维护性和扩展性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目
    本文详细介绍了如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目,涵盖了项目创建、配置及常见问题的解决方案。通过本指南,开发者可以快速掌握在 IntelliJ IDEA 中进行 Spring Boot 开发的最佳实践,提高开发效率。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 解决 Fetch 请求扇贝 API 时遇到的跨域问题及优化方案 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
author-avatar
风云时尚_榜中榜_434
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有