ali openstore

当前dataflux产品中,日志类数据存储依赖于阿里云ES日志增强版产品,在我们一年多的使用过程中,总体服务是比较稳定的,但也有一些问题,下面是我们团队的一些使用总结。

一、数据写入

1.1 openStore 功能

openStore功能基于 ES的多级存储架构,可以将冷数据保存到对象存储,降低存储成本。当前,我们的使用场景是把 滚动出的索引都保存到openstore,最大化减少存储成本。

1.2 Indexing Service功能

由于openstore 提供了Indexing Service功能(写分离、云托管),当前我们付费客户都默认开启该功能。

在客户海量日志或是有峰值抖动场景,都可以比较好的实现写入低延迟。

当前杭州节点,只有偶发的日志量特别大时刻,可能会达到 600M 写入限流阈值,导致写入失败。

1.3 aliyun-codec插件

codec插件基于 zstd压缩算法(兼顾LZ4 和 DEFLATE 算法优点),可以对ES 索引的行存、列存、倒排3个部分进行压缩。在我们的实际使用中,大概可以在原有基础上再减少 1/3 ~ 2/3 的存储用量。

1.4 analytic-search插件

analytic-search插件 插件主要作用是,在写入时候,指定 sort fields,通过增加一定的写入消耗,增强某些查询性能。

目前,我们是把 date 字段启用为 sort fields, 但是查询性能提升不是很明显。

1.5 小结

序号优点
1openstore的多级存储,保证了滚动出索引存储在对象存储,最大化降低存储成本
2IndexService 的写分离架构,保证了写入的低延迟和对于查询的更小影响
3aliyun-codec插件,更好的压缩性能,降低了存储成本,但是 lucene实际上也支持 zstd压缩算法,ES 目前也可以通过实现接口使用 zstd压缩算法
序号缺点
1当前我们多租户场景,集群索引会非常多,保存策略、索引模版、索引mapping管理不是很稳定,杭州节点经常出现模版创建超时
2IndexService的写入限流(集群维度 600M,分片维度 30M),会限制集群的写入性能, 或者限制不合理
3IndexService的写入分离,有时候会出现数据实际写入,但是查询不到问题

二、数据查询

2.1 概述

阿里云ES日志增强版本,查询主要还是基于原生ES的。使用过程中,当前我们遇到的问题主要还是,openstore下的冷节点,搜索性能不高(相比较热节点),当多个查询涉及同一个冷节点,经常会导致节点CPU 飙升,查询超时甚至节点崩溃重启。

2.2 小结

序号优点
1IndexService的读写分离架构,保证了大查询、慢查询对于写入性能的低影响
2阿里云ES内核中,存在一些查询优化,但是这一部分对于客户透明
序号缺点
1查询冷节点数据,速度慢
2冷数据节点可能由于多个慢查询,导致节点崩溃重启

三、运维

3.1 资源管理

当前使用阿里云ES,版本升级基本可以做到平滑升级,集群添加新节点、升级原有配置等都比较方便,但是,升配后无法降配

3.2 集群监控

当前,阿里云ES自带的监控日志和监控指标,可以较好的弥补kibana monitor(在集群有问题、多索引场景下打不开的问题),但是当前的监控日志保存天数不可选(默认7天),遇到问题也无法查看服务器日志

3.3 技术支持

使用阿里云ES,技术支持有保证。

四、ES原生问题

针对我们的多租户场景,ES原生的架构有下面问题:

序号问题描述解决思路
1不支持超多分片目前官方建议是单个节点1000个分片,我们的使用场景(单个工作空间,10多种数据类型,占用10多个分片),即使数据量不大,也可能导致集群性能瓶颈;多集群
2单索引不支持超多字段当前ES 单个索引建议1000个字段以内,当采集数据出现非常多字段,会触发严重的写入延迟
3单索引不支持字段类型变更由于ES 每个索引都有固定的mapping(Scheme), 当前采集数据字段类型变更,会导致无法写入,只能滚动出新索引
Creative Commons License Flag Counter