@(系统架构)[分布式] ####架构 讲这之前先说一下我们的系统架构,整个电商平台分为商品系统、交易系统、资金系统、游戏通信系统,个系统之间通过Hessian服务调用。业务流程是游戏通过通信系统上架商品,商品系统处理商品,用户下单通过交易系统,用户支付订单时,交易系统调用资金系统,用户支付成功后,资金系统同步和异步回调支付结果。若支付成功,交易系统通知通信系统给买家发货,并通知商品系统,该商品已成功售出。 ####问题 由于是系统间服务调用,不能保证两服务之间的数据处理时一致的。拿下单举例,用户下单,交易系统通知商品系统减库存,如果减库存成功,但订单生成失败,此时就会出现数据不一致的情况:没有生成有效的订单,但是已经减库存了。
我们并没有采用分布式事务管理框架,而是采用幂等性和记录表进行处理的。
幂等性:服务多次调用不会影响预期结果。
记录表:用于记录系统间关键数据的操作。
还是拿下单举例,用户下单,交易系统先生成一个订单号,携带此订单号和商品号去调用商品系统,商品系统先去通过这两个参数查询数据库中是否存在此记录,如果存在,说明库存已减,直接返回成功结果即可,如果没有,那么减库存,记录订单号和商品号数据。在这种处理下,即使服务调用超时,交易系统重新调用商品系统也不会出现问题。