微服务分布式对接口调用,你们是怎么追踪链路的?

2020-12-28 11:31:00 +08:00
 cking

示例服务器:
A-business-service: A 业务系统实现服务(业务实现方法)
A-base-service: A 基层系统实现服务(链接 Mysql)
B-business-service: B 业务系统实现服务(业务实现方法)
B-base-service: B 基层系统实现服务(链接 Mysql)
A 可以调用 A/B 的基础 但是 A 不能调用 B 业务层
.....
现在的是这样的 有一串代码
public void example(){
.....
aBusiness.aBase();
aBsuiness.bBase();
.....
}
然后在 A 调用 B 基础的时候报错了 看日志 是 B-base 报错的 然后但是我们不知道是 A-business 的调用还是 B-business 的调用...

现在的有一个想法就是用一个服务固定的 source 字段去标记 然后传递到基础服务的接口中...(管理觉得加入分布式链路追踪太麻烦了) 我的想法是用 ZipKin 之类的开源框架

V 友们也可以推荐一下好用的框架或者 Idea. Thx

5067 次点击
所在节点    Java
39 条回复
Kyle18Tang
2020-12-28 15:50:44 +08:00
不知道你们是不是用的 Java,如果技术栈是 Spring Cloud 推荐使用 Spring Cloud Zipkin,默认支持很多场景的链路追踪,例如 HTTP 、RabbitMQ 、Kafka 、MySQL 、MongoDB 等都有支持。
Jooooooooo
2020-12-28 15:52:04 +08:00
入口埋一个唯一 id, 然后一路传下去.

一般放在 thread local 里, 对于线程池稍微改造下
cking
2020-12-28 16:07:39 +08:00
@Kyle18Tang 就是 Cloud 家族
Kyle18Tang
2020-12-28 16:12:56 +08:00
@cking #23 我们现在使用的就是 Spring Cloud Zipkin,很舒服,整个链路都能追踪,通过 Trace Id 就能搜索到所有链路上的日志了
cking
2020-12-28 16:53:26 +08:00
@Kyle18Tang #24 我先试下 requestId 的方式 主要是管理不太想继续集成其他框架了 除非万不得已
cking
2020-12-28 16:54:16 +08:00
@Kyle18Tang #24
@cking #25
已经叫我们运维在 nginx 中加了一个 X-Request-Id 了 在请求头中
Kyle18Tang
2020-12-28 16:57:16 +08:00
@cking #25 微服务只需要依赖一个 starter 而已。。。然后加个往哪里发送的配置。Zipkin 的服务器另外搭建,Docker 就能启动,数据我们存到了 ES 里。自己写我是感觉真没必要,费时费力。
whiler
2020-12-28 16:59:35 +08:00
业界已经有一套成熟的方案了,可以看一下 opentracing
Kyle18Tang
2020-12-28 17:00:16 +08:00
@cking #26 不再建议自定义 HTTP 头采用 X-前缀,https://tools.ietf.org/html/rfc6648
cking
2020-12-28 17:04:45 +08:00
@Kyle18Tang 好的 我去把主管说服吧 哈哈哈
xuanbg
2020-12-28 17:14:10 +08:00
Zipkin 真心没有自己查 requestId 方便
gjf
2020-12-28 17:39:19 +08:00
这可以用 trace 解决也叫分布式链路追踪,可以看看云原生的 opentraceing,如果 java 可以使用 specialagent,对代码没有任何侵入
Yiso1573
2020-12-28 17:44:38 +08:00
spring sleuth ,好像要求 spring cloud ?目前我们用的这个
xuzhzzz
2020-12-28 18:25:00 +08:00
《管理觉得加入分布式链路追踪太麻烦了》

同样的领导,明明主流方案就在那里,偏偏自己搞,搞得不三不四的,到头来难受的还是自己
cking
2020-12-28 18:49:19 +08:00
@xuzhzzz 没法 程序员打工仔 最底层的人 被测试,产品,运维,前端呼来唤去
chogath
2020-12-28 18:49:28 +08:00
requestId
laminux29
2020-12-29 01:40:49 +08:00
整个过程,每个经过的节点 ID 或组件 ID 必须都记录上,要不以列表或数组形式记录在数据里,要不分散在各组件的日志里后期汇总。

这种东西无论是调试、流控还是分布式性能调优,都有重要作用。
lewis89
2020-12-29 08:05:33 +08:00
其实...最好的办法是不上微服务...大部分公司的量级根本没有达到紧迫到需要上微服务的情况
liian2019
2020-12-29 17:23:50 +08:00
traceId + spanId

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/739590

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX