美文网首页程序员
一致性设计的思考

一致性设计的思考

作者: 2016晓 | 来源:发表于2022-10-31 18:39 被阅读0次

一致性指数据的多个副本内容保持相同。一致性的处理在日常的开发中无处不在,为了适当的处理,需要想明白不一致是怎么产生的。
副本的由来:
1、获取数据后,就会产生副本。
不论你是查数据库、查缓存、rpc调用。你拿到的值已经是副本了。
2、分布式事务的状态,在多个系统或节点中作为了副本。
3、数据进行主从备份。

进行一致性相关进行设计时,需要结合业务特点,将数据的一致性问题解决至满足业务即可。
读取到历史版本的数据内容,并不是错误,只表示数据曾经的一个时刻为此值。对于查询&展示的逻辑,常常不需要额外处理。但如果查询到数据,决定了后续操作,并会对数据修改,就要谨慎处理了。

接下来观察产生不一致的行为特点,并列举一些常用的处理方式:
1、并发下,对数据及副本的读写,有交叉
串行执行;
对读取实时性要求高的查询,请求主库
加锁
只操作单个redis Key(一种特殊的用法:将需要操作的标识信息,追加到一个list值中,操作就排好执行次序了)
限制redis Key使用相同slot,并编写lua原子程序
局部串行;
开启数据库事务(注意:常用的可重复读隔离级别下,快照读切换为当前读,有可能幻读。有需要,可强制当前读(for update));
2、对数据及副本的写操作,不完整
不重要的操作靠后执行;
把容易失败的操作,最先执行,通知型的操作、有过期时间的缓存,最后处理。
双节点,争抢执行
触发其它服务节点(mq/rpc),与自己一同执行。谁争抢到了谁执行
可靠消息;
在业务数据库中,创建一个事务消息表,将发送消息的动作,作为数据的写入,与事务一同执行。并在执行后,进行补偿发送。(消息表的数据可能删除,也可能修改状态后保留)
由mq服务提供事务消息的能力,在客户端与服务端之间进行prepare/commit/rollback。服务端会在客户端长时间无动作时,主动询问事务状态。
由于mq的异步、至少消费一次的特点,可能会加重交叉读写的问题,需要处理好次序、幂等。
二次写+恢复任务
在各个副本预写(分布式存储系统中,需要半数以上。准事务逻辑,需要全部副本,只两方时,只由发起方维护预写即可),预写完成后标记完成(业务可能有失败状态)。恢复任务定时捞取预写状态数据,幂等重试更新其它副本or查询其它副本,更新为完成或失败。

相关文章

  • 一致性设计的思考

    一致性指数据的多个副本内容保持相同。一致性的处理在日常的开发中无处不在,为了适当的处理,需要想明白不一致是怎么产生...

  • 为什么你的设计作品看上去不够专业?

    设计中的一致性会在无形之中使你的设计效果更加优秀,也更易于用户使用。今天这篇教程免费提供了7个提升设计一致性的小贴...

  • 设计一致性原则

    设计一致性概述 一致性是产品设计最为基础且重要的原则之一,一般主要指品的设计理念、品牌形象、逻辑结构、操作交互以及...

  • session一致性保证

    目录 一致性保证 一致性保证 保证session一致性的架构设计常见方法: session同步法:多台web-se...

  • 交互设计一致性

    什么是一致性? 一致性是我们对事物的连续认知,一致性是感官或习惯上的统一。 一致性也是产品设计最基础的原则,因为它...

  • 界面设计原则与技巧!

    文/刘幼民 ①一致性原则。在界面设计中,一致性原则通常包含窗体大小、形状、色彩的一致性,文本框、命令按钮等界面元素...

  • 分布式一致性算法—Raft

    为何要设计Raft Raft是斯坦福大学在2014年提出的一种新的一致性协议。作者表示之所以要设计一种全新的一致性...

  • Paxos沉思录

    最近在思考一致性的问题,网上有很多这方面的资料了,这里谈谈我对一致性以及paxos算法的理解。 1 一致性 什么是...

  • 教学目标设计,没你想得那么容易 ;教学目标达成,想说爱你不容

    在听上海市崇明学区教育学院金香教授讲座《小学数学的目标设计与教学评一致性的思考》中,金教授提到这样一句:"...

  • 理解一致性哈希算法

    理解一致性哈希算法 整理自: codinglabs cywosp 版权归原作者所有 哈希算法设计原则 一致性has...

网友评论

    本文标题:一致性设计的思考

    本文链接:https://www.haomeiwen.com/subject/pesltdtx.html