-- 1、优先级阻塞队列
当前核心记账业务是悲观锁加LinkedBlockingQueue来实现,但考虑到高并发和死锁的问题,可以用jdk7的PriorityBlockingQueue优先阻塞队列结合乐观锁实现,对于并发时出现锁无法update时可以重新进入队列并调整优先级进行记账处理。
新方案:乐观锁:PriorityBlockingQueue<T> 优先级队列串行化记账请求,乐观锁处理账户表相关的数据一致性问题,当数据不一致时将优先级调整再次进入记账队列。
老方案:悲观锁: 更改账户表余额update语句:update t_account set amount = amount - quantity where amount >= quantity and ID = 12345
1、记流水,2、加减主账户余额(悲观锁),3、更新流水(主账户记账成功),4、请求会计引擎记分户账,更新流水的分户账记账状态
--- 2、账务热点
账务系统会因为复式记账法业务而在交易到达一定数量级后成为热点,所以从交易流水就应该和账务核心分开,交易流水和单式记账作为一个层次,然后再请求账务核心和会计核心。这样也就缓冲了账务核心,后面分开的就是会计引擎。
--- 3、看见7年前写的bolg,o(^▽^)o
核心记账业务可用jdk7的PriorityBlockingQueue优先阻塞队列结合乐观锁实现
原文:http://www.cnblogs.com/xinxindiandeng/p/6374022.html