复制延迟案例(3)-单调读

举报
JavaEdge 发表于 2022/07/31 14:56:57 2022/07/31
【摘要】 前面异步复制读异常的第二个案例,出现用户数据向后回滚的怪状。若用户从不同【从节点】多次读取,就可能这样。如图-4显示用户2345两次进行相同查询:首先查询延迟很小的从节点然后是延迟较大的从节点若用户刷新网页,而每个请求被路由到一个随机的服务器,这种情况是很有可能的。第一个查询返回最近由用户1234添加的评论,但第二个查询不返回任何东西,因为滞后的从节点还没有拉取写入的内容。效果上相比第一个查...

前面异步复制读异常的第二个案例,出现用户数据向后回滚的怪状。

若用户从不同【从节点】多次读取,就可能这样。如图-4显示用户2345两次进行相同查询:

  • 首先查询延迟很小的从节点
  • 然后是延迟较大的从节点

若用户刷新网页,而每个请求被路由到一个随机的服务器,这种情况是很有可能的。

第一个查询返回最近由用户1234添加的评论,但第二个查询不返回任何东西,因为滞后的从节点还没有拉取写入的内容。效果上相比第一个查询,第二个查询是在更早的时间点来观察系统。

  • 若第一个查询未返回任何内容,则问题不大,因为用户2345可能不知道用户1234最近添加了评论
  • 但若用户2345先看见用户1234的评论,然后又看到它消失,则对用户2345,就会感觉头大

图-4 用户首先从新副本读取,然后从旧副本读取。时光倒流。为了防止这种异常,我们需要单调的读取

单调读保证这种异常不会发生。这是比强一致性(strong consistency)弱,但比最终一致性强的保证。当读取数据时,可能会看到一个旧值;单调读取仅意味着若一个用户顺序多次读取,则不会看到时间后退,即若先前读取到较新的数据,后续读取不会得到更旧数据。

实现单调读取的一种方案:确保每个用户总从同一副本读取(不同用户可读不同副本)。如基于用户ID散列选择副本,而非随机选择副本。但若该副本失败,用户的查询将需重新路由到另一个副本。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。