微盟|支撑千亿级规模调用链的设计与实践

如何获得讲师PPT:

扫码关注公众号,后台回复「0411」即可获得讲师PPT哟~

还能一键订阅后续精彩活动内容~

走出故障迷局的三重奏:逃生、复盘和推演

Q&A 答疑环节:

一、重命名包方案如果没有源码的话能做吗?

可以的。这是有一个小工具,具体名称我忘记了,后续线下可以交流下。我们之前用过,当我们只拿到一个jar包时,通过一个命令就能够对jar包进行重命名,这个是能进行的。另外就是打包的时候进行重命名,这个也是比较推荐的一个方案。是在Agent里面引用通过shade,引用这个依赖的时候,在那下面构建的时候我们加shade,他可以指定对哪些满足条件的jar包的名称进行重命名为其他名称,这个其实也没有拿到它的一个源码的,这两个方式都能够做。我们推荐使用,在打包的时候通过shade技术进行jar包的重命名。
包重名demo:
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<createDependencyReducedPom>true</createDependencyReducedPom>
<createSourcesJar>true</createSourcesJar>
<shadeSourcesContent>true</shadeSourcesContent>
<transformers>
<transformer implementation=”org.apache.maven.plugins.shade.resource.ManifestResourceTransformer”>
<manifestEntries>
<Premain-Class>${premain.class}</Premain-Class>
<Can-Redefine-Classes>${can.redefine.classes}</Can-Redefine-Classes>
<Can-Retransform-Classes>${can.retransform.classes}</Can-Retransform-Classes>
</manifestEntries>
</transformer>
</transformers>
<relocations>
<relocation>
<pattern>${shade.net.bytebuddy.source}</pattern>
<shadedPattern>${shade.net.bytebuddy.target}</shadedPattern>
</relocation>
</relocations>
<filters>
<filter>
<artifact>net.bytebuddy:byte-buddy</artifact>
<excludes>
<exclude>META-INF/versions/9/module-info.class</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
异步线程池链路上下文
transmittable-thread-local

二、Agent是否可以支持在运行的时候带上?

我们的调用链体系,是没有支持运行时带上的。其实Agent是可以在运行时带上的。包括阿里的排障工具和其他的一些Agent的排障工具,它有可能在运行时带上。但是我们的调用链体系复杂度是比较高的,做了很多的事情。所以出于安全考虑,我们没有去做实时挂载的考虑,但其实它是可以做的。

三、批量导入商品场景,业务逻辑会比较复杂,当调用链超过5K或者1W的时候该如何处理呢?还有一个第二个问题是说异步消费场景,上下游调用链如何串联?

第一个问题我们也碰到过,我们的想法是,刚刚有讲到我们是有一个调用链查询的页面,在调用链查询的页面,有可能超过5万或者1万就不能检索了。后面准备做的方式是在调用链检索的板块去实现这个功能,我们可能看不到一整个调用链体系,因为整个调用链体系超过了5k端点和1w端点页面显示是不现实的。但是我们可以通过,刚刚的调用链检索,把message ID输入进去,然后把端点名称输进去,然后给他提供一个稍微降级的业务体验,让他去检索一下调用链流经的一些信息或是输入详情,通过这种方式来保证链路能够进行稍微降级的检索,因为正常来说业务方能超过5k和1W调用链的还是比较少的,并且我们页面也是没有办法去渲染的。所以我们还是通过调用链查询的方式去做。
第二个问题我们的异步线程池是通过阿里的TTL工具去做的,它可以保证异步线程池链路上下文的串联。
消费场景的话,是通过另一种方式做的。我说一个具体的案例,RocketMQ 有一个消费方,他的消费就通过RocketMQ 可以实现的。但他想要在调用链体系去通过调用链来串联起来。但在这里面,我们是怎么去给支持的呢?我们在收集的时候我们收集了message id,在生产的时候,send的时候,我们收集了它的message id。在消费的时候,我们也收集了message id。在调用链平台,你刚刚看到的业务关键字功能可以通过RocketMQ的关键进词message id进行检索。在调用链详情里,也可以看到相关的message id。再举个详细的例子:我发送了一个消息。我有N个消费方,我想看到N个消费方的一个链路,可以这么做,第一步我去调用链详情那边去看send时的message id,第二步到调用链链路检索板块去通过输入关键词进行检索,这时候他就能看到具体的消费了。

四、几千亿的数据有没有其他的数据价值?怎么利用呢?整个调用链平台是否会有开源计划吗?外部的租户是否可以接入?

几千亿的数据价值是非常大的。我们在挖掘过程也是有一个链路的检索诉求和指标体系的监控诉求,接下来我们会基于链路拓扑图的方向去探索。会给业务方建立一下业务边界的划分,或业务流向的漏斗,或是基于链路体系,通过提供给开发的一个参考值,来反馈调用链的问题,这个后面我们会进行深入的探索。
调用链平台后续的开源计划会根据公司的安排来看。现在微盟的租户体系我们对外已经提供了我们调用链体系给租户使用。

本文来自投稿,不代表TakinTalks稳定性技术交流平台立场,如若转载,请联系原作者。

(0)
上一篇 2023年3月8日 上午10:54
下一篇 2023年4月6日 下午6:52

相关推荐

发表评论

邮箱地址不会被公开。