可观测性 Trace 全量存储——之开篇

01
为什么要写这个系列
1.1 被忽视的 Trace 存储
可观测的三大支柱 Trace、Metric、Log
 
 - Metric 有数不胜数的一系列 TSDB 系统,如 InfluxDB、TDengine、Druid、M3DB、VictoriaMetrics 等等 
- Log 也有很多,如 ES、Clickhouse、Doris、Loki 等等 
- Trace 通常是被当做规范化的 Log 来对待的,因此一般存在 Log 对应的系统上,然而 Trace 的量级最大,却没有一个专门的存储系统,存储成本自然偏高一些 
1.2 Trace 全量和采样的争论
对于 Trace 的存储目前主要有 2 派:
- 采样派 
- 全量派 
02
如何选择
对于 Trace 存储,就面临一个抉择:到底是采样还是全量?这就好比 A、B 2 个方案,各有优缺点,到底怎么选?
不同的人会有不同的观点,也没法说某种观点就是错的,每种方案也各有人选择
其中的一个看法视角是:缺点是否可以挽救,如果缺点可以从别的地方挽救回来,那么就相当于继承了优势又挽回了劣势
比如这里的采样方案,缺点是不可挽救的,既然选择采样就必然会牺牲一些用户体验,而全量方案用户体验的优势是有了,成本的劣势是可以通过优化的方式来解决的,所以全量的方式会更有发展空间
03
怎么解
3.1 明确题目
Trace 存储可能有如下需求:
 
 上述过滤查询 traceId、spanId 的功能则交给类似 exemplar 的模块去实现。对于 Trace 存储来说,最主要的需求就是拿着 traceId、spanId 去查 Trace 内容,即一个典型的 kv 存储,kv 存储有太多的系统可以满足了
这个 kv 存储也有自己的特点
● v 的大小通常比较大,0~10M 都有可能
3.2 常见解法
采样下的解法:
全量下的解法:
我们这里主要说全量下的解法:
 
 3.3 下篇-性能优化(待续)
最终的优化效果:每天 1PB 的原始 Trace,高峰期 1300 万 tps 的 Trace 写入,只用了 110C 的计算资源和 80T 的存储,单 Span 查询平均耗时 200ms,就可以实现上述的 kv 的写入和查询。
这个优化效果基本达到了用采样的资源实现了全量的存储。
那这里的优化重点是哪些呢?
- 客户端需要配合全量做哪些性能优化 
- 有没有减少 Trace 的方式 
- 服务端如何做到不反序列化 Trace 原始内容 
- HBase、Clickhouse 等在这个 kv 场景下,存在什么问题?有没有更好的方案? 
敬请期待下篇内容
版权声明: 本文为 InfoQ 作者【乘云 DataBuff】的原创文章。
原文链接:【http://xie.infoq.cn/article/8a6d6fcab27446c3dd0d00702】。文章转载请联系作者。











 
    
评论