3tb日增量200gb的es搜索面试题
第一题:分片容量设计(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 | // 使用Search After实现深度分页 |
第三题:缓存穿透(P7+设计题)
架构题:
“突发流量导致大量product_id=-1
的恶意查询,ES集群CPU飙升到95%,如何设计防御体系?”
分层架构:
***代码级防御*:
1 | // 布隆过滤器校验 |
架构题:
“设计百万QPS商品搜索系统的多级缓存方案,要求命中率>85%”
分层架构:
***关键技术点*:
- 布隆过滤器防穿透:
1 | # 初始化布隆过滤器 |
- 热点数据自动发现:
1 | # 通过慢查询日志分析热点 |
第四题: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优化能力矩阵:
避坑箴言:
永远不要在生产环境执行
forcemerge
search_after
必须配合唯一排序字段
监控比优化更重要
关于ElasticSearch,更多精彩内容请看我之前的文章:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Calico's Space!
评论