分布式事物之综合案例分析

7.1系统介绍

7.1.1. P2P介绍

P2P 金融又叫P2P信贷。其中P2P是 peer-to-peer 或 person-to-person 的简写,意思是:个人对个人。P2P金融指个人与个人间的小额借贷交易,一般需要借助电子商务专业网络平台帮助借贷双方确立借贷关系并完成相关交易手续。借款者可自行发布借款信息,包括金额、利息、还款方式和时间,实现自助式借款;投资者根据借款人发布的信息,自行决定出借金额,实现自助式借贷。目前,国家对P2P行业的监控与规范性控制越来越严格,出台了很多政策来对其专项整治。并主张采用“银行存管模式”来规避P2P平台挪用借投人资金的风险,通过银行开发的“银行存管系统”管理投资者的资金,每位P2P平台用户在银行的存管系统内都会有一个独立账号,平台来管理交易,做到资金和交易分开,让P2P平台不能接触到资金,就可以一定程度避免资金被挪用的风险。
什么是银行存管模式?
银行存管模式涉及到2套账户体系,P2P平台和银行各一套账户体系。投资人在P2P平台注册后,会同时跳转到银行再开一个电子账户,2个账户间有一一对应的关系。当投资人投资时,资金进入的是平台在银行为投资人开设的二级账户中,每一笔交易,是由银行在投资人与借款人间的交易划转,P2P平台仅能看到信息的流动。

7.1.2.总体业务流程

术语 描述
银行存管模式 这种模式下,涉及到2套账户系统,P2P平台和银行各一套账户体系。投资人在P2P平台注册后,会同时跳转到银行再开一个电子账户,2个账户间有一一对应的关系。当投资人投资时,资金进入的是平台在银行为投资人开设的二级账户中,每一笔交易,由银行在投资人与借款人间的交易划转,P2P平台仅能看到信息的流动。
标的 P2P业内,习惯把借款人发布的投资项目称为“标的”。
发标 借款人在P2P平台中创建并发布“标的”过程。
投标 投资人在认可相关借款人之后进行额一种借贷行为,对自己中意的借款标的进行投资操作,一个借款标可由单个投资人或多个投资人承接。
满标 单笔借款标筹集齐所有借款资金即为满标,计息时间是以标满当日开始计息,投资人较多的平台多数会当天满标。

7.1.2.模块说明

统一账户服务
用户的登录账户、密码、角色、权限、资源等系统级信息的管理,不包含用户业务信息。
用户中心
提供用户业务信息的管理,如会员信息、实名认证信息、绑定银行卡信息等,“用户中心”的每个用户与“统一账户服务”中的账号关联。
交易中心
提供发标、投标等业务。
还款服务
提供还款计划的生成、执行、记录与归档。
银行存管系统(模拟)
模拟银行存管系统,进行资金的存管,划转。

7.2.注册账号案例分析

7.2.1.业务流程

采用用户、账号分离设计(这样设计的好处是,当用户的业务信息发生变化时,不会影响的认证、授权等系统机制),因此需要保证用户信息与账号信息的一致性。

7.2.2.解决方案分析

针对注册业务,如果用户与账号信息不一致,则会导致严重问题,因此该业务对一致性要求较为严格,即当用户服务和账号服务任意一方出现问题都需要回滚事务。
根据上述需求进行解决方案分析 :
1、采用可靠消息一致性方案
可靠消息一致性要求只要消息发出,事务参与者接到消息就要将事务执行成功,不存在回滚的要求,所以不适用。
2、采用最大努力通知方案
最大努力通知表示发起通知执行完本地事务后将结果通知给事务参与者,即使事务参与者执行业务处理失败发起通知方也不会回滚事务,所以不适用。
3、采用Seata实现2PC
在用户中心发起全局事务,统一账户服务为事务参与者,用户中心和统一账户服务只要有一方出现问题则全局事务回滚,符合要求。
实现方法如下 :
1、用户中心添加用户信息,开启全局事务
2、统一账号服务添加账号信息,作为事务参与者
3、其中一方执行失败Seata对SQL进行逆操作删除用户信息和账号信息,实现回滚。
4、采用Hmily实现TCC
TCC也可以实现用户中心和统一账户服务只要有一方出现问题则全局事务回滚,符合要求。
实现方法如下 :
1、用户中心
try :添加用户,状态为不可用
confirm :更新用户账户为可用
cancel :删除用户
2、统一账号服务
try :添加账号,状态不可用
confirm :更新账号状态为可用
cancel :删除账号

7.3.存管开户

7.3.1.业务流程

根据政策要求,P2P业务必须让银行存管资金,用户的资金在银行存管系统的账户中,而不在P2P平台中,因此用户要在银行存管系统开户。

用户向用户中心提交开户资源,用户中心生成开户请求号并重定向至银行存管系统开户页面。用户设置存管密码并确认开户后,银行存管立即返回“请求已受理”。在某一个时刻,银行存管系统处理完该开户请求后,将调用回调地址通知处理结果,若通知失败,则按一定策略重试通知。同时,银行存管系统应提供开户结果查询的接口,供用户中心校对结果。

