面试题答案
一键面试策略一:牺牲一致性换取高可用性(AP)
- 适用场景:
- 社交平台的点赞计数:用户点赞操作频繁,对响应速度要求高。即使在某些短暂时刻,点赞数显示与实际点赞总数略有差异(比如因为网络延迟,部分点赞还未完全同步到所有节点),但只要最终能保证一致性,不影响用户体验。
- 电商网站的商品浏览量统计:在高并发的商品浏览场景下,快速显示浏览量对用户体验至关重要。偶尔出现浏览量的短暂不准确(如多显示或少显示几个浏览量),用户通常不会特别在意。
- 带来的影响:
- 积极影响:系统具有极高的可用性,能快速响应大量请求,提升用户体验,尤其适用于对响应时间敏感的业务场景。
- 消极影响:在一致性方面可能出现短暂的数据不一致情况,虽然最终会达到一致,但在过渡阶段可能出现数据偏差,对于对数据准确性要求极高的业务场景不适用。
策略二:牺牲可用性换取强一致性(CP)
- 适用场景:
- 银行转账业务:涉及资金安全,必须保证转账操作的一致性,即转出账户减少的金额与转入账户增加的金额完全匹配。即使在网络故障等情况下,也要确保数据的准确性,不允许出现金额不一致的情况。
- 证券交易系统:每一笔交易的成交价格、数量等信息必须准确无误,保证所有交易参与者看到的数据是一致的。即使出现系统故障或网络问题,也不能牺牲数据一致性来保证可用性。
- 带来的影响:
- 积极影响:数据始终保持强一致性,确保关键业务数据的准确性,适用于对数据正确性要求极高的场景。
- 消极影响:可用性降低,在网络分区等故障情况下,系统可能会停止服务以保证数据一致性,导致用户请求长时间等待甚至无法响应,影响用户体验。
策略三:读写分离与最终一致性结合
- 适用场景:
- 新闻资讯类应用:写操作(发布新闻)相对较少,读操作(浏览新闻)极其频繁。可以采用读写分离架构,写操作先写入主库,然后异步同步到从库。读操作主要从从库获取数据。在写操作后短时间内,从库可能还未完全同步数据,此时允许读操作获取到旧数据,但最终会达到一致。
- 日志记录系统:写入日志是为了记录系统运行状态和事件,读操作主要用于分析和查询历史日志。对于新写入的日志,在短时间内读操作可能获取不到最新记录,但不影响整体业务功能,最终日志数据会在各个节点达到一致。
- 带来的影响:
- 积极影响:兼顾了一定的可用性和一致性,读操作的性能得到提升,因为可以从多个从库读取数据,减轻主库压力。同时通过异步同步机制最终保证数据一致性。
- 消极影响:在数据同步过程中存在短暂的不一致窗口,对于一些对数据实时性要求极高的读操作可能不适用,可能需要额外的机制来处理这种不一致情况,如在特定场景下直接从主库读取数据。