元旦活动期间优惠券系统挂了一次导致出现了部分的秒杀商品价格为0,分析原因之后发现是由于短时间内请求量过大,后端采用的同步机制无法满足需求,数据落库的过程中出现了脏数据(库存已经为0,但是依然可以下单,和优惠券的逻辑冲突之好直接返回了购买成功。。。)
活动结束之后针对这一问题作了一些改进:
1.凡是高并发的场景涉及到的代码全都要求是低耦合、异步处理。通过redis来做mq,把消费者的服务器集群加大,用户在抢购的时候会有几秒钟的等待页面,等待数据实际落库的时候再提示完成交易。
2.访问日志全部丢到缓存里面,并且只记录错误日志。
3.redis改为cluster模式,从单节点改为集群防止挂掉。
618活动过程中,秒杀系统运行良好,如果遇到流量峰值,只需要把redis集群和消费者集群动态加大就行,事后再释放资源。