背景需求
- 高峰日志写入压力大:每秒千万级日志条数。(
写入诉求
) - 实时要求高:日志采集到被检索最好1s内,高峰3s。(
查询诉求
) - 成本不小:要求保存半年的日志可以回溯查询,百PB级别。(
存储诉求
)
备注:1PB = 1024TB,1TB = 1024GB
设计思路
技术选型
ElasticSearch
简介:
1. ES负责存储和索引日志。
2. 底层依赖Lucene的倒排索引技术。
3. 通过shard数据分片实现分布式。
缺陷:
1. 为了提升写入性能,可以作聚合提交、延迟索引、减少refresh等,但始终要建立索引。日志流量巨大,每秒20GB,千万级日志条数,写入性能瓶颈明显。(写入瓶颈)
2. 需要定期维护索引、数据分片以及检索缓存,会占用大量CPU和内存,日志存储在机器磁盘上,数据量巨大,同时索引后期也会带来数据量暴增,成本不小。(存储媒介不菲)
3. 非格式化日志需要增加额外逻辑处理。存在很多业务日志不规范的情况,难以收敛。(格式单一)
小结:
1. 日志检索场景是 写多读少,维护庞大索引不合适。
自主设计
-
日志分块
通过日志时间、日志所