技术■腾讯万亿级 Elasticsearch 技术解密( 四 )
在大数据领域 , 传统的方案是依赖外部离线计算系统 , 周期性的读取全量数据进行计算 , 这种方式计算开销、维护成本高 。谷歌的广告指标系统 Mesa 采用持续生成方案 , 数据写入时系统给每个 Rollup 产生一份输入数据 , 并对数据进行排序 , 底层在 Compact/Merge 过程中通过多路归并完成 Rollup , 这种方式的计算、维护成本相对较低 。ES 从 6.x 开始支持数据排序 , 我们通过流式查询进行多路归并生成 Rollup , 最终计算开销小于全量数据写入时 CPU 开销的 10% , 内存使用小于 10MB 。我们已反馈内核优化至开源社区 , 解决开源 Rollup 的计算、内存瓶颈 , 具体可参考 PR ES-48399 。
文章图片
文章图片
接下来 , 我们展开介绍内存优化部分 。前面提到很多用户在使用大存储机型时 , 内存优先成为瓶颈、硬盘不能充分利用的问题 , 主要瓶颈在于索引占用大量内存 。但是我们知道时序类场景对历史数据访问很少 , 部分场景下某些字段基本不使用 , 所我们可以通过引入 Cache 来提高内存利用效率 。
在内存优化方面 , 业界的方案是什么样的呢?ES 社区从 7.x 后支持索引放于堆外 , 和 DocValue 一样按需加载 。但这种方式不好的地方在于索引和数据的重要性完全不同 , 一个大查询很容易导致索引被淘汰 , 后续查询性能倍数级的衰减 。Hbase 通过缓存 Cache 缓存索引、数据块 , 提升热数据访问性能 , 并且从 HBase 2.0 开始 , 重点介绍其 Off Heap 技术 , 重点在于堆外内存的访问性能可接近堆内 。我们基于社区经验进行迭代 , 在 ES 中引入 LFU Cache 以提高内存的利用效率 , 把 Cache 放置在堆外以降低堆内存压力 , 同时通过 Weak Reference、减少堆内外拷贝等技术降低损耗 。最终效果是内存利用率提升 80% , 可以充分利用大存储机型 , 查询性能损耗不超过 2% , GC 开销降低 30% 。
文章图片
文章图片
前面我们介绍了可用性、成本优化的解决方案 , 最后我们来介绍性能方面的优化实践 。以日志、监控为代表的时序场景 , 对写入性能要求非常高 , 写入并发可达 1000w/s 。然而我们发现在带主键写入时 , ES 性能衰减 1+倍 , 部分压测场景下 , CPU 无法充分利用 。以搜索服务为代表的场景 , 对查询性的要求非常高 , 要求 20w QPS, 平响 20ms , 而且尽量避免 GC、执行计划不优等造成的查询毛刺 。
文章图片
文章图片
针对上述问题 , 我们介绍下腾讯在性能方面的优化实践:
写入方面 , 针对主键去重场景 , 通过利用索引进行裁剪 , 加速主键去重的过程 , 写入性能提升 45% , 具体可参考 PR Lucene-8980 。对于部分压测场景下 CPU 不能充分利用的问题 , 通过优化 ES 刷新 Translog 时的资源抢占 , 提升性能提升 20% , 具体可参考 PR ES-45765 /47790 。我们正在尝试通过向量化执行优化写入性能 , 通过减少分支跳转、指令 Miss , 预期写入性能可提升 1 倍 。
查询方面 , 我们通过优化 Merge 策略 , 提升查询性能 , 这部分稍后展开介绍 。基于每个 Segment 记录的 min/max 索引 , 进行查询剪枝 , 提升查询性能 30% 。通过 CBO 策略 , 避免查询 Cache 操作导致查询耗时 10+倍的毛刺 , 具体可参考Lucene-9002 。此外 , 我们也在尝试通过一些新硬件来优化性能 , 比如说英特尔的 AEP、Optane、QAT 等 。
推荐阅读
- 快充@三口65瓦+氮化镓技术!征拓新品:小却如此强悍
- #程序员#腾讯女程序员相亲遭对方嫌弃,晒出聊天记录感叹:太难了
- 【】直播行业打响“技术战”,酷狗3D虚拟直播脱颖而出,优势何在?
- 『腾讯科技』淘宝天猫蒋凡在阿里内网回应传闻:深表歉意,恳请公司展开调查
- 「腾讯」腾讯视频盈利难:2019年亏损30亿 盗墓题材连拍五年没水花
- 技术@全球首套规模化太阳燃料合成示范项目试车成功丨转化亮点
- 服务@云市场跨步式发展 打造ToB云市场阿里腾讯外“第三股势力”
- [技术]安芯半导体再出货一台光刻机,价值千万元!满足国内芯片企业需求
- 『技术』鹤壁:全面提升科技创新能力为建设高质量富美鹤城贡献科技力量(1)
- 技术@为楼宇安上“智慧大脑”,翠苑街道开创“一平台”数据互通模式
