月牙旁,你轻颦浅笑

向往的生活也许只是一种波普

O ever youthful, O ever weeping.


双十一总结(2018)

去年的情况2017 双十一优化总结今年同样适用

高并发接口异步操作

高并发情况集中在推送订单与取消订单,推送订单压力主要集中在服务器,此情况再双十一服务器扩容后问题不大。取消订单压力主要在可能引发死锁,尤其是爆款货品的订单在11月12号被集中取消,更容易引发死锁。这时候首要目的是确保订单状态正确时能够被百分百取消,避免 OMS 接口取消失败,客服人员退货成功,WMS 却成功发货,造成人财两空

接口取消订单是,将要取消的订单 ID 插入一张表中,然后立即更改订单状态为已取消并响应接口为取消成功。再通过后台脚本逐渐处理已取消单子的库存问题,从而间接解决问题,缺点就是库存的响应会有一些延迟。不过考虑到客户双十一备货都很足,都刻意避免因库存不足导致客户无法成功下单的情况,这几分钟的库存延迟还是能够接受的。

确认首要目标,为实现目标将问题进行转移;间接解决问题而非直接也是一种思路

回传问题

WMS 订单回传给 OMS 会因为服务器异常、代码异常、oms 问题等原因回传失败,为了避免客户没有检查出这类问题单子,长时间未成功回传平台,引发货品库存延迟、物流信息延迟等问题。

首先将未回传成功的单子的原因进行分类,发现重新回传能够解决绝大部分问题,其他需要研发介入。这时服务器自动处理异常单据就变得尤为重要。目前先简单的写一个定时脚本,定时做异常单据的重试工作。如果异常数据过多,要考虑分批处理。

自动化处理是减少人员工作量的首要手段,但真正去分析异常问题,降低异常问题的出现的概率,甚至根治此类问题才是根本。

特殊情况的索引优化

系统中目前存在的特殊情况主要分为几种

  • 销售出库单页面的默认搜索。此页面打开时单量一般会是百万、千万的数据,针对默认打开情况下的索引优化可以非常显著的提升客户体验,会明显感觉软件的速度快。
  • 根据数据统计,分析数据量大的页面最常用的搜索条件,检查这些搜索条件的走的索引是否正确,检查是否产生索引偏移。
  • 分析表的索引设计是否有问题

无法避免锁数据时

  • 从业务逻辑开始分析,寻求锁数据时能否避免核心逻辑相应数据的占用。比如对出库单创建批次时会出现与发货逻辑死锁的情况,发货是最核心的逻辑且合理的情况下必须发货成功,否则可能会造成客户损失。稳定的核心逻辑尽量不改,免得引发不必要的问题。这时候通过修改创建批次的逻辑,尽管无法避免锁定一部分数据(锁定了表的某条索引,以至于锁定了索引对应主键的所有数据),但可避免与发货锁到相同的数据,从而将死锁的问题迁移到了推单环节,而推单有自动重试机制,偶发的死锁情况不会造成任何影响,从侧面上解决了死锁引发的经济问题。

问题如果无法避免那么就尝试绕过或转移问题,避免因问题引发的结果才是根本目的。