一、Turbine
1、介绍
Turbine:聚合多台服务器的监控数据,提供给仪表盘进行展现。
2、搭建Turbine服务
(1)添加Turbine依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
(2)yml文件配置
- 1、聚合的服务id
- 2、集群名:聚合之后的数据的命名,默认名:defalut
- 3、添加注解:@EnableTurbine、@EnableDiscoveryClient(可省略)
- 4、监控路径:
- http://localhost:4001/hystrix
- http://localhost:5001/trubine.stream
turbine:
# 集合的服务id
app-config: order-service
# 给聚合的数据命名
cluster-name-expression: new String("default")
hystrix dashboard 一次只能监控一个服务实例,使用 turbine 可以汇集监控信息,将聚合后的信息提供给 hystrix dashboard 来集中展示和监控
二、zuul ZPI网关
1、API网关
为微服务应用提供统一的调用入口,简化客户端的访问。
在微服务架构中,通常会有多个服务提供者。设想一个电商系统,可能会有商品、订单、支付、用户等多个类型的服务,而每个类型的服务数量也会随着整个系统体量的增大也会随之增长和变更。作为UI端,在展示页面时可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变。网关就可以对外暴露聚合API,屏蔽内部微服务的微小变动,保持整个系统的稳定性。
当然这只是网关众多功能中的一部分,它还可以做负载均衡,统一鉴权,协议转换,监控监测等一系列功能。
2、zuul
Zuul是Spring Cloud全家桶中的微服务API网关。
所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能:
- 认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。
- 性能监测 在服务边界追踪并统计数据,提供精确的生产视图。
- 动态路由 根据需要将请求动态路由到后端集群。
- 压力测试 逐渐增加对集群的流量以了解其性能。
- 负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。
- 静态资源处理 直接在边界返回某些响应。
3、zuul API网关
- 统一的调用入口,简化客户端访问,代理转发
- 统一的权限校验。eg:登录访问权限
- 集成ribbon:负载均衡、重试
- 集成Hystrix:降级、熔断、调用容错
3.1、统一调用入口
(1)添加zuul依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
(2)yml配置转发规则
zuul 路由配置可以省略,缺省以服务 id 作为访问路径
zuul:
routes:
# 服务id : 路径的映射规则
item-service: /item-service/** //任何访问
user-service: /user-service/**
order-service: /order-service/**
zuul的默认规则:自动配置,serviceId直接映射成一个子路径
可以根据注册表信息自动配置这个默认规则,刚启动只配置一次,内容不全,尽量不使用自动配置,为了防止注册信息不全,最好手动配置。
(3)主启动类加注解:@EnableZuulProxy
和 @EnableDiscoveryClient
(可省略)
@EnableZuulProxy
:代理
多个zuul服务器集群
Nginx前端F5硬件,处理服务器X引擎
3.2、统一权限校验
(1)、zuul请求过滤
使用zuul过滤器实现权限验证
eg:登录权限—>?token=。。。有token则已登录,可访问
过滤器:pre(过滤器)、routing(路由过滤器)、post(后置过滤器)、custom(自定义过滤器)、origin(开源过滤器)、error(错误过滤器)
添加过滤器
(1)只需要添加一个zuul过滤器子类,添加@Component
注解,没有任何配置,zuul可以自动配置
(2)继承zuulProxy父类:ZuulFilter
(3)实现抽象方法
package cn.tedu.sp11.filter;
import cn.tedu.web.util