3. Elasticsearch 读流程
Elasticsearch 使用主备模型。主备份模型的一个优点是,主分片和其所有副本分片存有相同的数据。因此,一个同步副本就足以满足读请求。
Elasticsearch 中的读取可以直接使用 document ID,也可以是非常复杂的搜索,包含复杂的聚合,这个操作会占用大量CPU资源。
当节点接收到读请求时,该节点负责将其转发给包含相关分片的节点、整合所有分片的返回值并响应客户端(类似于一个MapReduce)。我们将该节点称为请求的协调节点。基本流程如下:
- 将读请求解析到相关分片。注意,由于大多数搜索将被发送到一个或多个索引,因此它们通常需要从多个分片中读取,每个分片表示数据的不同子集;
- 在分片复制组中选择每个相关分片的活动副本。这可以是主分片,也可以是副本分片。默认情况下,Elasticsearch只是在副本分片之间进行循环;
- 将分片级别的读请求发送到所选副本;
- 整合结果并做出响应。注意,在get by ID查找的情况下,只有一个分片是相关的,可以跳过这一步;