Why should a Trace-ID be 128 bits? (A Surprisingly Long Answer)
总结:https://newsletter.signoz.io/p/why-should-a-trace-id-be-128-bits
这篇文章核心解释了分布式追踪(Distributed Tracing)中 Trace-ID 为什么必须是 128 位,主要论点如下:
- 无协调的随机生成:在分布式系统里,为避免中心化计数器的性能瓶颈,各服务独立随机生成 Trace-ID。唯一性只能靠 ID 空间足够大来保障,无法做到绝对不冲突,只能把冲突概率压到极低。
- 生日悖论(Birthday Paradox):冲突概率不是随 ID 数量线性增长,而是近似与 k²/2N 相关(k 为已生成 ID 数,N 为 ID 空间大小)。这意味着 ID 数量翻倍,冲突风险约翻四倍。
- 64 位不够用:2⁶⁴ 约 1.8×10¹⁹,生成约 10 亿个 ID 时冲突概率就不可忽视,到大体量系统会“几乎必然”冲突。
- 128 位的安全性:2¹²⁸ 约 3.4×10³⁸,即便到“千万亿级”的 ID 数量,k²/2N 仍极小;要达到可观冲突概率,所需 ID 数量远超现实世界所有可能产生的追踪数据总和。
- 不选 256 位的原因:128 位(16 字节)已在存储、带宽、协议传播和生态兼容(如 UUID)上达到“甜点”;256 位并不会带来实用层面的安全性提升,却会显著增加成本。
- 结论:128 位是在“几乎不可能冲突”和“工程开销可控”之间的最优折中,也因此与 UUID 尺寸一致,数据库、语言、协议层面都天然好支持。