微信号:gh_2e633dc8619c

介绍:我们是产品质量的守护者,我们所做的一切就是保证质量!我们的目标就是将质量保证服务化,做服务的Provider!

高性能服务器架构--在日志数据校验中的运用(上篇)

2017-03-24 12:35 张黎
1
前言

随着业务量的增多,对服务日志自动化校验的需求也变得比较迫切,线上一些重大故障都可以从日志中实时分析发现。但是目前的校验脚本等工具存在各种问题,无法满足当前业务需求,所以开发高性能的日志自动化校验工具成为必然。下面从三个方面来阐述该主题。

2
项目背景

目前线上由于没有实时的日志校验自动化流程,导致需要人工进行查看,效率低下。具体表现为:


  • 人工进行报警的汇总分析发信,耗时较长

  • 依赖人的经验,没有将经验固化(文档化,流程化,标准化),对后续的交接造成一定的风险;

  • 一些重复度较高的校验工作本来可以自动化实现,但是一直没有做;

  • 目前的校验脚本等工具实时性、可维护性、可扩展性、健壮性等都欠佳,无法满足实际需求;

3
项目目标

从项目立项开始,项目的目标可以概括为以下几个方面:

  1. 将一些重复度较高的、风险较高、适于自动化的日志校验做起来,减少人力工时投入,节约成本;


  2. 线上日志实时校验系统在实时性、易用性、可扩展性、可维护性、健壮性等核心指标上大幅优于之前的系统,达到业界的先进水平;


  3. 通过线上日志实时校验系统的开发,建立一套完整地监控报警体系,提升对于线上服务的监控能力,提升效率,将监控报警体系标准化、流程化;


在进行技术框架选型时,我们也制定了一些基本的要求,具体的要求内容如下:

  • 技术文档齐全,讲述详细、完备、准确,且更新的频率较高,相关社区活跃,大公司采用,用户比较多;(这个最重要)

  • 处理快、实时性好,方便可靠,有容错机制;

  • 安装、操作简单,后续可升级,且兼容性问题较少;


4
基本架构

整个架构分为实时输入流和实时处理两个部分。其中实时输出流处理流程如图一所示:

图一

实时输入流表示日志收集系统,实时处理表示进行日志数据处理的计算模型,实时输出流就是调用的各种业务接口。


由于对实时、高性能有较高的要求,所以会运用缓存、分布式这些比较核心的策略。在实时处理模型中主要就是用的这两种策略, 其中实时处理模型的具体架构如图2所示:

图二

由于需要满足高性能的要求,所以详细梳理了,缓存、分布式这些比较核心的策略。其具体的内容如下:

1

缓存策略

缓存:   将规则文件缓存,序列化(空间换时间)。

这其实就是时空转换基本思想的一种运用。时间就是时间资源,包括CPU、I/O读写等,空则是空间资源,包括内存、网卡带宽等


方法1:

每个处理节点都独自地获取文件,各自进行解析和数据的校验。


优点:省去了序列化的过程,网络负载较低,占用内存较少,各个处理节点同质化,在开发复杂度上有一定的下降。


缺点:从软件工程的角度看,处理节点的功能较多,没有做到高内聚的要求,而且耦合度也太高,不利于后续软件的维护、开发、扩展,另外多个节点如何保证获取的规则文件的一致性也是一个大的问题。


方法2:

将数据校验和规则文件的获取、序列化分开,规则文件的获取、序列化都集中在一个节点处理,数据校验由另外的节点进行处理。


好处:功能集中,高内聚低耦合,方便问题定位;缓存、序列化只需要一次,比较节省时间,通过ZooKeeper在一定程度上可以保证规则文件的一致性。


坏处:系统的鲁棒性较差,单处理节点若出现问题则会影响到后续节点的工作,需要考虑复杂的容错机制,增大了开发和维护的成本。


关于缓存的清理:

  1. 使用字段判断逻辑:在ZooKeeper中建立规则文件md5值的key、value,在单处理节点的一个线程中实时监控该md5的变化,若发生变化则自动清理原来的缓存,加载新的规则文件缓存。

  2. 使用控制命令:可以通过手动执行控制命令,重新加载本地的规则文件。


A方法会消耗一部分的CPU资源,但是不需要人工干预,自动化程度较高,但是开发复杂度较高。

B方法虽然需要手动执行,但是使用灵活简单,开发复杂度较低。


3

分布式策略

分布式:采用流式计算架构,以分布式的方式实时处理数据流。


多进程、多线程相结合,每个工作进程包含多个处理线程,运行于多台机器上,充分利用机器的计算资源,并且具有容错机制,能够保证数据被处理。


由于这种实时的数据流处理需要构建大量的进程,传统的依靠配置文件来配置整个集群的做法就有点不合时宜了,目前比较好的方式是集中管理所有的进程,具体的技术选型如ZooKeeper充当动态集群中心来管理进程。


5
结束语

本篇内容主要介绍了日志数据校验系统中用到的高性能服务架构策略以及思考的过程,后续还要进一步讨论开发类似系统的代码复杂度、以及如何测试高性能架构的代码以及代码的迭代更新等问题。有问题欢迎留言交流。


欢迎关注铸盾师,解锁更多精品文章

铸盾师公众号









 
猜您喜欢 【视频】►天眼:黑客入侵 这位职场参谋长,把家里的小保姆教成了雅思老师,她说想要升职加薪只需36计 微软终于抛弃IE了 但新浏览器依旧难逃开放和封闭困境 用Golang写一个搜索引擎(0x03) XML是是什么及XML与HTML的区别