|
|
|
|
移动端

2014年博彩免费送筹码:一次跨行取款失败,而引发对分布式事务的思考

本文来源:http://www.133845.com/news_pconline_com_cn/

申博官网下载直营网,互联网将把所有这些智能设备无缝连接在一起,机器人也将走入我们的家庭。与其他机型PK:请选择品牌221克3360手机A奥克斯A宏碁A昂达A爱可视A爱唯克思A爱国者A爱家A爱立信A阿尔卡特A首派BBFBB北斗B博沃B巴诺书店B本易B波导B百加B邦华CColorflyC创维C卡西欧C西铂C长虹DDigiTalkDDmoboDdeovoD东信D东芝D大可乐D大唐D大显D大神D戴尔D朵唯D电意D迪士尼D迪比特EEMIEEE人E本FIfiveF富士通F斐讯F泛泰F飞利浦GGEMRYGGigasetGGoogle谷歌G格莱特HHIKeHHKCHHTCHHelperHiHKCH华世基H华为H华录H华硕H华禹H和信H恒基伟业H惠普H海信H海尔H黑莓Ii-mateIinnosIiuniJ京瓷J佳域J佳通J技嘉J经纬J金立J金鹏K康佳K科健K酷比K酷比魔方K酷派LLASSIELLGL乐丰L乐华L乐派L乐视TVL联想L蓝魔L里奥L雷蛇MMOMAXMMagicPadM微软M摩托罗拉M明基M明泰M美图M铭仁M魅影MOPSM魅族NNECNNUBENNubiaNnekenNnibiruN南方高科N纽曼N诺基亚OO2OOBEEOOKWAPOOPPOO奥盛O欧恩O欧新O欧达PPPTVPPalmP苹果Q七喜Q琦基Q青橙Q青葱RRunboR锐合SSKSSUGARSSonimS三星S三洋S三菱S宇达电通S尚合S松下S桑达S神舟S索尼S索尼爱立信S萨米S西门子S锤子S首信T8848钛金手机TTCLTThLTTransPhone传颂T台电T天时达T天珑T天语T天迈T托普T泰克飞石UUKINGUUT斯达康VVEBVVINUSVVertuVvivoV唯开W万利达W为美W吾尚W唯科W闻尚X先锋X厦华X夏新X夏普X小米X小蜜蜂X小辣椒X新邮通X熊猫X现代X西湖数源X西铂Y一加Y云台Y云狐Y亚马逊Y亿通Y优思Y优派Y原点Y影驰ZZOPOZZORA卓拉ZZTTZZUKZ中兴Z中国移动Z中天Z中恒Z中桥Z中电通信请选择产品事实上,这一互助模式获得了不少用户的追随,部分用户也的确获得到了互助金。  广州日报讯(记者井楠)大选落定之后,美联储下周即将召开议息会议,国际金融市场多次剧烈振荡,美元指数由数年高点回落。

  一、制度变革推动互联网保险。今天下午前一小时如期进行了反弹,最高3226点,稍过了一下3225点的压力,但随后进行3222点的争夺战,但始终还是没能争夺成功,还是如期在最后半小时,再次重新反转向下,最低3211点,刚好在强支撑3210点附近开始5分钟底部反转向上反弹,收在了支撑3215点上面。根据通信能力、多媒体能力、系统易用性和用户口碑四大维度,各价位表现较好的手机如下图所示:飞象网讯(马秋月/文)6月22日消息,随着“提速降费”和“宽带中国”的阵阵浪潮,国内百兆宽带将渐渐成为标配。

他说:“渔业投资规模大,一期投资就要300多万元。  据《苏州银行首次公开发行股票招股说明书》的重大诉讼与仲裁事项显示,苏州银行存在有3起尚未了结、与承兑汇票转贴现事件相关的诉讼案件。不过,也确实有难度,需要进一步做好。  高额投入低价转让,33.51%  网友樊錚:我出五亿,卖给我吧。

