每一条列车一次运营方向每一段每一个位置当成一个SKU,库存是1,全部Load到内存,CAS扣减,如果A站到D站,先从原子读出ABCD的SKU,库存任意一个没有就立即返回失败,库存在就CAS扣减ABCD,任意一个扣减失败(CAS比较原值不为1)则CAS回滚(原子增),全部扣减成功后写异步日志,异步写库命令(DPDK发到专门写库的服务器),这样不存在锁,可以并发进行操作,但需要小心处理ABA问题,这样只需要几条通道(得用DPDK来做)接入这个库存扣减的服务器就行。不同的路线就复制一套这样的系统来处理。当然,高频多核单机高性能,当然宕机可能会损失部分异步没有发出写库命令的订单。 |