最近每日优鲜开发的小程序登上了头条,买东西没成功把余额给扣了还不给退款的APP
原创 2019-07-20 23:05:15

    作为开发者,一开始看到这样的事情发生总是很想笑的,每日优鲜因为这件事上了头条,不得不说也是很冤枉的,还被人给投诉到了黑猫,现在百度上都是它的负面消息。

    买东西不成功也扣款是什么问题呢?肯定是在写付款的这部分逻辑成功了,但是在修改订单支付状态或发放积分等其他子业务上出现了程序异常,但是这部分代码没有在一个事务中执行,导致异常抛出却没有回滚事务,所以发现钱也扣了,但是订单却没成功。当然了,小编为了让看官们更好理解这些说法,再解释下什么是事务回滚,所谓回滚就是当一段逻辑出现业务上的错误时,之前执行成功的那部分数据将回到出错之前的状态。当然,用本地事务也是比较低级的做法,这样子开发出来的小程序和app性能都不会特别高,无法适用于并发高的场景,但是会有一定的安全性,如果说当业务大批量出错,就会造成大批量的事务回滚,那么就会造成不可逆的程序崩溃和阻塞,这个时候小程序执行任何操作都会感到明显卡顿,甚至还无法动弹。

    为了将这部分业务做的更有人性化,也能支撑更高的并发性能,小编会将它们的事务抽离,分成多个子事务在多个分布式系统之中,通过消息队列这样的手段来判断各个子业务中执行的方法是否成功,如果有其中一个业务失败了,那么消息推送过来给其他系统,就会将已经做好的数据再临时回滚过去,这样子的方法不仅能够避免高峰时大批量出错的情况,相信大家也在淘宝双十二购物的时候说余额变动会有一定延迟,其实就是这个道理,如果数据量过于庞大,那么接收到消息的服务器并不会立马处理它,而是将它存储在数据库,等到业务没那么繁忙的时候再做处理,就像交通道路一样,让有需要的车辆先行通过,其他车辆避让。