不知道大家有没有遇到这样的情况,就是去自动取款机取钱的时候,比如说你去取1000块钱,这个时候系统会先帮你把1000块钱扣除,然后自动取款机再把钱吐出来。但是如果取款机出现问题,会发现钱被扣了,但是钱没有取出来。在这个事情中,引发了一个对于数据一致性的思考

作者:IT知识课堂来源:今日头条|2019-10-09 11:42

场景

不知道大家有没有遇到这样的情况,就是去自动取款机取钱的时候,比如说你去取1000块钱,这个时候系统会先帮你把1000块钱扣除,然后自动取款机再把钱吐出来。但是如果取款机出现问题,会发现钱被扣了,但是钱没有取出来。我第一次遇到这个问题的时候很担心,当时跨行取取了3000块钱,短信提醒我钱已经被扣了,但是钱没取出来,于是准备去找柜台帮忙处理的时候,手机上又收到一笔交易提醒,提示钱被退回来了!

一次跨行取款失败,而引发对分布式事务的思考

在这个事情中,引发了一个对于数据一致性的思考

基于整个资金处理链路的体验,大概的流程是这样:

一次跨行取款失败,而引发对分布式事务的思考

场景分析

如果真实的场景是如我这个图所画的那样的话, 会存在几个问题

  • A银行同步调用B银行的远程接口来扣款,如果接口处理比较耗时或者出现网络故障时,会导致比较阻塞的时间比较长,那么对于用户的感觉就是取款机页面一直在转圈圈。
  • 当出款失败的时候,A银行的本地交易表状态改成了4出款失败,并且同步调用B银行的接口把扣减的3000元回滚。如果回滚失败,就会导致用户的钱被扣了,但是没有取出现金来。

远程接口的异步调用

对于第三方的调用,并且对性能有一定要求的流程中,一定不能用同步的方式。所以我们通过异步化改造一下第一个流程

异步流程的话,我之前做支付业务的时候,是这么做的

A银行调用B银行的接口,引入了一个异步消息队列,把所有的交易指令直接丢给消息队列异步去处理。B银行收到指令执行完以后,再通过

http协议把结果写回给A银行

一次跨行取款失败,而引发对分布式事务的思考

出款失败的数据回滚

我们先不管方案引入以后会带来哪些问题,我们先把原来的问题解决掉。

当取款机出款失败的时候,这笔交易要回滚。按照上面的图来看,实际上就存在一个数据一致性问题,也就是交易记录表要记录这笔交易是失败的,并且

要把这笔钱退回到账户上。这种一致性问题实际上就是大家所说的分布式事务问题

分布式事务问题也叫分布式数据一致性问题

其实在分布式架构中,分布式事务问题,是非常常见的问题。既然是常见,那肯定会有解决办法。这里我并不打算展开他的各种解决方案,给大家讲讲

架构思维层面的东西

首先我们知道数据库事务会满足ACID特性:

  • 原子性(A);
  • 一致性(C);
  • 隔离性(I);
  • 持久性(D);

而在这四大特性中,一致性是最基本的特性,其它的三个特性都为了保证一致性而存在的!

而在分布式场景中,这种单库事务就没什么意义了。

分布式场景中的事务一致性方案

在分布式架构中,有很多种解决一致性问题的方案,比如TCC(事务补偿)、比如基于可靠性消息的最终一致性、比如基于2pc协议的强一致性、

对于很多中间件里面的一致性协议,有paxos、Raft等算法 ;这些大家都可以自己去看看

我们前面说过,在分布式架构下,分布式事务的问题是很常见的。所以目前市面上提供的解决方案也比较多。那么这里就涉及到两个概念

  • 一个是强一致性、 一个是弱一致性

所谓的强一致性,就是保证跨节点的数据的强一致,要么同时成功,要么同时失败

而所谓的弱一致性,其实就是一种最终一致性,

CAP和BASE

强一致性和弱一致性有什么区别,或者对系统会产生什么样的影响呢?我们来分析一下

