Index 模块
Start Indexer
启动流程分为三个阶段:加载配置 → 构建组件 → 启动运行。
1. 加载配置
KVBlockIndexConfig:配置索引后端(LRU Cache、Redis 等)KVBlockScorerConfig:配置前缀匹配打分策略(CPU / GPU 权重分配)
2. 初始化基础组件
- 分词器配置加载
- 创建 Token 数据库:负责将输入 token 切分并转换为 hash 值
3. 构建 KVCacheIndexer
KVCacheIndexer 是核心索引对象,由以下组件组合而成:
kvblock.NewIndex— 索引容器,底层基于 LRU,提供 Add、Delete、Query 三个基本操作kvblock.NewTracedIndex— Index 的 Trace 包装器,通过 OpenTelemetry 记录操作指标并上报kvblock.NewKVBlockScorer— 前缀匹配打分器,根据请求的前缀为候选 Pod 计算分数kvblock.NewTracedScorer— Scorer 的 Trace 包装器,记录打分过程指标tokenizerPool— 分词器连接池,通过NewUdsTokenizer创建
4. 启动运行
- 启动 goroutine indexer,初始化
tokenizersPool runPrompts:将 prompt 写入索引后执行查询
Offline 主流程
Offline 模式是一个事件驱动的索引更新流程。
1. 创建组件
- 创建 KV Cache Indexer(同上)
- 创建 Events Pool(事件缓冲池)
2. 启动 Events Pool
Events Pool 是整个离线更新的核心,工作流程如下:
- 监听 ZMQ 消息,接收
BlockStored、BlockRemoved等事件 - 解析事件内容,提取 KV Block 信息
- 根据事件类型自动调用
Index.Add()(写入索引)或Index.Evict()(驱逐索引)
3. 启动本地 Subscriber
- 订阅 ZMQ 消息队列,将收到的事件转发给 Events Pool
4. 模拟 vLLM 引擎(Publisher)
- 创建 Publisher,模拟 vLLM 引擎发送 KV Block 事件
- 执行一次初始查询(此时索引为空,验证空查询行为)
- Publisher 发送
BlockStored/BlockRemoved事件,触发索引更新 - 等待事件处理完成,退出