软考高级系统架构师之ElasticSearch篇

发布时间:2026/6/10 7:01:06
软考高级系统架构师之ElasticSearch篇 一、Elasticsearch 是什么一句话定义Elasticsearch 是基于 Lucene 的分布式、RESTful 风格的搜索与分析引擎。核心定位全文检索、实时数据分析、日志处理、APM 监控是 ELK/Elastic Stack 的核心组件。系统架构师学习平台点击这里进入 简单理解ES 就是一个“超级搜索引擎 大数据实时分析平台”能对 GB 到 PB 级数据进行毫秒级查询。 二、核心概念 (对比关系型数据库)Relational DBElasticsearch说明Database (数据库)Index (索引)索引是文档的容器类似库Table (表)Type (类型) 已废弃7.x 后移除统一用 _docRow (行)Document (文档)JSON 格式基本数据单元Column (列)Field (字段)支持多种数据类型Schema (约束)Mapping (映射)定义字段类型、分词器等SQLDSL (Query DSL)JSON 风格的查询语言⚙️ 分片 (Shard) 副本 (Replica)主分片 (Primary Shard)索引水平扩展的基础数据分布存储创建后数量不可变。副本分片 (Replica Shard)主分片的备份提供高可用 提升查询吞吐量。默认每个索引 1 个主分片 1 个副本分片生产建议至少 3 节点。️ 三、集群架构 写入流程 节点角色 Master 节点管理集群元数据、分片分配 Data 节点存储数据、执行搜索聚合 Coordinating 节点接收请求、路由分发、合并结果 Ingest 节点预处理文档管道 文档写入流程 (近实时 NRT)① 客户端请求任意协调节点 → ② 路由计算确定主分片 → ③ 主分片写入内存 Buffer translog → ④ 定时 refresh (默认1s) 生成可读的 Segment → ⑤ 数据变为可见实现近实时搜索。translog 用于故障恢复flush 操作将 Segment 落盘并清空 translog。 ES 不是实时搜索而是近实时 (NRT)默认 1 秒延迟。可手动 refresh 或调整 refresh_interval。 四、倒排索引 (Inverted Index) —— ES 快的根本正排索引文档 → 关键词。倒排索引关键词 → 文档列表 (Posting List)。Term Dictionary词项字典按字母排序支持二分查找。Posting List包含文档ID、词频、位置信息压缩存储 (Frame of Reference, Roaring Bitmap)。FST (Finite State Transducer)内存中高效存储 Term Index加速检索。查询时分词 → 查 Term Index → 读 Posting List → 合并结果 → 打分排序。✂️ 五、分词器 (Analyzer) 与中文搜索分词器由三部分组成Character Filter→Tokenizer→Token Filter。标准分词器 (standard)按词切分适合英文。ik 分词器 (中文)ik_smart (粗粒度) / ik_max_word (细粒度)需安装插件。pinyin 分词器支持拼音搜索。自定义分词器组合不同 filter ( lowercase, stop, synonym )。 中文搜索必须使用 ik 分词器否则会按单字切分效果极差。⚡ 六、强大的查询 DSL 聚合分析 常用查询类型term / terms精确匹配不分析 (适用于 keyword 字段)。match / match_phrase全文搜索先分词再匹配。phrase 要求顺序相同。bool query组合 must / should / must_not / filter。filter 不参与打分可缓存。range范围查询 (数值/日期)。wildcard / regexp通配符/正则性能差慎用。 聚合分析 (Aggregation) —— 替代 SQL GROUP BYMetric 聚合sum, avg, min, max, stats, cardinality (去重计数)。Bucket 聚合terms, range, date_histogram (按时间桶)。Pipeline 聚合对聚合结果再次计算如 moving average。 七、高可用与水平扩展主从选举 (Zen Discovery / 7.x 后基于 Raft)master 节点负责集群管理半数以上投票。分片自动均衡新增节点后自动迁移分片实现负载均衡。跨集群复制 (CCR)灾备或读写分离。滚动升级 / 重启通过分片恢复保证服务可用。 生产建议节点数 ≥ 3副本数 ≥ 1避免脑裂。配置 discovery.seed_hosts 和 cluster.initial_master_nodes。 八、ES 对比与选型对比维度MySQLElasticsearchMongoDB数据模型表/行/列JSON 文档JSON 文档索引方式BTree倒排索引 Doc ValuesB-Tree搜索能力LIKE 模糊效率低全文检索、相关性打分、高亮文本搜索较弱聚合分析GROUP BY 有限毫秒级聚合支持复杂统计聚合管道较慢实时性强一致近实时 (1s 延迟)强一致适用场景事务型存储搜索、日志、监控、分析海量文档存储⚙️ 九、性能优化 面试高频点 写入优化批量写入 (Bulk API)单批次 5~15 MB。增加 refresh_interval (如 30s)减少 segment 合并开销。禁用不需要的 _source 或 doc_values (仅用于索引)。调整 translog 刷盘策略 (durability: async)。 查询优化尽量使用 filter 缓存 (不计算评分)。避免深度分页 (fromsize 过大)改用 search_after 或 scroll (流式)。合理设置分片大小 (20GB~40GB 最佳)。使用 index sorting 优化排序查询。 常见面试题ES 为什么搜索快倒排索引 FST 内存优化 分片并行。ES 如何保证数据不丢translog flush 副本机制可配置同步刷盘。什么是 forcemerge手动合并 segment减少文件句柄提高查询性能。ES 深度分页问题协调节点内存压力大用 search_after 基于游标。ES 冷热分离架构设置不同节点属性热节点用 SSD冷节点用 HDD。聚合结果不精确默认使用精度 trade-off (对于 terms 聚合可设置 shard_size)。 十、ELK / Elastic Stack 生态 Logstash数据采集、过滤、传输 Kibana可视化仪表盘、探索数据 Beats轻量型采集器 (Filebeat, Metricbeat) APM应用性能监控 一句话总结ES 分布式 倒排索引 近实时 聚合分析是搜索与日志分析领域事实标准。适用场景网站搜索、日志分析、监控告警、商品推荐、舆情分析、大数据存储与检索。