目录
引言
高并必的日志处理在网上可以找到很多的解决方案,在做这个Demo之前我也是个菜鸟;当然,做完这个Demo还是一个菜鸟。废话不多说,先看下先辈们的案例:
- 系统架构~高并发日志系统设计[http://www.cnblogs.com/lori/p/3921310.html]
- 自己DIY的[http://blog.csdn.net/hawksoft/article/details/7213652]
这篇文章主要讲的是思路,代码还有待优化,使用的是生产者与消费者模式、另外还使用了单例模式;这只是一种做法而已,编程路上的想法与实现想法。
思路
解决问题思路非常重要,有了思路我们才会有目标、方向;
从问题的来源说起吧,因为DMS系统需要记录日志,然而在现有的方式是记录到数据库,这个方法有好也有坏,坏处在于:
- 并必量高的时候增加了数据库服务器的压力为一些日常日志、业务日志或者重要的系统日志来增加数据库服务器的压力还是有些不值得的;
在增加数据库服务器的压力同时还会增加垃圾数据,这些日志别看量很少,单条数据量不大,但对于庞大的并必量时将是不堪;
基于这些原因老大要我对日志模块进行优化;使用系统现有的日志模块方式写文件无疑是最好的,对线上系统的维护来说是比较好的选择,能快速的反应事实,但还没上线,在本地浏览器里面随便的Enter,浏览器大哥就跟我说IO冲突,想想也是有可能的,对于WEB服务器来说是多线程,IO冲突也是需要注意的事情,这一点小伙伴们要记住了。好了这是为什么有这遍文章的原由(这是一段屁话-_-)。
有了这个原由后就要开始想怎么解决IO冲突了,这时想到了生产者与消费者模式;这个模式可以说是为了这种问题而生;WEB服务器做生产者,日志模块做消费者,对于系统现状来说这也是最省的方式,因为日志模块也有了;那我们要做的事就是做这个生产者与消费者的中间件了;
对中间件的设计思路:首先要有一条单独的线程向文件写日志;
- 需要有一个仓库来存储生产者生产的产物;
- 仓库和线程之间的交互,线程最好能自我化的管理;
UML图如下: