A服务调用B服务,是如何存储span的?
问题描述
A方调用B方,A方知道自己的服务名,ip,traceId等,也可以知道调用耗时,但不一定知道B方所在的ip、serviceName。这种情况如何处理span存储?
解决思路
A调用B时,声明一个span,将创建的spanid传递到B,对于接收方B,能拿到span的id信息,又能获取自己的serviceName和ip信息。构成了一个完整的span链。
这里有两种实现方案:
A方不记录span信息,B接收到span后,记录整个span信息,这样的span发起方和接收方是同一条数据。
A方记录span的发起方信息,B记录span的接收方信息。这样同一个span会有发起方和接收方两条数据。
第一个方案缺点是:假如B方是外部的系统,如果A不记录,这条记录就丢失了。所以可以排除。
第二个方案缺点是:同一个span记录两条数据,对应调用耗时及共用属性存储哪里为好?
由于第一个方案丢失数据风险,只能去完善第二个方案,发起方能获取到的存储在发起方,接收方能获取到存储在接收方。
先思考到这里,后期再补。
网友评论