7.3.2.解决方案分析

P2P平台的用户中心与银行存管系统之间属于跨系统交互,银行存管系统属于外部系统,用户中心无法干预银行存管系统,所以用户中心只能在收到银行存管系统的业务处理结果通知后积极处理,开户后的使用情况完全由用户中心开控制。
根据上述需求进行解决方案分析 :
1、采用Seata实现2PC
需要侵入银行存管系统的数据库,由于它的外部系统,所以不适用。
2、采用Hmily实现TCC
TCC侵入性更强,所以不适用。
3、基于MQ的可靠消息一致性
如果让银行存管系统监听MQ则不合适,因为它的外部系统。如果银行存管系统将消息发给MQ用户中心监听MQ是可以的,但是由于相对银行存管系统来说用户中心属于外部系统,银行存管系统是不会让外部系统直接监听自己的MQ的,基于MQ的通信协议也不方便外部系统间的交互。所以本方案不适合。
4、最大努力通知方案
银行存管系统内部使用MQ,银行存管系统处理完业务后将处理结果发给MQ,由银行存管的通知程序专门发送通知,并且采用互联网协议通知给第三方系统(用户中心)。
下图中发起通知即银行存管系统 :

7.4.满标审核

7.4.1.业务流程

在借款人标的募集够所有的资金后,P2P运营管理员审批该标的,触发放款,并开启还款流程。

管理员对某标的满标审批通过,交易中心修改标的状态为“还款中”,同时要通知还款服务生成还款计划。

7.4.2.解决方案分析

生成还款计划是一个执行时长较长的业务,不建议阻塞主业务流程,此业务对一致性要求较低。
根据上述需求进行解决方案分析 :
1、采用Seata实现2PC
Seata在事务执行过程会进行数据库资源锁定,由于事务执行时长较长会将资源锁定较长时间,所以不适用。
2、采用Hmily实现TCC
本需求对业务一致性要求较低,因为生成还款计划的时长较长,所以不要求交易中心修改标的状态为“还款中”就立即生成还款计划,所以本方案不适用。
3、基于MQ的可靠消息一致性
满标批通过后由交易中心修改标的状态为“还款中”并且向还款服务发送消息,还款服务接收到消息开始生成还款计划,基于MQ的可靠消息一致性方案适用此场景。
4、最大努力通知方案
满标审批通过后交易中心向还款服务发送通知要求生成还款计划,还款服务并且对外提供还款计划生成结果校对接口供其他服务查询,最大努力通知也适用本场景。

分布式事务对比分析 :

各种方案的优缺点 :
2PC最大的诟病是阻塞协议。RM在执行分支事务后需要等待TM的决定,此时服务会阻塞并锁定资源。由于其阻塞机制和最差时间复杂度高,因此,这种设计不能适应随着事务涉及的服务数量增加而扩展的需要,很难用于并发较高以及子事务生命周期较长(long-running
transactions)的分布式服务中。

如果拿TCC事务的处理流程与2PC两阶段提交做比较,2PC通常都是在跨库的DB层面,而TCC则在应用层面的处理,需要通过业务逻辑来实现。这种分布式事务的实现方式的优势在于,可以让应用自己定义数据操作的粒度,使得降低锁冲突,提高吞吐量成为可能。
而不足之处则在于对应用的侵入性非常强,业务逻辑的每个分支都需要实现try、confirm、cancel三个操作。此外,其实现难度也比较大,需要按照网络状态、系统故障等不同的失败原因实现不同的回滚策略。典型的使用场景 :满,登录送优惠卷等。

可靠消息最终一致性事务适合执行周期长且实时性要求不高的场景。引入消息机制后,同步的事务操作变为基于消息执行的异步操作,避免来分布式事务中的同步阻塞操作的影响,并实现来两个服务的解耦。典型的使用场景 :注册送积分,登录送优惠卷等。

最大努力通知是分布式事务中要求最低的一种,适用于一些最终一致性时间敏感度低的业务;允许发起通知方处理业务失败,在接收通知发收到通知后积极进行失败处理,无论发起通知方如何处理结果都不会影响到接收通知方的后续处理;发起通知方需提供查询执行情况接口,用于接收通知方校对结果。典型的使用场景 :银行通知、支付结果通知等。

总结 :
在条件允许的情况下,我们尽可能选择本地事务单数据源,因为它减少来网络交互带来的性能损耗,且避免来数据若一致性带来的种种问题。若某系统频繁不合理的使用分布式事务,应首先从整体设计角度观察服务的拆分是否合理,是否高内聚低耦合?是否粒度太小?分布式事务一直是业界难题,因为网络的不确定性,而且我们习惯于拿分布式事务与单机事务ACID做对比。
无论是数据库曾的XA、还是应用层TCC、可靠消息、最大努力通知等方案,都没有完美解决分布式事务问题,他们不过是各自在性能、一致性、可用性等方面做取舍,寻求某些场景偏好下的权衡。

原文地址:https://www.cnblogs.com/haizai/p/12004982.html

