背景
我们在进行全链路日志记录的场景中,使用双AOP+TraceId标识我们的每一个请求,在保证链路追踪的同同时,保证高并发场景下的性能损耗。
但是,我们发现,在第一个版本:使用ThreadLocal
记录traceId
的时候,在子任务或者后续任务的场景中,会出现traceId
无法传递的问题。
痛点分析
出现以上问题,主要是因为ThreadLocal
在子任务和后续任务等无法进行数据共享。
基于此,把风控系统和交易系统涉及到线程数据共享的场景抽取出来,进行根因分析。
- 有多少种线程共享的方式?
- 有多少业务场景?
- 在不同线程共享方式下,不同场景的不同表现?
- 在风控系统和交易系统中,如何进行技术选型建议?是否可以形成线程共享技术委员会标准文档,形成知识库,以便后续使用。
技术解析
目前有三种线程共享的方式: ThreadLocal、InheritableThreadLocal与TransmittableThreadLocal
同时抽象出来的场景有以下四种:
场景 | 描述 |
---|