面试题答案
一键面试1. 客户端发送请求
客户端通过RESTful API将写入文档的请求发送到Elasticsearch集群中的某个节点(通常是负载均衡器分配的一个协调节点)。
2. 协调节点处理请求
- 作用:接收客户端请求,负责路由请求到合适的主分片所在节点,并处理返回结果。
- 流程:协调节点根据文档的ID,通过哈希算法计算出该文档应该存储在哪个分片上,然后将请求转发到对应的主分片所在节点。
3. 主分片所在节点处理请求
- 作用:负责实际的文档写入操作。
- 流程:
- 写入内存:主分片所在节点接收到请求后,首先将文档写入到内存中的写入缓冲区(write buffer)。
- 写入文件系统缓存:同时,为了保证数据的持久性,文档会被追加写入到事务日志(translog)中。事务日志存储在文件系统缓存(page cache)中,这样可以快速写入。
4. 数据复制到副本分片
- 作用:保证数据的高可用性和冗余。
- 流程:主分片写入成功后,主分片所在节点会将文档复制到该分片的所有副本分片所在节点。副本分片接收到数据后,同样先写入内存中的写入缓冲区,再写入事务日志。
5. 刷新操作(可选但重要)
- 作用:使数据可被搜索。
- 流程:默认情况下,写入缓冲区中的数据每1秒会被刷新(flush)到一个新的段(segment)文件中,并写入文件系统,同时清空写入缓冲区。这个过程也被称为refresh。刷新后,新的数据段会被打开,使得文档可以被搜索。
6. 提交操作
- 作用:确保数据的持久性和一致性。
- 流程:当事务日志积累到一定大小(默认为512MB)或者每隔30分钟,会触发一次提交(commit)操作。提交操作会将文件系统缓存中的事务日志持久化到磁盘,并生成一个新的提交点(commit point)文件,记录当前已提交的所有段文件。同时,清空事务日志,开始记录新的操作。