搜索架构
搜索架构简介
现代搜索引擎架构通常采用分布式系统设计,以处理海量数据和高并发查询。下面介绍一种典型的搜索引擎分层架构。
整体架构图
1 | |
架构组件详解
1. Aggregator(聚合器)
- 功能:接收用户查询请求,并将结果返回给用户
- 职责:
- 负责接收并解析用户查询
- 将查询分发到多个查询代理(Proxy)
- 合并和排序从各代理返回的结果
- 应用全局排序、过滤和打散策略
- 返回最终结果给用户
- 特点:
- 通常部署多个实例以确保高可用性
- 包含查询解析、结果合并和排序等核心逻辑
2. Proxy(查询代理)
- 功能:转发查询并聚合下层结果
- 职责:
- 接收来自Aggregator的查询请求
- 转发查询到适当的Merger节点
- 收集并初步合并来自Merger的结果
- 执行局部过滤和排序
- 特点:
- 实现查询负载均衡
- 提供服务发现和路由功能
- 可能包含缓存层以减少重复查询
3. Merger(合并器)
- 功能:合并来自多个实时服务器的结果
- 职责:
- 将查询分发到多个Realtime服务器
- 合并多个Realtime服务器返回的结果
- 执行初步的相关性排序和过滤
- 应用本地打散和去重策略
- 特点:
- 通常按照数据分片(Shard)组织
- 处理查询的并行执行和结果合并
4. Realtime(实时服务器)
- 功能:存储索引数据并提供实时搜索能力
- 职责:
- 维护倒排索引和正排索引数据
- 执行实际的查询匹配和评分
- 返回匹配查询的原始结果集
- 特点:
- 针对搜索查询进行了高度优化
- 可能包含多个副本以提高可用性和查询吞吐量
- 定期从Builder接收索引更新
5. Builder(构建器)
- 功能:构建和更新索引数据
- 职责:
- 从数据源抓取和处理原始数据
- 构建倒排索引和正排索引
- 将新建索引分发到Realtime服务器
- 特点:
- 离线处理大量数据
- 执行文档解析、分词和索引构建
- 管理索引的生命周期和版本
查询流程
- 用户发送查询请求到Aggregator
- Aggregator解析查询并分发到多个Proxy节点
- 每个Proxy将查询转发到对应的Merger节点
- Merger将查询分发到多个Realtime服务器
- Realtime服务器执行实际的查询匹配并返回结果
- Merger合并Realtime服务器返回的结果并进行初步排序
- Proxy收集并合并Merger的结果
- Aggregator合并所有Proxy返回的结果,执行最终排序和打散
- 将最终结果返回给用户
数据流程
- Builder从各种数据源收集和处理数据
- Builder构建索引并将索引分发到Realtime服务器集群
- Realtime服务器加载索引并提供查询服务
- 索引更新时,新版本索引首先分发到部分Realtime服务器
- 在验证新索引无误后,更新扩展到所有Realtime服务器
这种分层架构设计使搜索引擎能够处理海量数据和高并发查询,同时保持高可用性和可扩展性。通过分离索引构建和查询服务,系统可以在不影响用户体验的情况下持续更新索引数据。
Searcher
Merger
搜索架构
https://summerchengh.github.io/tech-blog/2025/04/09/搜索-架构/