| 步骤(同步顺序执行) | 耗时 | 是否可并行 | 是否可异步 |
|---|---|---|---|
| 1. 渠道鉴权 & 签约 | 100~300 ms | ✘ | ✔ |
| 2. 风控模型(规则 + 评分卡) | 200~600 ms | ✔(多模型) | ✔ |
| 3. 账户系统校验余额 | 50 ms | ✔(多账户) | ✔ |
| 4. 资金渠道扣款(微信/支付宝/银行卡) | 300 ms~2 s | ✔(多通道) | ✔ |
| 5. 记账 & 账单状态更新 | 30 ms | ✘ | ✔ |
| 6. 短信 / 推送 / 积分 | 50 ms | ✔ | ✔ |
降低 RT:把 ②③④ 并行跑,接口 RT 从 2 s→300 ms
提高吞吐量:MQ 削峰,还款高峰 1 w/s→平滑 2 k/s
容错 & 可回滚:任何子任务失败,走「补偿队列」冲正,保证 T+0 账务最终一致
渠道多活:并行调用微信、支付宝、银联,先返回成功的渠道,其余自动取消,成功率 99.9%→99.99%
实现骨架(Spring Cloud)
java
// 1. 接口立即返回「受理成功」
@PostMapping("/repay")
public ApiResp<Long> repay(@RequestBody RepayDTO dto){
long taskId = idWorker.nextId();
repayProducer.send("repay.topic", taskId, dto); // 异步落库
return ApiResp.accept(taskId);
}
// 2. 并行编排(CompletableFuture + 线程池)
@Component
public class RepayTaskService {
@Async("channelThreadPool")
public CompletableFuture<ChannelResult> channelPay(RepayDTO dto){ ... }
@Async("riskThreadPool")
public CompletableFuture<RiskResult> riskCheck(RepayDTO dto){ ... }
public void consume(RepayTask task){
CompletableFuture.allOf(
channelPay(task), riskCheck(task)
).thenAccept(v -> {
if (allSuccess(v)) updateBillPaid(task);
else repayCompensateProducer.send(task); // 补偿
});
}
}