1
背景
CAL日志服务(Centralized Application Logging framework)是eBay平台的关键基础设施之一。它负责集中存储各种类型的日志数据,包括交易信息、事件和心跳监控数据等。CAL提供了高效且可靠的日志存储、检索、聚合和分析解决方案,同时支持生成统计数据和报表。利用CAL日志服务,开发人员和运维团队可以迅速发现、定位并有效解决问题,从而保障平台运行的稳定性,提升用户的体验。
CAL日志服务处理的峰值入口流量每秒钟高达数百GB。为了存储海量的数据,CAL日志服务使用了大量的存储空间,其中包括PB级容量的冷存储与热存储。通过优化CAL的存储容量,可以显著削减存储成本。如果存储容量减少30%以上,每年能够减少约数百万美元的开支。
2
CAL日志文件压缩格式优化
在进行优化之前,CAL一直使用的是gzip压缩格式来存储数据。相比gzip格式,zstd(Zstandard)压缩格式通常能够提供更高的压缩率和更快的解压速度。Zstd使用了有限状态熵(Finite State Entropy, FSE)编码器。有限状态熵是基于Jarek Duda在非对称数系(Asymmetric Numeral System,ANS)上突破性工作的基础上提出的熵编码技术。ANS算法充分利用了信息的统计特性,其压缩性能能够接近信息论中的香农极限。
3
CAL日志文件随机读性能优化
日志文件是典型的时序数据,用户通常只关注特定时间段内的日志记录。而为了定位特定时间段的日志,解压缩整个日志文件不仅耗时而且成本高昂。因此,需要实现对压缩日志文件指定时间段的随机读取功能。如果查看zstd JNI的java源代码,会发现zstd流式压缩接口只提供了压缩compress(), 清空缓冲区flush(), 关闭流close() 等常用方法,无法支持基于时间的随机读取功能。
因此,我们参考zstd文件格式规范,实现了一种支持按时间分块且可随机读的压缩日志文件格式。如下图所示,日志文件按照一定的时间间隔分块存储,并在文件末尾维护了一个索引,记录了每个时间块在压缩文件里的起始偏移量。用户在查询特定时间范围的日志时,CAL只需要读取文件末尾的索引信息,获取指定时间对应的偏移量,快速从对应的偏移量开始解压日志数据,而无需解压整个日志文件。分块存储基于zstd的帧(Frame)实现,在zstd压缩文件中,每个帧都是互相独立压缩的,调用initCStream()可以初始化一个新的帧,endStream()可以结束当前帧。
文件尾的偏移量信息对用户不可见,是基于zstd规范中定义的可跳过帧(Skippable Frame)来实现的。可跳过帧格式包含魔数(Magic Number),帧大小(Frame Size),用户数据(User Data)三部分 。zstd解压缩时会跳过Skippable frame,而CAL可以识别文件末尾的可跳过帧,读取可跳过帧的内容,加载偏移量信息,从而实现高效的日志解压缩及读取操作。
4
CAL存储优化的生产部署
eBay监控团队在生产环境成功完成了CAL的zstd优化部署。CAL的冷热数据存储都已切换为zstd压缩格式。
zstd压缩算法提供了多个压缩级别(1-22),允许用户在压缩率和CPU资源使用之间进行权衡。选择较低的压缩级别通常会减少CPU的使用率,而选择较高的压缩级别则可以实现更高的压缩率。在将zstd压缩级别设置为4后,CAL热存储的峰值容量减少了PB数量级,输出输入压缩率比从0.124降到了0.0843,这意味着在处理等量输入数据时,热存储所需的空间减少了约32%。
从gzip切换成zstd压缩格式后,CAL入口层服务器的CPU利用率从25%降低到了20%。
冷存储层的峰值容量减少了26%,节省了PB级的冷存储。
我们又进一步将CAL的zstd压缩级别从4级提高到8级,冷热存储层可以进一步减少超过10%的存储空间,同时CPU利用率仍然略低于使用gzip压缩模式下的CPU利用率。
5
硬件压缩技术及展望
另外我们还探索了Intel QAT(Intel QuickAssist Technology)硬件加速技术。英特尔QAT 是第四代及更高版本英特尔至强可扩展处理器上的内置加速器,可从 CPU 内核卸载关键的数据压缩和解压缩、加密和解密以及公钥数据加密任务,并通过硬件加速这些操作,从而帮助提升服务器性能并节省宝贵的计算资源。我们在老版本的linux内核上成功安装了QAT驱动,以及QATlib用户态开发库,zstd QAT plugin插件。当zstd压缩级别为12级时,在测试服务器上,zstd单线程硬件压缩速度能够达到550M/s,而CPU单线程的纯软件压缩速度只有38M/s,通过利用Intel QAT硬件加速技术,我们预期能够节省更多的CAL服务器,并且还能减少CPU用于压缩数据的功耗,从而节约更多的电力成本,实现更高的能效比。
END