首页 > 其他分享 >大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异

大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异

时间:2023-11-25 22:32:09浏览次数:33  
标签:验证 Easysearch 写入 索引 Elasticsearch 线程 压测 节点

最近有客户在使用 Elasticsearch 搜索服务时发现集群有掉节点,并且有 master 收集节点信息超时的日志,节点的负载也很高,不只是 data 节点,master 和协调节点的 cpu 使用率都很高,看现象集群似乎遇到了性能瓶颈。
查看了 Hot_threads, 发现大量线程被权限验证相关的类和方法占用,主要在 RBACEngine 和 AuthorizationService 两个类。并且不止协调节点和数据节点,master 节点居然也有那么多权限验证的操作?

于是怀疑是不是对权限验证的使用方式不对,在 github 上搜了下,果然发现有人遇到和我们非常类似的场景。
Improve Authorization performance in clusters with a large number of indices #67987提到有些个用户在达到数千或上万个索引的场景下,在启用安全验证进行写入数据时,服务端几乎会耗费掉所有 CPU 时间在 transport_worker 线程上进行权限验证,从而阻塞其他传入请求,
导致集群的吞吐量下降,下降的程度似乎是 2 倍到 3 倍。
有人建议升级到 7.16 或更高版本来解决这个问题。

为了确认下我们的产品是否有类似现象,我对两个服务进行了测试对比,由于硬件资源有限,只对单个节点进行了写入吞吐的压测。

测试条件:

  • -Xms3g -Xmx3g
  • 16 逻辑核 CPU
  • 启用 security 验证
  • 预先创建了 1000 个索引
  • 每个索引 1 个 shard,3 个别名

采用相同的 loadgen 脚本进行压测, 压测命令:./loadgen-linux-amd64 -config loadgen-index_0.yml -d 120 -c 10

即每秒 10 个并发请求,持续压测 120 秒,每个 bulk 请求包含写入 5000 个 doc,对单个索引进行压测。

Easysearch 1.0 写入了 6900000 条。

大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异_Elasticsearch


对比搜索服务 7.3.2 写入了 5865000 条。

大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异_Easysearch_02


压测完毕,显示 Easysearch 的吞吐大约高出了 17%。

测试时观察 Hot_threads,Easysearch 除了 lucene 的写入和 merge 线程,未发现权限验证相关热点线程,表明了启用安全验证不会对 Easysearch 的写入造成性能影响。

关于 Easysearch

大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异_Elasticsearch_03

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。

官网文档:https://www.infinilabs.com/docs/latest/easysearch

下载地址:https://www.infinilabs.com/download

标签:验证,Easysearch,写入,索引,Elasticsearch,线程,压测,节点
From: https://blog.51cto.com/u_15963473/8562580

相关文章

  • 大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异
    最近有客户在使用Elasticsearch搜索服务时发现集群有掉节点,并且有master收集节点信息超时的日志,节点的负载也很高,不只是data节点,master和协调节点的cpu使用率都很高,看现象集群似乎遇到了性能瓶颈。查看了Hot_threads,发现大量线程被权限验证相关的类和方法占用,主要在......
  • ElasticSearch之禁用交换分区
    操作系统将进程加载至内存中执行时,对于当前未使用到的内存页,可能会将相关内存页交换至硬盘上,即swap。对于性能敏感、时延敏感的应用程序比如ElasticSearch,swap特性会明显影响性能和稳定性,因此最好禁用swap特性。对于Linux环境,目前有如下手段可以禁用swap特性。临时关闭swap的方......
  • MySQL_索引
    索引的分类按数据结构:B+树,Hash,Full-text。按物理存储:聚簇(主键),二级(辅助)。字段特性:主键,唯一,普通,前缀。字段个数:单列,联合。按数据结构-B+树索引除此之外还有:Hash,Full-text回表:要查找2个B+树才能找到数据(二级索引-得到主键值-主键索引-得到数据)。覆盖索引:在二级索引的B+树......
  • Java 远程调用连接本地ElasticSearch服务并进行操作
    简单几步,结合Cpolar内网穿透工具实现Java远程连接操作本地ElasticsearchCpolar内网穿透提供了更高的安全性和隐私保护,通过使用加密通信通道,Cpolar技术可以确保数据传输的安全性,这为用户和团队提供了更可靠的保护,使他们能够放心地处理和存储敏感的工作内容。 1.Windows安......
  • ElasticSearch之cat count API
    读取当前存储的记录的数量。命令样例如下:curl-XGET"https://localhost:9200/_cat/count?v=true&pretty"--cacert$ES_HOME/config/certs/http_ca.crt-u"elastic:ohCxPH=QBE+s5=*lo7F9"执行结果输出如下:epochtimestampcount170074840914:06:490查看帮助,命......
  • ElasticSearch之配置
    ElasticSearch主要的配置文件,如下:elasticsearch.yml,ElasticSearch的相关参数。jvm.options,JVM的相关参数。log4j2.properties,日志的相关参数。默认情况下,ElasticSearch从$ES_HOME/config目录下读取上述配置文件。启动ElasticSearch时可以使用环境变量ES_PATH_CONF,指定配置......
  • ElasticSearch之cat component templates API
    命令样例如下:curl-XGET"https://localhost:9200/_cat/component_templates?v=true&pretty"--cacert$ES_HOME/config/certs/http_ca.crt-u"elastic:ohCxPH=QBE+s5=*lo7F9"执行结果输出如下:nameversionalias_countm......
  • ElasticSearch之cat anomaly detectors API
    curl-XGET"https://localhost:9200/_cat/ml/anomaly_detectors?v=true&pretty"--cacert$ES_HOME/config/certs/http_ca.crt-u"elastic:ohCxPH=QBE+s5=*lo7F9"执行结果输出如下:curl-XGET"https://localhost:9200/_cat/ml/anomaly_detectors......
  • ElasticSearch
    环境准备1.安装ElasticSearch#创建网络dockernetworkcreatees-netdockernetworkls#拉取镜像dockerpullelasticsearch:7.12.1#创建容器dockerrun-d\--namees\-e"ES_JAVA_OPTS=-Xms512m-Xmx512m"\-e"discovery.type=single-node"\-ves-d......
  • 索引
    索引相当于一个目录  书的目录、字典的目录  不使用目录的话就得从头到尾的一页一页比对查找 B+树  减少查询过程中的IO读取次数  三层的B+树可以表示上百万的数据,也就是说上百万的数据只要读取三次io;而如果没有设置索引,则需要读取上百万次io操作,成本非常高  真......