让日志飞起来,如何去设计一种兼具性能与实时性的日志系统

来源:互联网 发布:车博士绿色空间 知乎 编辑:程序博客网 时间:2024/05/30 04:26

在系统的设计中,我们打交道最多的往往是日志系统。应用系统的操作需要记录日志,网站的访问请求需要记录日志,程序的执行错误需要记录日志。。。

日志是庞大的,而且记录频率是相当频繁的,特别是在大型的网站,每秒的日志处理往往可以达到数万条,如何去记录和处理这些日志?

有些架构师偏爱于第三方的成熟日志组件,如NLog、log4net等等,有些则喜欢自己去构建适合自己的组件,对于一些要求并不高的系统,往往直接运用一个公共方法,将所日志直接记录到数据库中。

无论采用何种方案,其实都可归于两种模式,一种是将日志写入到本机的文件中,另一种则是写入到远程数据库或分布式文件系统。在要求并不高的场景下,这些是完全可以满足的。那么这种日志模式已经完美了么?当然是远远没有达到。写入到本机文件的方式最大的缺陷是满足了写入性能,却加大了整合与分析的成本,因为文件信息本身并不是一种关系数据,需要解读,而且在一定规模的系统中,往往采用了负载方式,将服务或站点部署在多个服务器上,整合是非常耗时的事情。而写入远程数据库或分布式文件系统的方式,降低了分析成本,却一定程度上牺牲了性能与稳定性,因为在设计系统的过程中,往往我们把网络环境假设为非稳定的。

另外,我们在系统的调研中,可能会遇到到一些监控的需求,监控其实也可以认为是日志的一种,只不过它最大的特点是实时性,显然,常规的日志系统或日志组件是无法做到的。

那么,针对目前的日志系统存在的一些问题,我们考虑重新设计一种新型的日志组件,其满足以下特点:

1、高性能,写入效率不低于本地文件系统;

2、易整合,部署在不同机器的同一种类型日志可以实时汇总到唯一的点上进行存储;

3、高稳定性,日志网络中任何节点的失效均不会影响主系统的正常运行,也不会影响日志系统的整体稳定

4、易解读,日志的存储要求是结构化的数据,便于后期的分析;

5、时效性,日志从记录到被显示到系统人员个人电脑的屏幕上不超过3秒钟的延迟;

6、多态型,可同时记录不同系统不同形态的日志而无需修改代码;

如果是你,你将采用什么样的方式去设计这套日志组件呢?

去年年初,我为公司设计了一套GISLOG的日志组件,可以说很好的满足了以上的要求,并稳定运行在了鲜贝网、华强电子网、电子世界触摸屏等系统中,但由于时间关系,今天先写到这里,稍有时间,我再逐步讲述我自己的设计思路,让我们一步步来实现这个全新的日志组件。