SpringCloud-7-服务网管

1.服务网关和Zuul

1.1 为什么需要服务网关

假如没有网关服务,当前系统起了多个服务,比如:订单、广告、商品、支付、用户。等等…

那么客户端怎么调用呢?和每个服务一步步打交道、显然不现实。需要一个接收request请求的统一入口。充当这个角色的是服务网关。一旦有了服务网关,所有请求都通过他,所以我们需要了解他发挥什么作用,具备什么要素?

1.2 服务网关的作用

1.稳定性、高可用

保证24小时可用;网络瘫痪、系统全挂、不能提供外面的服务。

2.性能、并发性

所有的请求都经过网关、所以网关的压力是巨大的、所以网关的性能也必须高。

3.安全性

要确保使用服务的安全、防止外部随意访问、比如金融行业、会进行通讯数据的加密措施。

4.扩展性

各种请求都经过网关服务、所以网关上大有文章可做、可进行扩展。
理论上、网关是处理各种非业务功能的绝佳场所。诸如:协议转发、防刷、流量管控、日志监控等。

1.3 常用的网关方案

网关并非是微服务出来后的新鲜事物。业界成熟的网关服务有:

一代的Zuul在性能上确实没有优势、不能和nginx比较。当然,二代Zuul有较大的提升。

原始的点餐项目是如下:

  1. 1.nginx在前,tomcat在后、nginx做了负载均衡和反向代理。现在我们可以让nginx发挥他负载均衡和反向代理的优势后面的tomcat可以换成Zuul
  2. 2.项目改造过程中、合理利用原来的资源、发挥新加入事物的优势、因地制宜解决问题。

    1.4 Zuul的特点

    Zuul相对nginx来说有所不足、但是作为SpringCloud完整微服务生态体系的前置网关服务是一个很不错的选择。有一种说法路由加过滤器等于Zuul


Zuul的组织架构图如下所示:
可以看到,过滤器之间是没有直接通信的,他们是通过Request Context进行数据通信的。

Zuul的一次Http的生命周期:

  1. 1.Origin Server就是我们的业务服务。
  2. 2.请求先过来之后会到pre filters这种类型的过滤器,比如我们的参数校验就可以在这里面来做。
  3. 3.routing filters作用就是将http请求转发到Origin Server中去:如果重写http请求可以在这里面做。
  4. 4.post filters 这个时候你已经拿到了返回的结果,这个时候如果你想对结果进行处理和加工,可以在这里面来做
  5. 5.error Filters如果在前两个filter发生异常时候,就可以在error filter中进行全局异常处理。

2.Zuul的使用

  1. 1.新建项目api-gateway

  2. 2.选择依赖
  3. 3.删除不需要的文件
  4. 4.修改版本一致
  5. 5.修改配置文件(从统一配置文件中获取配置信息)

2.1 路由转发

我们现在实现Zuul的路由转发功能,我们在api-gateway项目的启动类上添加:@EnableZuulProxy。我们现在要实现product服务下请求里面的/product/list

  1. 1.启动我们的product服务(8081端口),然后访问:

  2. 2.通过Zuul服务(8084端口)路由转发请求:

    只要注册到Eureka上的服务都可以通过:ip:port/服务名/url

  1. 3.自定义Zuul路由转发地址
    以上我们是通过默认的路由转发、默认的地址是:ip:port/服务名/url。但是有时候我们不想把服务名暴露出来 而是想用自己定义的路由地址。此时就需要配置Zuul了。

  2. 4.查询Zuul的所有routes,我们可以通过Zuul对应的服务api-gateway启动地址:

  1. 5.我们如果想要拦截某些请求

2.3 Cookie和动态路由

我们在开发搭建web项目的时候,经常要使用cookie,需要把cookie返回到后端。在这里使用了Zuul组件、默认情况下Cookie是无法传递过去的。如下:


我们从Zuul的配置中可以设置cookie的开启和关闭

2.3.2 动态路由

我们能不能改了路由配置之后自动生效了,就是动态路由。如果需要达到动态路由效果。我们只需要将api-gateway的配置放到config配置中心中去。我们如何做到config统一配置中配置改变了我们的api-gateway服务也动态改变了代码。我们添加Zuul的配置类。

2.4 路由和高可用小结

2.4.1 典型应用场景
  1. 1.Zuul的前置过滤器(Pre)
    a.限流 b.鉴权 c.参数校验调整 d.请求转发

  2. 2.Zuul的后置过滤器(Post)
    人过留名
    a.统计 b.日志

2.4.2 高可用

所有的请求都需要经过Zuul、所以生产环境中、我们需要部署多台Zuul,以避免单点故障。Zuul的高可用是必须的。

  1. 1.多个Zuul节点注册到Eureka Server(将多个节点注册到Eureka Server就可以实现高可用)
  2. 2.Nginx和Zuul “混搭”(使用nginx对外暴露一个url,nginx把请求转发到多个zuul服务上、这样可以做到彼此的取长补短)。
毕业于<br>相信技术可以改变人与人之间的生活<br>码农一枚