|
|
|
|
移动端

1.7.1 消息队列处理

《开源安全运维平台--OSSIM最佳实践》第1章OSSIM架构与原理,本章从OSSIM起源讲起,介绍了目前运维人员现状,逐步谈到应用SIEM的必要性,进而介绍OSSIM架构与组成原理,另外还介绍了基于插件的日志采集思路,提出标准化安全事件的全新理念,详细分析了OSSIM的高可用架构与实现方法。本节为大家介绍消息队列处理。

作者:李晨光来源:清华大学出版社|2016-01-14 16:56

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

1.7 分布式消息队列

1.7.1 消息队列处理

企业日志数量正在以指数级形式高速增长,日志数据的具有海量、多样、异构等特点,基于传统的单一节点混合式安装的OSSIM平台(指OSSIM 4.4及以下系统),无法满足海量日志分析要求。在OSSIM 4.4以后的系统中增加了中间件RabbitMQ,可通过RabbitMQ将系统中各组件解除耦合,避免了系统中运行模块的影响(例如MySQL的写操作等),这样设计可实现分布式日志分析平台的要求。

在网络出现故障前或故障过程中,各种设备和服务器会发送大量日志到日志服务器,在原先的设计中,这样的日志会直接写入数据库或者/var/log的某个文件中,在故障状态下的高并发情形下,会对数据库服务器造成巨大的压力,这是在进行日志查询操作时,变得相应延迟加剧,很容易就超过了系统的最大负载。

如图1-42中所示为早期日志收集的方案,在图中PHP脚本从数据库中读取数据的典型流程,此图包括打开数据库连接、运行任意SQL和语句、读取SQL语句找到的结果、关闭数据库连接,最后在HTML页面上将所或内容显示给用户。

上述实例中,每个步骤都存在瓶颈,数据库可能未调整为最佳运行状态,SQL语句使用的数据表可能未被优化,其中还有很多需要管理员注意的地方。如果没有缓存,用户在每次请求PHP脚本时都会碰到问题,每次都会导致性能降低。如果使用缓存来存储SQL语句的结果,这种性能的损耗将不复存在。

如何解决这种问题呢,在OSSIM中采用异步操作的方式,其核心思想就是消息队列(在OSSIM系统中,消息(Message)是由通信的双方所需要传递的日志消息),通过消息队列,将短时间高并发产生的日志消息,存储在消息队列中,从而削平高峰期的并发事务,这样可以有效抵御大量涌入的日志,对单机数据库系统的冲击,也就相对改善数据库系统性能。

以OSSIM中的SIEM事件存储来说明问题,设备将日志发送到Sensor,经过归一化处理之后发往OSSIM Server,关联引擎在对其继续加工,会同时将数个任务收集事件写到数据库,因此数据库写入量很大,当同时查询时并发操作将严重占用有限的I/O通道。

由于关联引擎的业务逻辑的处理比较复杂,往往MySQL数据库的写操作量更大,所以在OSSIM4.0之前系统中没有采用消息队列时,大负荷时往往系统响应迟缓。

但OSSIM 4.4 之后采用消息队列的思想,重构了系统之后,加入了消息队列服务器,结构如图1-43所示。

消息队列服务器中有一个进程单独对消息队列进行处理,首先判断消息队列中是否有待处理的消息,如果有的话,那么将其取出,并进行相应地处理。消息队列处理流程如图1-44所示,就这样通过消息队列将高并发用户请求进行异步操作,然后逐一对消息队列中进行出队同步操作,也避免了并发控制的难题。

消息队列只是解决并发问题的其中一种方式,在OSSIM中往往需要结合多种不同的技术方式来共同解决,比如负载均衡、反向代理等方案。这里,虽然以异常日志为例,但是"麻雀虽小五脏俱全",日志写入文件的高并发操作也同样适用于数据库的高并发,所以研究该案例具有一定指导意义。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Eclipse Web开发从入门到精通(实例版)

本书由浅入深、循序渐进地介绍了目前流行的基于Eclipse的优秀框架。全书共分14章,内容涵盖了Eclipse基础、ANT资源构造、数据库应用开发、W...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