• ES主集群的优化参考点


    因为流量比较大, 导致ES线程数飙高,cpu直往上窜,查询耗时增加,并传导给所有调用方,导致更大范围的延时。如何解决这个问题呢?

    • ES负载不合理,热点问题严重。ES主集群一共有几十个节点,有的节点上部署的shard数偏多,有的节点部署的shard数很少,导致某些服务器的负载很高,每到流量高峰期,就经常预警。
    • ES线程池的大小设置得太高,导致cpu飙高。我们知道,设置ES的threadpool,一般将线程数设置为服务器的cpu核数,即使ES的查询压力很大,需要增加线程数,那最好也不要超过“cpu core * 3 / 2 + 1”。如果设置的线程数过多,会导致cpu在多个线程上下文之间频繁来回切换,浪费大量cpu资源。

    • shard分配的内存太大,100g,导致查询变慢。我们知道,ES的索引要合理分配shard数,要控制一个shard的内存大小在50g以内。如果一个shard分配的内存过大,会导致查询变慢,耗时增加,严重拖累性能。

    • string类型的字段设置了双字段,既是text,又是keyword,导致存储容量增大了一倍。会员信息的查询不需要关联度打分,直接根据keyword查询就行,所以完全可以将text字段去掉,这样就能节省很大一部分存储空间,提升性能。

    • ES查询,使用filter,不使用query。因为query会对搜索结果进行相关度算分,比较耗cpu,而会员信息的查询是不需要算分的,这部分的性能损耗完全可以避免。

    • 节约ES算力,将ES的搜索结果排序放在会员系统的jvm内存中进行。

    • 增加routing key。我们知道,一次ES查询,会将请求分发给所有shard,等所有shard返回结果后再聚合数据,最后将结果返回给调用方。如果我们事先已经知道数据分布在哪些shard上,那么就可以减少大量不必要的请求,提升查询性能。

  • 相关阅读:
    2022年度嵌入式C语言面试题库(含答案)
    初识网络原理
    Spring基础(十):AOP概念和原理
    chrome插件:instagram粉丝列表追踪
    锚框_的标定
    山东大学项目实训(二十七)—— 微信小程序开发总结,一年时间真的可以改变一个人很多
    初步了解华为的MTL(市场到线索)流程的基本概念和来龙去脉
    SpringCloud+SpringBoot b2b2c 电子商务平台
    谷贱伤农,薪贱伤码农!
    SpringBoot中HttpClient的使用
  • 原文地址:https://blog.csdn.net/beihenanfei/article/details/132585464