CAP 定理,又被叫作布鲁尔定理。对于设计分布式系统(不仅仅是分布式事务)的架构师来说,CAP 就是你的入门理论。

1.C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。对于数据分布在不同节点上的数据来说,如果在某个节点更新了数据,那么在其他节点如果都能读取到这个最新的数据,那么就称为强一致,如果有某个节点没有读取到,那就是分布式不一致。

2.A (可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。可用性的两个关键一个是合理的时间,一个是合理的响应。

合理的时间指的是请求不能无限被阻塞,应该在合理的时间给出返回。合理的响应指的是系统应该明确返回结果并且结果是正确的

3.P (分区容错性):当出现网络分区后,系统能够继续工作。打个比方,这里集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。

熟悉 CAP 的人都知道,三者不能共有,因为在分布式系统中,网络无法 100% 可靠,分区其实是一个必然现象。

如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证一致性,这个时候必须拒绝请求,但是 A 又不允许,所以分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。

对于 CP 来说,放弃可用性,追求一致性和分区容错性。

对于 AP 来说,放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,后面的 BASE 也是根据 AP 来扩展。

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写,是对 CAP 中 AP 的一个扩展。

  • 基本可用:分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。
  • 软状态:允许系统中存在中间状态,这个状态不影响系统可用性,这里指的是 CAP 中的不一致。
  • 最终一致:最终一致是指经过一段时间后,所有节点数据都将会达到一致。

BASE 解决了 CAP 中理论没有网络延迟,在 BASE 中用软状态和最终一致,保证了延迟后的一致性。

对于互联网公司,用户体验是最重要的,所以为了避免强一致带来的阻塞,会采用最终一致性方案来解决数据一致性问题。而用得比较多的都是基于本地消息表+异步队列 以及基于可靠性消息队列来实现最终一致性方案

出款失败场景改造

基于理论的铺垫,我们可以思考并改造一下取款的逻辑

一次跨行取款失败,而引发对分布式事务的思考

这个环节到这里就结束了吗?其实还没有

仅仅利用可靠性消息队列来保证数据的最终一致性还是不够的,如果消息队列本身的可靠性出现问题也会带来数据不一致问题。

所以一般的做法是,在A银行端做一个本地消息表,记录这笔消息的处理状态。然后通过定时任务来轮询消息表,来实现数据最终一致性

一次跨行取款失败,而引发对分布式事务的思考

消息表设计

消息表中有交易必须要用到的业务字段,也有设计到消息重发的辅助字段

  • Id 交易流水号
  • status 交易状态
  • lastUpdateTime 最后更新时间
一次跨行取款失败,而引发对分布式事务的思考

【编辑推荐】

  1. 申博官网下载直营网从SOA到微服务,企业分布式应用架构在云原生时代如何重塑?
  2. Gartner发布2019分布式文件和对象存储魔力象限
  3. 申博官网下载直营网详解分布式事务XA实现数据一致性的协议与原理--2PC与3PC
【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

用Python玩转excel

用Python玩转excel

让重复操作傻瓜化
共3章 | DE8UG

189人订阅学习

AI入门级算法

AI入门级算法

算法常识
共22章 | 周萝卜123

164人订阅学习

这就是5G

这就是5G

5G那些事儿
共15章 | armmay

133人订阅学习

读 书 +更多

PHP程序开发范例宝典

本书全面介绍了应用PHP进行网站开发的各种技术和技巧。全书分为20章,内容包括PHP的运行环境配置、表单及表单元素的应用、CSS与JavaScript...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微

菲律宾太阳娱乐网址登入 申博真人游戏登入 申博游戏登入 菲律宾申博太阳网城上娱乐 申博开户登入官网 申博138怎么登入不了
99真人娱乐成登入 www.91tyc.com 申博管理平台登入 申博真人游戏登入 www.98msc.com 菲律宾太阳成娱乐管理网
申博娱乐现金网 菲律宾申博游戏登入 菲律宾申博娱乐登入 www.333msc.com 申博真人游戏直营网 申博太阳娱乐评价