一、名词解释
TraceId: 追踪Id,一般用在分布式系统中,用于标识一次完整请求的唯一id。在分布式系统中,由于每个服务,组件等都可能部署多台(用到分布式技术的基本也是大型系统),要确定一次请求经过了哪些服务,日志捞取,性能检测等等没有标识无异于大海捞针,这时候就需要一个唯一标识将整个链路串联起来,这就是TraceId。
扩展:
1.系统唯一中立标识
由于TraceId的粒度为每次请求,并且唯一不重复,也可以作为系统唯一中立通传标识,其他各种业务需要实现通传的功能时,可在此标识上扩展,如灰度标识等,以此标识为key,业务标识为value。
二、技术实现
前端及各端是业务起点,所以TraceId由前端及各端生成,后端管控验证(管控滥用,管控唯一,安全隔离)的要求。
1.生成算法
|--------------|----|---------------------|-------------------|
| 名称 | 长度 | 标识 | 说明 |
| 固定前缀 | 2 | KZ | 标识来源、系统等 |
| TIMESTAMP | 8 | DDHHMMSS(日时分秒) | 时间天然防重,后天校验时间间隔 |
| USER_ID_COMP | 10 | 用户ID压缩(SHA-256前10位) | 用户隔离,SHA算法脱敏,压缩 |
| RND | 4 | 随机数(0000-9999) | 再加防重盐值,一个用户一秒可能多个 |
| DEVICE_ID | 8 | 设备唯一号压缩(8位Hex) | 设备隔离,SHA算法脱敏,压缩 |
| CHK | 8 | 前序的SHA-256前8位校验码 | 对前面的参数加签,防篡改 |
| 总计 | 40 | | |
生成示例:KZ011130118j6k1lcg4z11151d6j77hvh8uk4n1s
2.后端校验算法
a.每次首次请求上报设备唯一号(DEVICE_ID),后端存储至退出(兜底12小时),后续请求每次延时存储。
b.每次请求的TraceId,后端收到请求校验TIMESTAMP,时间不能超过30秒,防止滥用。
c.每次请求的TraceId,后端收到请求校验DEVICE_ID和首次上报的
DEVICE_ID做对比,当天不能频繁变更。
d.每次请求的TraceId,后端收到校验CHK是否一致。
多次校验达到,可信、防重放、可校验可追溯、可管控、不可伪造的效果。
3.重复概率
在同一秒内,同一用户、同一设备产生 N 条 TraceId 时,重复概率由 4 位随机数决定:
- 单条 TraceId 重复的概率:1 / 10⁴ = 0.0001
- 当 N = 100 时,重复概率 ≈ C (100,2) / 10⁴ ≈ 0.495
- 当 N = 50 时,重复概率 ≈ C (50,2) / 10⁴ ≈ 0.1225
- 当 N ≤ 10 时,重复概率 ≤ 0.0045,可忽略不计
在跨用户、跨设备的大型系统中,同一秒内产生 10⁶ 条 TraceId:
- 总组合数 ≈ 10²²,远大于 10⁶
- 重复概率 ≈ 1 - (1 - 1/10²²)^(10⁶) ≈ 10⁻¹⁶,几乎为 0。