赞
踩
网关是微服务最边缘的服务,直接暴露给用户,用来做用户和微服务的桥梁
没有网关:客户端直接访问我们的微服务,会需要在客户端配置很多的 ip:port,如果user-service 并发比较大,则无法完成负载均衡
有网关:客户端访问网关,网关来访问微服务,(网关可以和注册中心整合,通过服务名称找到目标的 ip:prot)这样只需要使用服务名称即可访问微服务,可以实现负载均衡,可以实现 token 拦截,权限验证,限流等操作
你们项目里面 用的什么网关? gateway zuul
它是 Spring Cloud 官方提供的用来取代 zuul(netflix)的新一代网关组件(zuul:1.0 , 2.0 ,zuul 的本质,一组过滤器,根据自定义的过滤器顺序来执行,本质就是web 组件 web 三大组件(监听器 过滤器 servlet) 拦截 springmvc)
Zuul1.0 使用的是 BIO(Blocking IO) tomcat7.0 以前都是 BIO 性能一般
Zuul2.0 性能好 NIO
AIO 异步非阻塞 io a+nio = aio = async + no blocking io
它基于 spring5.x,springboot2.x 和 ProjectReactor 等技术。它的目地是让路由更加简单,灵活,还提供了一些强大的过滤器功能,例如:熔断、限流、重试,自义定过滤器等 token 校验 ip 黑名单等
SpringCloud Gateway作为Spring Cloud生态的网关,目标是替代Zuul,在SpringCloud2.0以上的版本中,没有对新版本的 zuul2.0 以上的最新高性能版本进行集成,仍然还是使用的zuul1.x[可以看项目依赖找到]非 Reactor 模式的老版本。而为了提升网关的性能,SpringCloud Gateway 是基于 webFlux 框架实现的,而 webFlux 框架底层则使用了高性能的 Reactor 模式通信框架的 Netty
NIO(非阻塞式 io) BIO 你只需要了解网关能做什么? 网关里面写什么代码 就可以了
客户端向 springcloud Gateway 发出请求,然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器来将请求发送到我们实际的服务的业务逻辑,然后返回。 过滤器之间用虚线分开是因为过滤器可能会在发送请求之前【pre】或之后【post】执行业务逻辑,对其进行加强或处理。
总结:Gateway 的核心逻辑也就是 路由转发 + 执行过滤器链
路由信息的组成:由一个 ID、一个目的 URL、一组断言工厂、一组 Filter 组成。
如果路由断言为真,说明请求 URL 和配置路由匹配。
Java 8 中的断言函数。 lambda 四大接口 供给形,消费性,函数型,断言型Spring Cloud Gateway 中 的 断 言 函 数 输 入 类 型 是 Spring 5.0 框 架 中 的ServerWebExchange。Spring Cloud Gateway 的断言函数允许开发者去定义匹配来自于Http Request 中的任何信息 比如请求头和参数。
一个标准的 Spring WebFilter。 Web 三大组件(servlet listener filter) mvc interceptor
Spring Cloud Gateway 中的 Filter 分为两种类型的 Filter,分别是 Gateway Filter 和Global Filter。
过滤器 Filter 将会对请求和响应进行修改处理。
Nginx 在做路由,负载均衡,限流之前,都有修改 nginx.conf 的配置文件,把需要负载均衡,路由,限流的规则加在里面。
Eg:使用 nginx 做 tomcat 的负载均衡
但是 gateway 不同,gateway 自动的负载均衡和路由,gateway 和 eureka 高度集成,实现自动的路由,和 Ribbon 结合,实现了负载均衡(lb),gateway 也能轻易的实现限流和权限验证。
Nginx(c语言)比 gateway(java)的性能高一点。
本质的区别呢?
启动 eureka-server
启动 consumer-user-service
启动 gateway
访问:http://192.168.137.1/info
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。