Spring Cloud Gateway全链路实现

文章结尾有彩蛋

 

随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。而诸多的服务可能分布在了几千台服务器,横跨多个不同的数据中心。为了快速定位和解决故障,应用性能进行分析,全链路监控组件就在这样的问题背景下产生了。最出名的是谷歌公开的论文提到的Google Dapper。本文主要介绍了Spring Cloud Gateway全链路实现解决方案。主要讲解全链路原理和方案;最后分享如何实现探针全链路。

全链路原理

 

主流的全链路方案都是采用谷歌公开的论文提到的Google Dapper方案。

 

  1. 一个Span表示一个服务的调用开始到结束。

  2. 如果一个Span没有父ID则被称之为入口Span,需负责生成本次链路调用全局唯一的TxId。

  3. 如果服务间有调用,则透传TxId、SpanId和pSpanId,每个SpanId需重新生成,pSpanId采用调用方的SpanId。

  4. 被调用服务需将透传的头信息恢复,继续透传后续节点。

  5. 最终根据Span的关联性生成链路树。

 

 

将应用以角色进行区分,分为Server端和Client端。

 

Server端负责接收请求,其流程主要分为三步:

 

  1. 创建入口Span

  2. 解析并恢复上游头信息: TxId、SpanId和pSpanId

  3. 结束入口Span

 

Client端负责发送请求,其流程也分为三步:

 

  1. 创建子Span

  2. 传递给下游头信息:TxId、新的SpanId和pSpanId(上游节点的SpanId)

  3. 结束子Span

 

其中Dubbo Attachment、HttpRequest Header、MQ Property是Map类型,都可以进行头信息传输。

 

全链路方案

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyb9292

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值