这段时间可以说睡得踏实,咋回事儿呢?就因为项目上了 SkyWalking,终于把我从分布式的“噩梦”里拯救出来了!
作为程序员,大家应该懂得,分布式系统一旦崩了,就是一道看不见的“十万行代码墙”。
哪边出了问题?谁的锅?真的是绞尽脑汁也难追溯。
自从有了 SkyWalking,这个分布式追踪系统,我真的是一觉睡到天亮,感觉生活都变香了。
分布式让人头秃
SkyWalking 和 OpenTracing
OpenTracing 标准
traceId
、spanId
、parentId
等。SkyWalking 的原理与架构
span
数据,通过把分布式调用信息汇总成完整的调用链,还原请求在分布式架构中的路径。自动采集 Span 数据的秘密
span
数据的呢?其实说穿了也不复杂,它用的是 Agent 插桩技术。Agent 插桩就是在代码执行时动态“打桩”,去记录我们关心的请求信息。span
,并将其汇报给中央服务,完成对调用链的追踪。public class ExampleService {
public void process() {
Tracer tracer = GlobalTracer.get();
Span span = tracer.buildSpan("process").start();
try {
// 执行某些操作
} finally {
span.finish();
}
}
}
span
生成例子,但实际用 SkyWalking 我们根本不用写这些代码,Agent 自动帮我们做完,是不是省事多了?😎如何跨进程传递 Context?traceId 是如何保证唯一的?
traceId
唯一。SkyWalking 在请求发出时会生成 traceId
,每个 span
都会附带这个 traceId
,并在跨进程调用时,通过 HTTP Header 等方式自动传递给下游服务。traceId
和其他 context
信息。B 服务接收到请求后,从 Header 中提取出 traceId
,并生成一个新的 span
关联到这个 traceId
上。这种方式保证了traceId 的唯一性,同时让整个调用链的信息都可以串联起来。请求量大,数据量会不会爆炸?
采样率控制:SkyWalking 支持设置采样率。对于流量特别大的情况,可以选择性采集一部分数据,减少数据采集量。 异步上传:Agent 采集到 span
后,不会马上同步发送,而是通过异步方式将数据批量汇报到后端服务,减少对业务代码的干扰。高效存储:SkyWalking 使用了 ElasticSearch 这样的高效存储服务,并有专门的压缩算法来降低存储的空间需求。所以即便请求量很大,也不至于撑爆存储。
我们公司是怎么用 SkyWalking 的
实际架构
针对 SkyWalking 的改造
自定义标签:为了更好地标记每个请求的来源和性质,我们在每个 span
上添加了一些自定义标签,如请求来源 IP、用户 ID、订单编号等。这样当问题发生时,我们能迅速锁定是哪个用户、哪个订单出了问题。报警系统:我们把 SkyWalking 和公司的报警系统打通了。一旦追踪系统检测到调用链上有异常(例如某个服务超时或返回错误),就会立刻触发报警通知相关团队,做到快速响应。 数据清理机制:为了节省存储空间,我们还制定了数据清理规则,把超过一定时间的数据自动归档或删除,既节省了存储,又保证了重要数据的留存。
-END-
ok,今天先说到这,老规矩,看完文章记得右下角给何老师点赞,
最后送给大家一个福利,我这里有一份搞副业的教程,这份教程里有100+个搞钱小项目:
网盘拉新核心玩法、公众号运营变现、小红书虚拟资料引流等,现在扫码加我微信,即可领取这份副业教程。
添加时备注:副业