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


345

被折叠的 条评论
为什么被折叠?



