第一题:分片容量设计(P7必考)

面试官
“现有3TB商品数据,日均增长200GB,要求支持万级QPS搜索,如何设计分片策略?”

技术拆解

图片

避坑指南

错误案例:某公司直接设置number_of_shards=5导致单分片超过200GB

正确公式:主分片数 = ⌈总数据量 * 1.2 / 30GB⌉

动态扩容方案:

1
# 通过_split API扩容POST /products/_split/products_v2{  "settings": { "number_of_shards": 12 }}
  • 冷热数据分离架构:

    图片

第二题:深度分页性能压榨(P6+高频考点)

面试场景
“用户投诉翻到第50页时系统卡死,日志显示from 10000查询耗时8秒,如何优化?”

技术解析

图片

优化方案对比

图片

代码级优化

1
2
3
4
5
// 使用Search After实现深度分页
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.sort(SortBuilders.scoreSort());
sourceBuilder.sort(SortBuilders.fieldSort("_id"));
sourceBuilder.searchAfter(new Object[]{lastScore, lastId});

第三题:缓存穿透(P7+设计题)

架构题
“突发流量导致大量product_id=-1的恶意查询,ES集群CPU飙升到95%,如何设计防御体系?”

分层架构

图片

***代码级防御*

1
2
3
4
5
6
// 布隆过滤器校验
if(!bloomFilter.mightContain(queryKey)){
return emptyResult();
}
// ES层面设置索引级熔断
PUT /_cluster/settings{ "persistent": { "indices.breaker.request.limit": "60%" } }

架构题
“设计百万QPS商品搜索系统的多级缓存方案,要求命中率>85%”

分层架构

图片

***关键技术点*

  • 布隆过滤器防穿透:
1
2
3
# 初始化布隆过滤器
from pybloom_live import ScalableBloomFilterbloom = ScalableBloomFilter(initial_capacity=1000000, error_rate=0.001)
# 数据预热时添加合法Keyfor item in all_items: bloom.add(item.id)
  • 热点数据自动发现:
1
2
# 通过慢查询日志分析热点
POST /_sql?format=txt{ "query": "SELECT query, COUNT(*) as cnt FROM "logs-*" WHERE latency > 1000 GROUP BY query ORDER BY cnt DESC LIMIT 10"}

第四题:GC调优实战(P6+实战题)

监控数据

  • Young GC频率:5次/秒
  • Old GC持续时间:1.2秒/次
  • 堆内存使用率:98%

调优步骤

1.堆内存配置:

1
# jvm.options配置-Xms31g-Xmx31g-XX:+UseG1GC-XX:MaxGCPauseMillis=200

2.GC算法对比:

图片

第五题:性能诊断(P8专家题)

终极挑战
“现有集群搜索延迟突增3倍,请给出系统化的诊断路径”

诊断矩阵

图片

第六题:灾备方案(P8架构题)

设计题
“请设计跨机房ES集群架构,要求RTO<5分钟,RPO<10秒”

高可用架构

图片

核心配置

1
PUT /_ccr/follow/product_index{  "remote_cluster": "backup_cluster",  "settings": {    "index.write.wait_for_active_shards": "2"  }}

面试总结

ES优化能力矩阵

图片

避坑箴言

  1. 永远不要在生产环境执行forcemerge

  2. search_after
    

    必须配合唯一排序字段

  3. 监控比优化更重要

关于ElasticSearch,更多精彩内容请看我之前的文章:

16、如何保证Mysql数据库到ES的数据一致性

15、ElasticSearch性能调优最佳实践

14、ElasticSearch集群架构生产最佳实践

13、ElasticSearch高可用集群架构实战

12、 ES 深度分页问题及其解决方案详解