1
a1310747 OP 同事说了一些关于数据库的锁机制和事务隔离级别 并发这块就不知道怎么解决了
|
2
vingz 2017-03-01 12:39:25 +08:00
什么岗位?
|
3
swulling 2017-03-01 12:40:12 +08:00 via iPhone
这应该是一个 P8 面试题
|
7
YouXia 2017-03-01 13:49:34 +08:00
这个问题,第一点先需要答出两个账户是在同一个数据库里还是不同的数据库里,之后再解题,答出第一点其实就可以加分了。
当然我不搞业务,答不太好,就不详细说了。 |
8
qieqie 2017-03-01 14:03:39 +08:00 via iPhone
关键词应该是分布式事务,最终一致性
|
11
swulling 2017-03-01 14:31:39 +08:00 via iPhone
|
12
swulling 2017-03-01 14:32:12 +08:00 via iPhone
一人秒杀阿里全公司,一个 P8 怎么够,得 P80 吧
|
13
qieqie 2017-03-01 14:33:29 +08:00 via iPhone
@YouXia 题主也说了,在高并发下保证事物的流畅性
http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency 正如这篇文章里所说: 在互联网领域的绝大多数的场景,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。 |
14
ebony0319 2017-03-01 14:35:56 +08:00
银行的做法就是你给我坐着给我等几分钟,取钱至少要几分钟把。 |
15
YouXia 2017-03-01 14:37:42 +08:00 1
|
16
YouXia 2017-03-01 14:54:32 +08:00
|
17
benbenlang 2017-03-01 14:59:12 +08:00
不懂技术,但这个题肯定是在考思路,面试官出发点没错的
|
18
mickeyandkaka 2017-03-01 15:07:29 +08:00
银行转账 -> 强一致性
尽可能包含转账账户、转账金额、接收账号、银行流水号、汇率等信息 -> 业务设计可能需要拆可能细的表? 要求考虑百万以上并发 -> 高可用 保证事务的流畅性和安全性 -> 高可用与一致性。 看起来分布式事务 + 分布式一致性算法。为了保证可用性,只能堆尽可能多的机器? 不知道应该怎么回答。 我也想知道什么级别会问这种题。。。? |
19
rason 2017-03-01 15:18:57 +08:00 via iPhone 6
面试让你造飞机,工作让你拧螺丝。
|
21
ijustdo 2017-03-01 15:49:32 +08:00
随便想了下 没看太明白 尝试看看呢
A 转账账号 B 接收账号 C 银行中转结算账号 (汇率什么的在这一级结算) M 代表所有流程中的统一事务编号 你也可以看成是一个特殊 的 uuid 之类 A 向 B 转 X (可以根据统一事务编号查询进度) 1. (统一事务编号)A 的账号冻结 X 金额 (记录日志 能你操作到操作前) 2. (统一事务编号)A 向 C 转 X 金额(并进行汇率换算) 银行收到处理后会给流水号 (流水号)(记录日志 能你操作到操作前) 3. (统一事务编号)C 向 A 转 X 金额(这里不同币种也许汇率换算) (这不也会产生流水号)(记录日志 能你操作到操作前) 4. (统一事务编号)A 收到钱 给统一事务编号 发消息 老子收到钱了(记录日志 能你操作到操作前) 5. (统一事务编号) 把 A 冻结的 X 金额给减去 (记录日志 能你操作到操作前) 6. (统一事务编号) 这里可能还有会计结算 自动收支 安全检查等一堆的 事务完整延时检查 都过了 转账完成 |
22
ijustdo 2017-03-01 15:52:28 +08:00
忘了说 最后这个 统一事务编号 实际就是 A->B 赚钱的 银行流水号 中间两步的 都可以看成子事务 或者子流水号
每一步都要求可以逆向操作 每一步可以不用管是在哪里执行的 我说的是机器或者 ip 之内 |
23
ijustdo 2017-03-01 16:06:27 +08:00
实际这个流程里主要要考虑 会计一些收支平衡 比喻 我要查看银行 今天或者某时间段所有入账 只用看 给 C 的入账
要看所有出账 就是看 C 的所有出账 理论上每一笔 加上手续费 计算 汇率转换 每一笔 也就是每一个统一事务号下所有交易 要符合会计公式 这个题我也没看明白 说白了 题目出的不好 哈哈 没有突出他要考核的是那一点 |
24
TheCure 2017-03-01 16:26:03 +08:00
百万并发 23333
|
26
YouXia 2017-03-01 16:55:36 +08:00
|
28
quicknight 2017-03-01 18:03:43 +08:00
1.创建交易号,保存当前交易记录
2.从 A 帐户扣除要转账金额,把交易号,转账金额, A,B 账号一起加入待处理队列 3.队列依次将待处理请求提交银行系统处理 4.接收银行处理结果,成功后按照交易记录,修改 B 帐号金额,交易号流水号保存,通知 A,B ,不成功转账金额退回原始账户,从队列里删掉当前交易,修改交易号状态,通知 A,B |
29
WhoMercy 2017-03-01 18:58:52 +08:00 via Android
讲一讲大致思路:
1.先考虑数据传输效率,序列化、 IO 占时,可以使用强类型、高效的 Protobuf 封装数据; 2.再考虑单机处理能力,使用负载均衡分流向集群服务器,提供横向扩展吞吐量处理简单业务逻辑; 3.接着考虑强敏感业务的事物强一致性要求,集群服务器处理完的数据可以使用分布式事务验证数据正确性、做数据持久化(如金额加减、用户资金操作记录)等; …… 2.、 3.具体的实现方案比较多,而且说起来简单,落地难。比如数据的请求使用 AIO(请求后需等待转账完成,而不是立刻完成);比如事务补偿机制,对已经完成的事务做校验、记录…… 总之有接触过高并发的话,能说的东西挺多,怕说错就只说有把握的部分。 |
30
mooncakejs 2017-03-01 19:15:01 +08:00
涉及钱的服务, 只有队列化,用户不相关的交易可以并行处理,用户相关的必须排队处理。
|
31
liprais 2017-03-01 19:28:36 +08:00 via iPhone
如何亩产万斤
|
32
jason19659 2017-03-01 21:05:30 +08:00
还有 log 可复查。。
|
33
ijustdo 2017-03-02 09:53:41 +08:00
这个问题 真的 没明确 这里可能 A 账号 在国内 B 账号在国外 还有可能 A, B 不同银行 这个问题又没说 是相同的银行
就算相同的银行 币种和汇率都的吃一壶(这些都得实现约定 一什么时候汇率为准) 为什么我引入中间账号 C[你可以把他当做结算 /清算中心] 1. 假设 A 在国内 B 在国外 汇款可能非 24 小时 或者 刚好日期变更先附近两个国家 汇率以那边为主 2. 还有就是 A 汇款后 在 B 没收到钱之前 他的银行卡金额可能还会产生变化 比喻上例跨行会国内 A 汇出钱后 在 B 没收到之前 这个时候 他还可能进行其它交易的 3. 我记得在就几年 那时候 银行就开始小型机了 相信有钱单位能用钱解决的问题都不是问题.... 4. 这种问题 因为太多的不确定行 一般都会 尽量拆分 每一步都可以独立执行 每一不都可以恢复执行前 5. 第四步是必须的 如果像央行新要求 atm 汇款 24 小室内 可退回 嘿嘿 那么还有更爽的 个人只见 做金融开发 很蛋疼 不知道这个问题是考程序流程 还是 考架构 没说清楚 所以这个答案估计很多 得看应聘什么职位 从职位的职能去考虑这件事 |