多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 抛问题说答案 项目过程中你遇到了什么样的难解决问题?你是如何解决的? <br/> ## ‌什么样的问题是难解决的 - 常见问题 or 偏门问题 - 正常问题 or 踩坑问题 面试官主要是想看下你做的内容的深度实操经验以及你解决问题的思考和手段 <br/> <br/> <br/> <br/> <br/> <br/> ## ‌交易一致性问题 - 重复支付 - 超时退问题 <br/> <br/> <br/> <br/> <br/> <br/> ## ‌重复支付 - 支付系统因为各种原因重复回调 考察点:幂等方法 <br/> <br/> <br/> <br/> <br/> <br/> ## ‌超时退问题 - 如何回滚内容 - 回滚失败如何解决 - 重复回滚如何预防 考察点:分布式事务,流水号应用,重试方式 <br/> <br/> <br/> <br/> <br/> <br/> ## ‌分布式原理 - CAP 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效) 可用性(Availability) : 每个操作都必须以可预期的响应结束 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成 - Base Basically Available(基本可用) Soft state(软状态) Eventually consistent(最终一致性) <br/> <br/> <br/> <br/> <br/> <br/> ## ‌分布式事务 - 二阶段提交 - 异步确保型 - 事务型消息 - TCC型 <br/> <br/> <br/> <br/> <br/> <br/> ## ‌强一致性保证 - 二阶段提交 - 读写相等 - Raft协议 <br/> <br/> <br/> <br/> <br/> <br/> ## ‌TCC - try - confirm - cancel <br/> <br/> <br/> <br/> <br/> <br/> 交易表 | id | status | item_id | | --- | --- | --- | | 2020103020102 | init | 87 | status状态分布: init初始化 stock_success 库存冻结成功 voucher_success 优惠券冻结成功 paying 支付中 fail 支付失败待回滚 voucher_rollback 优惠券回滚成功 stock_rollback 库存回滚成功 <br/> <br/> <br/> 库存表 | item_id | amount | | | --- | --- | --- | | 87 | 20 | 库存流水表 | xid | status | item_id | amount | | --- | --- | --- | --- | | 2020103020102 | init | 87 | 1 | status状态分布: init初始化 success 库存冻结成功 rollback 库存回滚 优惠券表 | user_id | amount | | | --- | --- | --- | | 7 | 30 | 优惠券流水表 | xid | status | user_id | amount | | --- | --- | --- | --- | | 2020103020102 | init | 7 | 1 | status状态分布: init初始化 success 优惠券冻结成功 rollback 优惠券回滚 <br/> <br/> <br/> <br/> <br/> <br/> ## ‌异步确保型 采用异步消息的方式确保事务可以最终一致 交易表 fail 支付失败待回滚 voucher_back 优惠券退成功 stock_back 优惠券退成功 流水表 加入back状态 <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> ## ‌事务型消息 使用事务型消息确保发送方的落地能力 <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/>