背景
日志场景为 Elasticsearch 核心应用场景之一。其拥有行列混存、倒排索引、数值索引等丰富的数据结构,结合强大的 Elastic Stack 组件生态,为用户提供实时、端到端、一站式日志存储、分析解决方案。
日志场景的特点主要是高吞吐写入及海量存储。原生 ES 在 Shard Nothing 的分布式架构基础上提供线性扩展、资源隔离、故障隔离等特性,以满足高吞吐、海量存储需求。
日志场景已进入 PB 级时代,随着数据规模的不断增长,原生存算一体架构的成本问题也逐渐显现。为此,腾讯云 ES 自研存算分离架构,解耦计算与存储资源,充分利用云原生弹性、高可用、规模化等特点帮助用户大幅降低海量数据存储、分析成本,挖掘更多商业价值。
优化方案
提供自研云原生存算分离架构,分离存储和计算资源、消除冗余副本,实现海量资源池化、共享、弹性伸缩,大幅降低存储与计算成本。
核心设计要点包括:
1. 副本物理复制。通过对分片底层 segment 物理复制的方式消除副本写入计算资源开销,确保主从副本数据文件完全一致。
2. 混合存储引擎。整合本地存储与对象存储,数据在不同存储介质间细粒度、无感知平滑迁移、卸载,存储共享、消除冗余副本,提升数据可靠性。
3. 数据智能分层。根据数据的访问特性,智能选择性价比最高的组合层级,降低存储成本。
4. 弹性伸缩。计算、存储资源独立、高效扩缩容,索引跨集群挂载、资源灵活调度。
5. 多维度性能优化。查询裁剪、IO 并行、智能缓存等优化大幅提升查询性能。
使用方法
创建存算分离类型的索引
索引创建时指定为存算分离类型(静态参数):"index.store.type":"hybrid_storage"。
PUT/$
{
index
}
?
pretty
{
"settings"
:
{
"index.store.type"
:
"hybrid_storage"
}
}
卸载参数设置
segment 卸载控制参数:
参数名称 | 解释 | 默认值 | 是否可以动态修改 |
index.hybrid_storage.segment.retention_period | 主分片上 segment 多久卸载(以索引创建时间为起始点) | Long.MAX_VALUE h | 是 |
index.hybrid_storage.segment.replica.retention_period | 副本分片上 segment 多久卸载(同上) | 72h | 是 |
动态修改主分片上segment卸载时间为48小时,副本卸载时间为24小时(也可在创建时指定):
PUT $
{
index
}
/_settings
{
"index.hybrid_storage.segment.retention_period"
:
"48h"
,
"index.hybrid_storage.segment.replica.retention_period"
:
"24h"
}
使用限制
1. 不支持文档更新。
2. 不支持带 ID 写入。
优化效果
整体效果
1. 存储成本下降50%+。
2. 带1副本场景计算成本下降40%+。
3. 全量卸载状态的索引搬迁秒级完成,单机故障场景分片秒级恢复。
查询性能
1. 文件若已在本地缓存,性能与基于 SSD 的访问无差异。
2. 文件未缓存,完全从对象存储冷读,10亿数据点查、全文检索数秒返回。
支持版本
日志增强版。