关于分布式系统的数据一致性问题(三)
在我的博文里面 关于分布式系统的数据一致性问题(二) 里面主要介绍了数据分布的情况下保证一致性的情况,在第二篇文章里面,我这里提出了三个问题
- 订单系统调用支付系统支付订单,支付成功,但是返回给订单系统数据超时,订单还是I(初始状态),但是此时会员帐户余额100,会员肯定会马上找京东骂京东,为啥不给老子发货,我都付钱了
- 订单系统调用支付系统成功,状态也已经更新成功,但是通知仓库发货失败,这个时候订单是P(已支付)状态,此时会员帐户余额是100,但是仓库不会发货。会员也要骂京东。
- 订单系统调用支付系统成功,状态也已经更新成功,然后通知仓库发货,仓库告诉订单系统,没有货了。这个时候数据状态和第二种情况一样。
重点分析解决了第一个的问题以及相应的方案,发现在数据分布的环境下,很难绝对的保证数据一致性(任何一段区间),但是有办法通过一种补偿机制,最终保证数据的一致性。
在下面在分析一下第二个问题
- 订单系统调用支付系统成功,状态也已经更新成功,但是通知仓库发货失败,这个时候订单是P(已支付)状态,此时会员帐户余额是100,但是仓库不会发货。会员也要骂京东。
通过在上一篇文章里面分析过,这个相对来说是比较简单的,我可以采取重试机制,如果发现通知仓库发货失败,就一致重试,
这里面有两种方式:
1 异步方式:通过类似MQ(消息通知)的机制,这个是异步的通知
2 同步调用:类似于远程过程调用
对于同步的调用的方式,比较简单,我们能够及时获取结果,对于异步的通知,就必须采用请求,应答的方式进行,这一点在(关于分布式系统的数据一致性问题(一))里面有介绍。这里面就不再阐述。
来看看第三个问题
- 订单系统调用支付系统成功,状态也已经更新成功,然后通知仓库发货,仓库告诉订单系统,没有货了。这个时候数据状态和第二种情况一样。
我觉得这是一个很有意思的问题,我们还是考虑几种解决的方案
1 在会员下单的时刻,就告诉仓库,我要你把货物留下来,
2 在会员支付订单时候,在支付之前检查仓库有没有货,如果没有货,就告知会员木有货物了
3 如果会员支付成功,这个时候没有货了,就会退款给用户或者等待有货的时候在发货
正常情况,京东的仓库一般都是有货的,所以影响到的会员很少,但是在秒杀和营销的时候,这个时候就不一定了,我们考虑假设仓库有10台iphone
如果采用第一种方案,
1 在会员下单的时候,相当于库存就-1,那么用户恶意拍下来,没有去支付,就影响到了其他用户的购买。京东可以设置一个订单超时时间,如果这段时间内没有支付,就自动取消订单
2 在会员支付之前,检查仓库有货,这种方案了,对于用户体验不好,但是对于京东比较好,至少我东西都卖出去了。那些没有及时付款的用户,只能投诉了京东无故取消订单
3 第三种方案,这个方案体验更不好,而且用户感觉受到京东欺诈,但是对于京东来说,比第二种方案更有益,毕竟我还可以多卖出一点东西。
个人觉得,京东应该会采用第二种或者第三种方式来处理这类情况,我在微博上搜索了 “京东 无故取消订单”,发现果真和我预料的处理方式。不过至于这里的无故取消是不是技术上的原因我不知道,如果真的是技术上的原因,我觉得京东可以采用不同的处理方案。对于秒杀和促销商品,可以考虑第一种方案,大多数人都会直接付款,毕竟便宜啊,如果用户抢不到便宜的东西,抱怨当然很大了。这样可以照顾大多数用户的体验。对于一般的订单,可以采用第二种或者第三种方式,这种情况下,发生付款之后仓库没有货的情况会比较少,并且就算发生了,用户也会觉得无所谓,大不了退钱吗,这样就可以实现自己的利益最大化而最低程度的减少用户体验。
而铁道部在这个问题上,采用的是第一种方案,为什么和京东不一样,就是因为用户体验,如果用户把票都买了,你告诉我木有票了,旅客会杀人的。哈哈,不过铁道部不担心票卖不出去,第一种方案对他影响没有什么。
说了这么多,就是说 分布式环境下(数据分布)要任何时刻保证数据一致性是不可能的,只能采取妥协的方案来保证数据最终一致性。这个也就是著名的CAP定理。
转载于:https://www.cnblogs.com/aigongsi/archive/2012/09/25/2701396.html
关于分布式系统的数据一致性问题(三)相关推荐
- 关于分布式系统的数据一致性问题(一)
最近写了一个关于 铁道部购票系统的若干文章 铁道部新客票系统的设计(一) 铁道部新客票系统的设计(二) 铁道部新客票系统的设计(三) 正好遇到一个博友,咨询了一个问题,这个问题正好可以作为分布式系统的 ...
- 不懂这些高并发分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构...
互联网行业是大势所趋,从招聘工资水平即可看出,那么如何提升自我技能,满足互联网行业技能要求?需要以目标为导向,进行技能提升,本文主要针对高并发分布式系统设计.架构(数据一致性)做了分析,祝各位早日走上 ...
- 结合现有分布式系统的数据一致性思考
背景 我们项目本身分成了多套系统,但数据上有要求一致性的地方(比如订单状态,通俗点讲就是系统A更新了订单状态为状态一,那么系统B也需要把相同订单的订单状态更新成状态一,这样可以让我们不管是读系统A还是 ...
- 分布式系统架构系列讲解三(分布式一致性 3):共识问题
分布式系统架构系列讲解 - 总目录 共识问题是分布式领域最复杂的一个容错模型,只有搞懂它,你才能掌握常用的各种共识算法,才能在设计分布式系统时,根据业务场景的特点选择适合的算法. 那么,什么是共识问题 ...
- 车神(车江毅)的分布式事务资料链接汇总
<!DOCTYPE NETSCAPE-Bookmark-file-1> <META HTTP-EQUIV="Content-Type" CONTENT=" ...
- 分布式系统数据一致性解决方案
2019独角兽企业重金招聘Python工程师标准>>> 1.微服务架构的数据一致性问题 以电商平台为例,当用户下单并支付后,系统需要修改订单的状态并且增加用户积分.由于系统采用的是微 ...
- 肝了3版才满意:分布式系统之CAP理论,我们对它的理解和误解
引言 CAP 理论,相信很多人都听过,它是指: 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance) ...
- redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)...
欢迎关注头条号:石杉的架构笔记 周一至周五早八点半!精品技术文章准时送上!!! 目录 一.前情提示 二.什么是数据一致性? 三.一个数据计算链路的梳理 四.数据计算链路的bug 五.电商库存数据的不一 ...
- Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...
最新文章
- 创业失败后,我决定开源所有产品代码
- caffe-cuda测试
- python中遍历字典判断是否存在_python中如何判断值在不在字典中
- xshell报编码问题时可以修改xshell编码
- Trade Stages - The Trade Path
- 3.1_ 1_ 内存的基础知识
- 如何成功构建大规模 Web 搜索引擎架构?
- python3.4新特性_Python3中的新特性(1)——新的语言特性
- ajax教程 异步刷新验证,Ajax实现异步刷新验证用户名是否已存在的具体方法
- Spring Cloud 关于 hystrix 的异常 fallback method wasn't found
- 最新 新生大学JS 阿里巴巴技术专家 精讲JavaScript视频教程
- EOF经验正交展开(一)——主成分分析
- AI人工智能(调包侠)速成之路十四(中国象棋AI网络机器人:AI技术综合应用实现)
- php简短一句话木马免杀,免杀/一句话木马(PHP)
- E45: ‘readonly‘ option is set (add ! to override)
- Apache安全漏洞
- 神策面试官的修炼之道,选对人与吸引人 | 神策军
- 《Python机器学习》基础代码
- Game 迷城的国度 Next(类似暗黑的游戏)
- 致敬最美逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载
热门文章
- mysql delete limit用法_你习惯delete语句后带上limit吗
- 搜索旋转排序数组—leetcode31
- 深入浅出无人机姿态,欧拉角,四元数,指数表示及数据转换与程序实现
- MIPS 通用寄存器
- 牛客 contest893 H-Chat (dp)
- POJ 2516 -- Minimum Cost (最小费用最大流, 必须分开建图)
- 直接用自己服务器做图床可以吗_我花 9 块钱搭了一个“私人图床”
- NFS搭建openfoam
- 记录 之 不同的Normalization方式
- php fpm 测试,zabbix4.2 监控PHP-FPM运行状态的数据