时间: 2024-10-10 10:11:57

分布式事物之综合案例分析的相关文章

综合案例分析(sort,cut,正则)

1.    找出ifconfig "网卡名" 命令结果中本机IPv4地址 分析: 解释:要取出ip地址,首先我们可以先取出ip所在的行,即取行:可以结合head和tail,后面会有 更好的方法去取行,取列当然会想到cut命令,但是此例中,我们要考虑分隔符(空格和冒号), 因此tr的引入,会使题目变得更加简单. 答: 在这里小编仅提供一种比较好的方法. 2.查出分区空间使用率的最大百分比值 分析: 解释;先附上一张df查看的结果,比较容易解释 首先我们可以用df查看分区,很明显我们需要的

Hive综合案例分析之开窗函数使用

知识点: 1.Hive的窗口和分析函数进阶 CUME_DIST 小于等于当前行值的行数 / 总行数 PERCENT_RANK 当前rank值-1 / 总行数-1 NTILE 将窗口分成n片 LEAD(col, n, default) 窗口内下n行值 LAG(col, n , default) 窗口内上n行值 FIRST_VALUE 窗口内第一个值 LAST_VALUE 窗口内最后一个值 2.分析函数中包含三个分析子句 分组(Partition By) 排序(Order By) 窗口(Window

JMeter全程实战、性能测试实战、分布式性能测试、真实案例分析

测试需求描述 1. 本次测试的接口为http服务端接口 2. 接口的主要分成两类,一类提供给查询功能接口,一类提供保存数据功能接口,这里我们举例2个保存数据的接口,因为这两个接口有关联 性,比较有代表性: 保存信用卡账户信息接口: 传入参数: args={ "clientNo":"434343556", "alias": "**信用卡2", "cardName": "长城*****卡2"

ccnp大型企业综合案例分析

这个项目主要实现思路关键点之独孤九剑: Ip地址的规范 接口对应表的整理 主次关系的整理 分清楚什么是二层技术什么是三层技术 对于相同的预配置先在记事本写好,利用crt直接粘贴复制,这样节省时间和提高效率. 几种交换协议的一句话理解: Vtp 是用来简化vlan 的配置,思科专有.公有GVRP. Vtp 配置方法:两台交换机之间用trunk 相连,配置服务端与客户端,配置相同的密码, 域名,版本.服务器配置版本高于客户机. Stp pvst mst 生成树,快速生成树,多生成树. 生成树是用来防

Hive综合案例分析之用户上网行为分析

知识点:1.Hive复合数据类型:array collect_set collect_list array_contains sort_array 2.lateral view explode(array) lateral view out 需求: click_log : cookie_id     ad_id      time ad_list: ad_id     ad_url     catalog_list 统计: cookie_catalog: cookie_id     ad_cat

Hive综合案例分析之不正常订单状态统计

需求 订单有5个状态:创建.捡货.发送.送达.取消 统计:创建和捡货之间不能操作2小时,创建到发送时间不能操作4小时,创建到送达之间不能超过48小时. 知识点 1)external table 2)desc formatted的使用 3)virtual column 4)Alter FILEFORMAT 5)COALESCE.unix_timestamp的使用 6)PARQUET 实现 外部表 订单创建表: CREATE EXTERNAL TABLE order_created ( orderN

Hive综合案例分析之简易推荐系统

知识点: 1.Hive复合数据类型map与Lateral View的使用: map.str_to_map.map_keys.map_values,map与lateral view 2.通过translate进行简单数据保护: Hive转换函数进行数据保护,确保企业应用信息安全 3.Hive的窗口和分析函数入门: row_number.rank.dense_rank 创建订单表: CREATE EXTERNAL TABLE f_orders ( user_id STRING , ts STRING

2016年5月信息系统项目管理师临门一脚重点串讲(综合知识、案例分析、重点论文、计算题)

http://edu.51cto.com/course/course_id-5868.html 1.旨在帮助大家快速通过软考,少受备考的折磨与孤独. 2.28小时,不到2天的时间,快速学完100天的内容 3.着重梳理综合知识重点高频考点,快速提升大家综合知识得分能力 4.多角度剖析案例分析,提升大家案例分析应试能力. 5.从论文框架与模版.到重点论文的准备,尽在掌控. 为帮助大家提高复习效率,以最小的代价通过信息系统项目管理师,本套软考冲刺临门一脚,从以下方面进行课程优化与组合:1.信息化或计算

系统架构设计师2009-2018历年综合知识、案例分析、论文真题及答案详细解析

https://blog.csdn.net/xxlllq/article/details/85049295 ??系统架构设计师复习资料当您看了这篇文章有何疑问,可先看最后的评论,有可能您遇到的问题其他人已经提出我已回复. 2018/12/14查询成绩后知道自己通过了系统架构设计师的考试(每科满分75,及格45分),特地记录一下.最终的成绩如下: 我是在9月份决定报名参加系统架构设计师考试,主要是想借此机会督促自己学习些除工作外的知识.准备了2个月,复习时间为周末,复习方式为看教学视频和真题练习.