SpringCloud学习:Micrometer链路追踪 + GateWay网关
SpringCloud学习:Micrometer链路追踪 + GateWay网关
文章目录
- SpringCloud学习:Micrometer链路追踪 + GateWay网关
- 1. Micrometer + Zipkin(分布式链路追踪)
- 1. 概述
- 2. 为什么要有链路追踪
- 3. 分布式链路追踪原理
- 4. Zipkin:图形化展示界面
- 5. 实战:Micrometer数据收集 + Zipkin数据展示
- 2. Gateway网关:统一的API路由管理方式:路由Route、断言Predicate、过滤Filter
- 1. 概述:整个微服务架构的入口程序
- 2. Gateway三大核心:Route、Predicate、Filter
- 3. Gateway的工作流程:路由转发+断言判断+执行过滤器链(Pre、Post)
- 4. 入门配置
- 5. 9527网关如何做路由映射
1. Micrometer + Zipkin(分布式链路追踪)
1. 概述
sleuth的替代版本:Micrometer主要负责链路数据的收集,并使用zipkin dashboard进行展示,将一次分布式请求还原成调用链路,进行日志记录性能监控,并在Zipkin上进行展示
2. 为什么要有链路追踪
- 分布式链路追踪就是将一次分布式请求还原成调用链路,进行日志记录性能监控
- 前端的请求会在后端形成一条复杂的分布式服务调用链路,任何一环出错都会引起整个请求的失败
3. 分布式链路追踪原理
- 每个调用链用trace ID标识,spanID标识请求信息,并通过parentID关联各个请求信息的调用关系,通过在span中存放额外信息来实现对请求的监控以及对性能的记录
4. Zipkin:图形化展示界面
- 是分布式链路追踪系统图形化工具,将micrometer收集的链路追踪数据可视化展示到web上,使得对数据观看更方便
- 下载安装运行
- 官网zipkin.io
- 运行下载的jar包:java -jar zipkin-xxx.jar
5. 实战:Micrometer数据收集 + Zipkin数据展示
- 改POM引入需要的6个依赖,也要同时改父工程的POM来引入正确的版本
- 服务调用可能是双向的,故可以提供者和调用者都加上链路追踪,引入相应的POM依赖后只对zipkin进行yml配置即可,micrometer会自动开启链路追踪(将依次请求还原为调用链路)
- 改yml,只需要对zipkin进行配置,不需要对MicroMeter进行配置,只需要引入MicroMeter的依赖即可,然后对zipkin在yml中进行配置即可
- 改业务类:不需要额外添加注解,只要配置完成即可实现链路追踪并在zipkin中展示,
- 只需要引入Micrometer依赖,然后配置zipkin的yml配置即可,不需要修改业务类
- 测试后就可以在zipkin通过的网站上看到链路追踪信息,前提是运行zipkin的jar包,服务调用是通过openfeign进行发起的,故circuitbreaker也要在openfeign的配置中进行开启,所以链路追踪也会追踪到openfeign发出的circuitbreaker请求
2. Gateway网关:统一的API路由管理方式:路由Route、断言Predicate、过滤Filter
1. 概述:整个微服务架构的入口程序
- gateway组件的核心是一系列过滤器,对请求进行过滤,本身也是一种微服务,要进行服务注册,要创建一个gateway微服务,并在Consul中注册,然后在yml中对路由进行配置,此时调用者直接向网关微服务发起相应的请求,有网关微服务进行路由转发
- ngix是整个后台服务器的入口,可以进行负载均衡,而consul的负载均衡是在微服务上的
- gateway是zuul的替代品,可以实现反向代理,熔断,监控,鉴权,日志监控
2. Gateway三大核心:Route、Predicate、Filter
- 当一个请求进入网关后,会先判断是否存在对应的路由,路由由一系列的过滤器和断言组成,当存在路由时,会根据请求判断断言是否全部成立,只有predicate全部成立后,才会进行转发,且在转发前后要经过过滤器Filter对请求进行处理
3. Gateway的工作流程:路由转发+断言判断+执行过滤器链(Pre、Post)
- 由 SpringCloudGateway发出请求,然后在Gateway handler Mapping中找到与请求相配的路由,然后将其发送到GatewayWebHanlder,由Hanlder通过指定的过滤链将请求发送到实际的服务执行业务逻辑,过滤器可能在发送请求给实际微服务之前Pre和之后Post执行业务逻辑
4. 入门配置
- Gateway也是一个微服务,创建后要注册进入Consul中,然后直接在yml中配置路由即可,然后调用者直接调用gateway微服务即可
- ngix是对所有进入后台的请求进行负载均衡以及路由转发等操作,而Gateway是对后台内各个微服务之间的请求进行负载均衡和路由转发+断言predicate判断+执行过滤器链等操作
- Gateway也是一个微服务:建项目、改POM、写yml、主启动(使用@EnableDiscovery注册)、业务类(也要在consul中进行注册,故要引入consul的依赖)
- 建项目
- 改POM:引入spring-cloud-starter-gateway和consul的依赖(也要在consul中进行注册,故要引入consul的依赖)
- 改yml:对consul进行配置,然后配置路由参数(id、url、predicate)
- 主启动:在主函数上用@EnableDiscoveryClient注解进行标注以注册进入Consul
- 业务类:网关无任何业务,只需要将目标微服务提供的公共api接口作为网关的feignclient即可
5. 9527网关如何做路由映射
- 使用 @EnableFeignClient(‘微服务名’)注解标注的接口表示可以直接对其对象进行自动装配,并且调用内部方法可以向指定的微服务发出对应的请求,即对该微服务创建了一个feign对象
- 微服务内部之间不需要网关,直接提供者创建一个公共api接口并创建@FeignClient标注是哪个微服务的公共接口,然后调用者获得对应的接口实现类并调用相应的方法即可
- 使用@FeignClient注解对微服务提供的公共接口api进行标注,此时服务调用者可以通过自动装配直接获得实现类,并调用方法实现对微服务的调用
- 而对于外部请求,则此时需要加入网关,此时不可直接访问提供者的公共api,而是访问配置了相应路由的微服务所提供的openfeign公共调用接口,使用该接口对象来通过网关调用提供者的方法,网关内只需要配置路由目标ip和断言predicate和过滤器,不需要创建controller方法,只需要将提供者所提取的公共api接口的feignclient指定为网关微服务即可
- 网关只需要在网关微服务上进行配置路由即可,不需要在目标微服务上进行配置,但调用者必须访问网关的ip,网关不需要在调用者上进行配置,而且与提供者也解耦
- 路由可以隐真示假,通过配置路由后,此时请求访问路由的ip并指定对应的路径,可以映射到所配置的ip服务器上执行对应的请求,配置路由后,可以通过访问路由而转发到目标服务器,将目标服务器的ip进行隐藏
- 网关由一系列路由组成,而路由由请求的url和断言、过滤器组成,故要实现路由转发,则需要配置断言和过滤器,每个路由只负责一个请求(即一个请求地址)