1, 什么是分布式系统的数据一致性
在分布式应用系统中,同一份数据保存在各个子系统中,当其中一份数据发生变化的时候,需要确保其他系统中的相同数据保持一致。即关联数据逻辑关系是否正确和完整,数据的一致性模型就是存储系统与数据使用者的一个约定,遵守这个约定,使用者就能得到预期的结果。
2,数据一致性的模型
常用的数据一致性模型有严格一致性,顺序一致性,因果一致性,最终一致性等等。其中严格一致性的约定为读出的数据需要时最近更新的,这个很难做到,目前比较普遍的模型为最终一致性,最终一致性的约定是,不要求读出的数据马上为最新的,但是过了某个时间窗口之后,读出的数据为最新的,
3,数据一致性的常用的应用场景
noSql的数据更新,MQ,
4,数据一致性会遇到哪些问题,
如果数据同步的过程中没发送成功或者信息丢失怎么办,如何确保发送信息的顺序?如果发送了重复发送,如何确保幂等?
如果A向B发送消息,如何确保一定发送到呢?
这个可以参考tcp 建立连接的原理,A发送一条询问消息给B,我发送了消息123,你收到了么?
如果B收到了,则给A一个反馈,我收到了你的消息,这是A可以将本地的消息删除,如果A没有收到B的回复确认,那么A会一直重复发送,这是B端需要保持幂等性,
如果A发送了3条消息给B,有几种可能的情况发生?
(1)B接受到全部数据,然后执行,
(2)B接收到了一部分数据,向A发送回执,说信息未发送完成,请继续发送,
除了确保信息发送的可靠性之外还要 确保发送的顺序性,就是这个可以在发送的消息中添加一个序列号。
5,proxs 算法是什么
就是集群中的每个server都收到了一些操作命令,如果每个server都能确保这些命令的顺序执行,那么最终的结果就是一致的,proxs算法就是提出了一个约定来保证各个操作时顺序执行的,在执行这些命令之前,对这些命令进行排序,排序由各个server投票产生。