搜索架构

搜索架构简介

现代搜索引擎架构通常采用分布式系统设计,以处理海量数据和高并发查询。下面介绍一种典型的搜索引擎分层架构。

整体架构图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
                     query                 result
↓ ↑
+---------------+
| Aggregator |
+---------------+
/ \
query↓ ↑result query↓ ↑result
+--------+ +--------+
| proxy | | proxy |
+--------+ +--------+
↑ ↑
↓ ↓
+--------+ +--------+
↗ | merger | ↖ ↗ | merger | ↖
↗↙ +--------+ ↘↗↙ +--------+ ↘
+--------+ +--------+ +--------+ +--------+
|Realtime| |Realtime| ... |Realtime| |Realtime| ...
+--------+ +--------+ +--------+ +--------+
+--------+ +--------+ +--------+ +--------+
|Realtime| |Realtime| ... |Realtime| |Realtime| ...
+--------+ +--------+ +--------+ +--------+
↑ ↑
+--------+ +--------+
| builder| | builder|
+--------+ +--------+

架构组件详解

1. Aggregator(聚合器)

  • 功能:接收用户查询请求,并将结果返回给用户
  • 职责
    • 负责接收并解析用户查询
    • 将查询分发到多个查询代理(Proxy)
    • 合并和排序从各代理返回的结果
    • 应用全局排序、过滤和打散策略
    • 返回最终结果给用户
  • 特点
    • 通常部署多个实例以确保高可用性
    • 包含查询解析、结果合并和排序等核心逻辑

2. Proxy(查询代理)

  • 功能:转发查询并聚合下层结果
  • 职责
    • 接收来自Aggregator的查询请求
    • 转发查询到适当的Merger节点
    • 收集并初步合并来自Merger的结果
    • 执行局部过滤和排序
  • 特点
    • 实现查询负载均衡
    • 提供服务发现和路由功能
    • 可能包含缓存层以减少重复查询

3. Merger(合并器)

  • 功能:合并来自多个实时服务器的结果
  • 职责
    • 将查询分发到多个Realtime服务器
    • 合并多个Realtime服务器返回的结果
    • 执行初步的相关性排序和过滤
    • 应用本地打散和去重策略
  • 特点
    • 通常按照数据分片(Shard)组织
    • 处理查询的并行执行和结果合并

4. Realtime(实时服务器)

  • 功能:存储索引数据并提供实时搜索能力
  • 职责
    • 维护倒排索引和正排索引数据
    • 执行实际的查询匹配和评分
    • 返回匹配查询的原始结果集
  • 特点
    • 针对搜索查询进行了高度优化
    • 可能包含多个副本以提高可用性和查询吞吐量
    • 定期从Builder接收索引更新

5. Builder(构建器)

  • 功能:构建和更新索引数据
  • 职责
    • 从数据源抓取和处理原始数据
    • 构建倒排索引和正排索引
    • 将新建索引分发到Realtime服务器
  • 特点
    • 离线处理大量数据
    • 执行文档解析、分词和索引构建
    • 管理索引的生命周期和版本

查询流程

  1. 用户发送查询请求到Aggregator
  2. Aggregator解析查询并分发到多个Proxy节点
  3. 每个Proxy将查询转发到对应的Merger节点
  4. Merger将查询分发到多个Realtime服务器
  5. Realtime服务器执行实际的查询匹配并返回结果
  6. Merger合并Realtime服务器返回的结果并进行初步排序
  7. Proxy收集并合并Merger的结果
  8. Aggregator合并所有Proxy返回的结果,执行最终排序和打散
  9. 将最终结果返回给用户

数据流程

  1. Builder从各种数据源收集和处理数据
  2. Builder构建索引并将索引分发到Realtime服务器集群
  3. Realtime服务器加载索引并提供查询服务
  4. 索引更新时,新版本索引首先分发到部分Realtime服务器
  5. 在验证新索引无误后,更新扩展到所有Realtime服务器

这种分层架构设计使搜索引擎能够处理海量数据和高并发查询,同时保持高可用性和可扩展性。通过分离索引构建和查询服务,系统可以在不影响用户体验的情况下持续更新索引数据。

Searcher

Merger


搜索架构
https://summerchengh.github.io/tech-blog/2025/04/09/搜索-架构/
Author
Your Name
Posted on
April 9, 2025
Licensed under