面试题答案
一键面试-
强一致性
- 数据一致性保障:任何时刻,所有节点上的数据副本都是完全一致的。读操作总能读到最新写入的数据。
- 性能权衡:为了确保强一致性,系统往往需要在多节点间进行大量的同步通信,这会导致较高的延迟和较低的系统吞吐量,因为写操作必须等待所有副本确认后才返回,读操作也需要确认读到的是最新数据。
-
弱一致性
- 数据一致性保障:不保证数据在各个副本之间实时保持一致。在更新操作后,不同节点上的数据副本可能存在短暂的不一致状态。
- 性能权衡:由于不需要等待所有副本同步完成,写操作可以较快返回,系统的性能和吞吐量相对较高。但读操作可能读到旧数据,应用程序需要处理这种不一致情况。
-
最终一致性
- 数据一致性保障:在没有新的更新操作的情况下,经过一段时间后,所有副本的数据最终会达到一致。系统只保证最终的一致性,而不是实时的一致性。
- 性能权衡:在写操作时,不需要等待所有副本同步,能快速响应,性能较好。读操作可能读到旧数据,但随着时间推移,数据会逐渐趋于一致。适用于对一致性要求不是特别高,而更注重系统性能和可用性的场景。
-
因果一致性
- 数据一致性保障:如果节点A对数据项X的更新操作因果关系上先于节点B对X的读操作,那么节点B的读操作应该能看到节点A的更新。但如果两个操作之间没有因果关系,则不保证一致性。
- 性能权衡:相对强一致性,因果一致性减少了不必要的同步,性能有所提升。因为不需要对所有操作都进行全局同步,只需要保证有因果关系的操作顺序即可,但实现上相对复杂,需要额外追踪操作的因果关系。
-
会话一致性
- 数据一致性保障:在一个客户端会话内,所有操作看到的数据是一致的。例如,客户端在一次会话中写入数据后,后续的读操作能读到最新写入的数据。但不同会话之间,数据一致性不做保证。
- 性能权衡:通过限制一致性范围到会话级别,减少了跨会话同步的开销,提升了系统性能。应用于对会话内一致性有要求,而不同会话间一致性要求较低的场景,比如一些Web应用,用户在一次会话内希望数据是连贯的。