面试题答案
一键面试一致性与可用性权衡分析
- 一致性优先
- 分析:在一些对数据准确性要求极高的场景,如金融交易,少量的可用性牺牲可接受以确保数据完全一致。2PC中,协调者会严格按照协议步骤,等待所有参与者都准备好(PREPARE阶段),并且都能成功提交(COMMIT阶段)才确认事务完成。若有一个参与者失败,整个事务回滚。
- 挑战:可能因部分节点故障或网络问题,导致整个事务长时间等待,降低可用性。例如在多区域部署中,跨区域网络延迟可能使等待时间过长。
- 可用性优先
- 分析:对于一些对实时性展示要求高,对数据一致性可容忍一定延迟的场景,如社交平台的动态展示。在2PC中,可以适当放宽对一致性的严格要求。例如在PREPARE阶段,如果大部分参与者准备好,可尝试进行COMMIT,对于少数未响应的节点,后续再进行补偿操作。
- 挑战:可能出现数据不一致情况,例如部分节点提交成功,部分因网络分区未收到COMMIT指令而回滚。
不同业务场景下的倾向选择及技术实现手段
- 金融交易场景(一致性优先)
- 倾向选择:严格保证事务一致性,即使系统可用性在短时间内降低。
- 技术实现手段:
- 重试机制:如果在2PC过程中某个参与者出现短暂故障或网络问题,协调者可进行多次重试,确保该参与者能正常响应。例如,在一定时间间隔内重试3 - 5次。
- 同步复制:在混合存储类型的云数据库中,采用同步复制方式确保各存储节点数据一致。例如,主数据库向从数据库同步数据时,主库等待从库确认写入成功后才确认事务完成。
- 社交平台动态展示场景(可用性优先)
- 倾向选择:优先保证系统的高可用性,允许数据在短期内存在一定程度的不一致。
- 技术实现手段:
- 异步补偿:在2PC的COMMIT阶段,如果部分节点未响应,先对响应成功的节点进行提交,对于未响应节点,后续通过异步任务进行补偿操作。例如,使用消息队列记录未完成的事务,待故障节点恢复后重新发起提交操作。
- 缓存策略:利用缓存(如Redis)存储动态数据,即使数据库部分节点出现问题,缓存中的数据仍可及时展示给用户,保证可用性。例如,先从缓存读取动态数据展示,后台异步更新数据库并同步缓存。