调用接口出现异常是怎么回事?
这种类似订单状态转化的问题算是互联网行业内非常普遍的一个问题了。有几点建议给你。
1、首先,这种订单状态的转化往往不容有失的。这种场景,99%的都要加锁。不能完全信任外部的调用顺序,或者你引入消息队列,加锁还是必须要有的。具体使用乐观锁、还是悲观锁,使用redis分布式锁还是zookeeper的分布式锁,这要结合业务。
2、加锁是会影响效率,但是订单、支付、银行流水,往往数据正确 优先于 处理高效。需要做的是在保证数据正确的基础上,如何去提高效率。。 “接口的调用量还是很大的,并发访问的话,很多接口都在等待中”,有没有把锁调整到,尽可能锁住需要锁的地方。代码做优化,把不必要的操作移到锁外,缩小加锁代码的范围,这又是一个效率的提升。
3、了解下状态机
4、最后你提到并发队列,不知道你就是指“并发队列”还是“消息队列”。不管你是指哪个吧,用这些东西的前提,就是一定做好幂等性,解决乱序问题。而这基本又都会涉及到加锁、状态机、补偿机制。
5、在中大型的分布式系统下,你设计的系统、接口都要预防重复调用、乱序调用。