日志分析并行分解设计与实现.doc

日志分析并行分解设计与实现.doc

ID:55585016

大小:190.00 KB

页数:22页

时间:2020-05-19

日志分析并行分解设计与实现.doc_第1页
日志分析并行分解设计与实现.doc_第2页
日志分析并行分解设计与实现.doc_第3页
日志分析并行分解设计与实现.doc_第4页
日志分析并行分解设计与实现.doc_第5页
资源描述:

《日志分析并行分解设计与实现.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、任务就是要完成一个日志分析应用。需求没有很明确,只是要有这么一个东西能够满足分析收集后的日志,将分析后的原始数据入库,作为后期分析和统计使用。在动手做之前,我还是给这个应用作了最基本的需求定义:灵活配置(输入源,输出目标,分析器的实现等),高效(并行任务分解)。就这两点能够做到,那么将来需求如何变化都可以适应。Tiger的Concurrent包是满足后面那项最好的实现,因此打算好好的实践一把,也就这部分Tiger的特性还没有充分使用过,里面的线程池,异步服务调用,并发控制都能够极好的完成并行任务分解的工作。也就是在这个过

2、程中,看到了IBM开发者论坛上的一片文章,讲关于《应用fork-join框架》,谈到了在J2SE7的Concurrent包中将会增加fork-join风格的并行分解库,其实这个是更细粒度的任务分解,同时能够在当前多CPU的情况下提高执行效率,充分利用CPU的一种实现。无关的话不多说了,就写一下整个设计和实现的过程以及中间的一些细节知识。 背景:由于服务路由应用访问量十分大,即时的将访问记录入库对于路由应用本身以及数据库来说无疑都会产生很大的压力和影响。因此考虑首先将访问信息通过log4j记录在本地(当然自己需要定制一下L

3、og4j的Appender和Filter),然后通过服务器的定时任务脚本来将日志集中到日志分析应用所在的机器上(这里通过配置可以决定日志是根据什么时间间隔来产生新文件)。日志分析应用就比较单纯的读取日志,分析日志,输出分析结果(包括写入数据库或者是将即时统计信息存入到集中式缓存Memcached中)。网络结构图如下:Concurrent概述:Tiger出来也有些年头了,但是每一个新的特性是否都在实际的工作中使用过,起码我自己是没有作到的,包括对于Concurrent包也只是看过,写了几个Testcase玩一下,但具体使用

4、到实际开发中还是比较少的。在这个工作之前,如果考虑要使用对象池或者线程池,那么一定会去采用apache的commonpool,不过在现在jdk日益“强大”的基础下,能够通过jdk自己搞定的,就尽量不再引入第三方包了。看Java的Doc很容易就理解了Concurrent,这里我只是大致的说一下几个自己在应用中使用的接口: BlockingQueue:看看名字就知道了,阻塞式队列,可以设置大小。适合于生产者和消费者模式,生产者在队列满时阻塞,消费者在队列空时阻塞。在日志分析应用开发中被用于分析任务(生产者)和输出任务(

5、消费者)之间的分析结果存储通道。 Callable:任何需要执行的任务都可以定义成Callable,类似于线程的Runnable接口,可以被ServiceExecutor指派给内部的线程异步执行,并且返回对象或者抛出异常。在日志分析应用开发中,非定时性的任务都定义成为此类型。 ConcurrentMap:这个以前常常使用,因为效率要远远高于Collections.synchronizedCollection和synchronized。后面还会提到实践中的几个实用的技巧来防止在高并发的情况下出现问题。在日志

6、分析应用中,此类型的Map作为保存日志文件分析状态的缓存(日志文件分为两种状态:分析中,分析结束。如果不存在于Map中就认为尚未分析,那么将其纳入Map然后启动分析处理线程工作,如果存在于Map中标示为分析中,那么将不会再分析此文件,如果分析结束并且被输出,将会标示此文件分析结束,异步清理线程将会定时根据策略删除或移动文件)。 ExecutorService:内置线程池,异步执行指派任务,并可以根据返回的Future来跟踪执行情况。在日志分析应用开发中,被用于非定时性任务执行。 ScheduledExecutorServ

7、ice:内置线程池,定时异步执行指派任务,并可以根据返回的Future来跟踪执行情况。在日志分析应用开发中,被用于定时性任务执行。 以上就是被使用到的接口,具体实现策略配置就不在此赘述了。 整体结构设计:整体设计还是基于开始设定的两个原则:灵活配置,高效性(任务分解,并行流水线执行)。说到任务分解又会想起读书时候的离散数学中关键路径等等。任务分解还是要根据具体情况来分析和设计,不然并行不但不会提高效率,反而还降低了处理效率。就日志分析来看,主要的处理过程可以分成这么几个任务:1.            检查日志来源目录,

8、锁定需要分析的文件。(执行需要时间很短,可通过定时间隔执行)。2.            分析已经被锁定的日志文件,产生分析结果。(执行需要时间根据日志文件大小来决定,因此需要线程异步执行,结果根据设定拆分成细粒度包,降低输出线程等待时间)。3.            检查分析结果队列。(执行需要时间很短,当前是配置

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。