不给 Skywalking Agent 改一行代码,不给运维加一台机器,不引入一个中间件。只在一个端口上,"装"出一个 OAP。
目录
- 一、先认个错:Reporter 救了 Java,没救链路
- 二、复盘:两年的战果,和一堵绕不过去的墙
- 三、转折:OAP 从来不是一个软件,它是一个地址
- 四、拆解:Mock 一个 OAP 到底要多少代码
- 五、架构:一个 JVM 里的三个世界
- 六、克制:只做两件事,多的一件不做
- 七、边界:这套东西会在哪里翻车
- 八、终局:链路图不是用来看的,是用来结案的
- 九、总结
- 十、相关
一、先认个错:Reporter 救了 Java,没救链路
两年前,我在这个专栏里写过一篇《告别沉重的OAP!一款专为单体应用打造的 SkyWalking 轻量级本地化 Reporter 插件》。
那篇文章的核心主张很简单粗暴:拦截 SkyWalking Agent 原本要发给 OAP 的 Trace、Metrics 数据,把它"截胡"下来,存进本地内存的有界队列(默认 1000 条),彻底干掉 OAP 和 ES。
两年下来,这个判断被反复验证。我们现在可以做到:线上出问题,五分钟内开始解决。
不是五分钟定位完,是五分钟内开始动手——这两个字的差别,做过线上救火的人都懂。
但我今天要说的是:这套东西,只解决了一半问题。
它让我从吵架里脱身了,没让吵架消失。
二、复盘:两年的战果,和一堵绕不过去的墙
先说战果,因为它决定了后面那堵墙有多硬。
我们的真实场景不是"一个 SpringBoot 单体",而是这样一条链:
前端 ──► Java(SpringBoot2 + Undertow) ──► Go ──► C++四层,四