背景
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。而诸多的服务可能分布在了几千台服务器,横跨多个不同的数据中心。为了快速定位和解决故障,应用性能进行分析,全链路监控组件就在这样的问题背景下产生了。最出名的是谷歌公开的论文提到的Google Dapper。想要在这个上下文中理解分布式系统的行为,就需要监控那些横跨了不同的应用、不同的服务器之间的关联动作。
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【000】即可免费获取
1.1 全链路原理
通过业务调用过程中添加并传递调用链ID,实现应用间生成链路数据,最终串联成一条完整的调用链。
其中整个调用过程中每个请求都要透传TxId、SpanId和pSpanId。
1.2 Spring Cloud Gateway
作为Spring Cloud官方推出的第二代网关框架,Spring cloud gateway是基于Spring 5.0、Spring Boot2.0和Reactor等技术开发的网关,采用了NIO模型进行通信。
1.2.1 Spring Webflux
Spring Boot 2.0 包括一个新的 spring-webflux 模块,名称中的 Flux 来源于 Reactor 中的类 Flux。该模块包含对响应式 HTTP 和 WebSocket 客户端的支持,以及对 REST、HTML 和 WebSocket 交互等程序的支持。
一般来说,Spring MVC 用于同步处理;Spring Webflux 用于异步处理。
1.2.2 Mono & Flux
Mono表示的是包含 0 或者 1 个元素的异步序列,即要么成功发布元素,要么错误
Flux 表示的是包含 0 到 N 个元素的异步序列 ,即要么成功发布 0 到 N 个元素,要么错误
Flux和Mono之间可以相互转换,比如对一个 Flux 序列进行计数操作,得到的结果是一个 Mono对象,或者把两个 Mono 序列合并在一起,得到的是一个 Flux 对象。
2 Spring Cloud Gateway不做监控
Spring Cloud Gateway作为入口网关,主要负责服务的路由转发。如果网关没有进行监控,则全链路会缺失网关节点,直接展示为用户访问后续应用;不能有效定位用户请求慢是网关问题还是后续节点。
3 Spring Cloud Gateway进行监控
由于Spring Cloud Gateway采用了Reactor框架非阻塞式调用,任务之间会跨线程执行,导致HTTP头信息所需的调用链ID不好传递。
· Gateway接收线程
· Gateway返回线程
· 路由转发线程
3.1 Spring Cloud Gateway流程
现对Spring Cloud Gateway的流程进行梳理,本篇由于只涉及到跨线程服务调度,不讨论路由过程。
|