作者:旺仔牛叉糖 | 来源:互联网 | 2023-07-03 09:08
Elasticsearch 搜索引擎,集群效果比单机效果差好多,怎么回事呢
配置及数据描述- 服务器配置:4C8G云服务器
- 集群配置:3个节点,1个主节点,2个副本
- 数据数量:4000W
- 数据模型:4个字段,极其简单的模型
- 查询方式:term 精确查找
- ES版本:2.4.6
- 数据初始化:通过spark读取Hbase中的数据导入到ES中,4000W一次性导入
问题出现的环境背景及自己尝试过哪些方法我们测试了单机的情况、集群的情况、集群降低到单机的情况,单机升级到集群的情况,得到结论如下,但是不知道什么原因造成的。暂时不考虑并发,只考虑单次请求,测试数据,是上万个单次请求,不命中缓存的情况下统计的结果。
- 初始化数据到集群,集群的响应在速度400ms
- 初始化数据到单机,单机的相应在速度20ms
- 初始化数据到集群,在降低成单机,单机相应速度在20ms(这个过程是一个缓慢的过程,也就是说,刚降低成单机的时候,速度由原来的400ms变成150ms,过了几个小时后响应速度成50ms,到第二天的时候达到极致速度,10ms,由于中间有测试空档期,也许不需要到第二天速度已经达到极致了)
- 初始化数据到集群,降低成单机,再升级成集群,集群相应速度在20ms
在单次请求的情况下,集群性能比单机慢点是可以接受的,但是如果如我上面解释的那样,慢20倍,感觉是比较可疑的。
期望了解的内容:- 数据初始化的时候ES的存储方式是怎么处理的?
- 由集群变成单机,是否触发了ES的一些内部存储结构的变化,索引数据整理之类的,导致速度猛然提升?
拓展部分 - 想讨论了解一下ES的缓存机制在测试的过程中发现了这样几个奇怪的关于缓存的处理方式
- 单机情况下:我根据条件查询出来2条数据,响应是20ms,如果我再次使用当前条件查询,响应一直在2--4ms之间,也就是说命中了缓存导致的结果,那么我直接使用请求往里面写入一条数据,符合当前查询条件的,查询之后,依然是2--4ms之间,同时把我新写入的数据也给查出来了,同理,我删除数据也是,命中缓存,且数据实时更新。
- 集群情况下:我第一次查询速度在400ms,第二次查询速度在400ms,第三次查询速度在50ms,第四次也是50ms。猜测结论是,第三次和第四次命中了缓存,但是因为两次才命中缓存,猜测是不是第一次查询把查询结果落在了第一个机器上,数据缓存在第一个机器上;第二次查询把查询结果落在了第二个机器上,那么缓存也在第二个机器上,所以才会出现,第二次查询响应速度也很慢?