写数据库消息队列


问题:核心业务处理转发系统在处理前段发来的请求时,由于各个事务中有连接数据库写操作,当并发量足够大时,业务系统由于直连mysql更新数据库,所以需要等待mysql处理完反馈结果,也就是说要等待数据库I/O的时间。导致并发量增大,当增加到该模块处理发阀值时,会将部分请求丢弃不做处理,最终结果是会有部分用户请求被忽略。

 

为了解决上述问题,在该模块与mysql之间,建立一个消息队列的机制,分为A,B两个模块,A部分与该模块(以后称为O模块)耦合,以后直连mysql的操作,全部发到A模块,A模块写入待执行命令文件,B模块读文件。实现业务逻辑与实际I/O的分离,提高O模块处理能力。

 

遇到的问题:

1. 事务完整性,执行命令为一个事务一条命令,也就是说一条命令会包含一条至多条sql语句。

2. 命令执行失败后写日志,而不能通过O模块失败,这个由于O模块业务特点,不会因为部分sql执行失败导致整个事务流程的变化。

3. 同步读写问题:也就是说高峰期,写肯定会有一些延迟,如果读写同时进行,那读肯定读的不是最新的内容了。这个只能通过业务逻辑程序自己控制了,要么就是这部分处理不走消息队列,直接还是走mysql了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM