热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

elasticsearch集群效果比单机效果慢几个数量级,怎么回事呢

Elasticsearch搜索引擎,集群效果比单机效果差好多,怎么回事呢配置及数据描述服

Elasticsearch 搜索引擎,集群效果比单机效果差好多,怎么回事呢


配置及数据描述
  1. 服务器配置:4C8G云服务器

  2. 集群配置:3个节点,1个主节点,2个副本

  3. 数据数量:4000W

  4. 数据模型:4个字段,极其简单的模型

  5. 查询方式:term 精确查找

  6. ES版本:2.4.6

  7. 数据初始化:通过spark读取Hbase中的数据导入到ES中,4000W一次性导入

问题出现的环境背景及自己尝试过哪些方法

我们测试了单机的情况、集群的情况、集群降低到单机的情况,单机升级到集群的情况,得到结论如下,但是不知道什么原因造成的。暂时不考虑并发,只考虑单次请求,测试数据,是上万个单次请求,不命中缓存的情况下统计的结果。


  • 初始化数据到集群,集群的响应在速度400ms

  • 初始化数据到单机,单机的相应在速度20ms

  • 初始化数据到集群,在降低成单机,单机相应速度在20ms(这个过程是一个缓慢的过程,也就是说,刚降低成单机的时候,速度由原来的400ms变成150ms,过了几个小时后响应速度成50ms,到第二天的时候达到极致速度,10ms,由于中间有测试空档期,也许不需要到第二天速度已经达到极致了)

  • 初始化数据到集群,降低成单机,再升级成集群,集群相应速度在20ms

在单次请求的情况下,集群性能比单机慢点是可以接受的,但是如果如我上面解释的那样,慢20倍,感觉是比较可疑的。


期望了解的内容:
  1. 数据初始化的时候ES的存储方式是怎么处理的?

  2. 由集群变成单机,是否触发了ES的一些内部存储结构的变化,索引数据整理之类的,导致速度猛然提升?

拓展部分 - 想讨论了解一下ES的缓存机制

在测试的过程中发现了这样几个奇怪的关于缓存的处理方式



    1. 单机情况下:我根据条件查询出来2条数据,响应是20ms,如果我再次使用当前条件查询,响应一直在2--4ms之间,也就是说命中了缓存导致的结果,那么我直接使用请求往里面写入一条数据,符合当前查询条件的,查询之后,依然是2--4ms之间,同时把我新写入的数据也给查出来了,同理,我删除数据也是,命中缓存,且数据实时更新。


    1. 集群情况下:我第一次查询速度在400ms,第二次查询速度在400ms,第三次查询速度在50ms,第四次也是50ms。猜测结论是,第三次和第四次命中了缓存,但是因为两次才命中缓存,猜测是不是第一次查询把查询结果落在了第一个机器上,数据缓存在第一个机器上;第二次查询把查询结果落在了第二个机器上,那么缓存也在第二个机器上,所以才会出现,第二次查询响应速度也很慢?


    推荐阅读
    author-avatar
    旺仔牛叉糖
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有