面试题答案
一键面试关键技术点
- 分布式哈希表(DHT):用于节点发现与数据定位。通过一致性哈希算法,将数据映射到特定节点,使得每个节点负责一部分数据,减少数据定位时间与通信开销,提高Map函数处理效率。
- 日志结构合并树(LSM - Tree):在每个节点上采用LSM - Tree存储结构,它能高效处理写入操作,适合高并发场景。写入数据先记录在内存日志(MemTable)中,达到一定阈值后合并到磁盘SSTable文件,减少磁盘I/O,提升Map函数对本地数据处理的性能。
- 多版本并发控制(MVCC):为保证数据一致性,在数据更新时,采用MVCC机制。每个数据更新操作创建新版本数据,旧版本依然保留。Map函数读取数据时,根据事务时间戳获取符合条件版本数据,避免读写冲突,提升并发性能。
数据交互流程
- 数据读取
- 客户端发起读取请求到协调者节点(可随机选取或按负载均衡策略)。
- 协调者节点通过DHT确定数据所在具体存储节点。
- 存储节点利用MVCC机制,根据请求事务时间戳返回对应版本数据给协调者节点,协调者节点再返回给客户端。Map函数在本地处理时,从本地LSM - Tree结构中读取数据,若本地没有,按上述流程从其他节点获取。
- 数据写入
- 客户端发起写入请求到协调者节点。
- 协调者节点通过DHT确定需写入的存储节点。
- 存储节点先将写入操作记录在本地MemTable,同时向其他副本节点发送写入请求。
- 副本节点同样记录写入操作到MemTable,并返回确认信息。
- 所有副本节点确认后,该写入操作视为成功。当MemTable达到阈值,触发合并操作写入SSTable文件。Map函数在处理过程中产生的数据更新按此流程同步到其他节点。
故障处理机制
- 节点故障检测:采用心跳机制,节点定期向其他节点发送心跳消息。若在一定时间内未收到某节点心跳,则判定该节点故障。
- 故障节点数据恢复
- 对于存储节点故障,利用副本机制,其他副本节点继续提供服务。故障节点恢复后,从其他副本节点同步缺失数据,重新加入集群。
- 若协调者节点故障,选举新的协调者节点(可采用Raft或Paxos等一致性算法)。新协调者节点接管故障节点工作,继续处理客户端请求与数据交互。
- Map函数处理过程中的故障:Map函数在处理数据时若发生故障,记录当前处理进度到本地日志(基于LSM - Tree的日志)。故障恢复后,从日志记录点继续处理,避免重复处理已完成部分,保证数据处理的一致性与完整性。