面试题答案
一键面试1. 同步复制
- 基本原理:当主分片接收到写操作时,它会等待所有配置的副分片成功复制该操作后,才向客户端返回成功响应。只有在所有副分片都确认已成功复制数据的情况下,此次写操作才被视为完成。这种方式确保了副分片和主分片的数据在每次写操作后都保持一致。例如,写入一条新文档时,主分片会将文档发送给所有副分片,只有当所有副分片都确认接收并存储成功,主分片才告知客户端写入成功。
2. 异步复制 + 定期检查和修复
- 基本原理:
- 异步复制:主分片在接收到写操作后,立即向客户端返回成功响应,同时将写操作异步发送给副分片。这样可以提高写入性能,因为客户端无需等待副分片复制完成。例如,写入新数据时,主分片马上告知客户端写入成功,同时在后台将数据复制给副分片。
- 定期检查和修复:Elasticsearch 会定期检查主分片和副分片的数据状态。通过版本号、校验和等机制来识别数据是否一致。如果发现不一致,例如副分片的数据版本比主分片旧,Elasticsearch 会自动从主分片重新复制数据到副分片,以修复数据差异,从而保证最终一致性。
3. 版本控制
- 基本原理:Elasticsearch 为每个文档分配一个版本号。每次文档发生变更(如创建、更新、删除),版本号都会递增。主分片在执行写操作时,会将新的版本号与文档一起发送给副分片。副分片在接收数据时,会检查版本号。如果版本号符合预期(即比当前副分片上的文档版本号高),则接受该数据并更新本地副本;如果版本号不一致(如副分片版本号高于主分片发送过来的版本号,这可能是由于网络问题等导致某些操作在副分片先执行),副分片会拒绝该数据,等待主分片进一步处理。通过这种方式,利用版本号确保副分片和主分片上的数据版本一致,进而保证数据内容的一致性。