`

透过CAT,来看分布式实时监控系统的设计与实现

阅读更多

CAT简介

CAT(Central Application Tracking),是基于纯Java开发的分布式实时监控系统。开源代码托管在GitHub(搜索CAT即可),作者是吴其敏(qmwu2000)和尤勇(youyong205)。

 

产品相关分享在网上可以找到:

 

 

 

  • 看大众点评如何通过实时监控系统CAT打造7*24服务-尤勇@QCon高可用架构群 2015

     

     

  • 分布式监控系统的设计与实现-尤勇@QCon上海2015

     

     

  • 大众点评网监控系统架构剖析-尤勇@2013第二届华东架构师大会

     

     

  • 大众点评网监控平台剖析-吴其敏@QCon杭州2012

     

     

 

CAT现状

CAT采用非常开放的Apache License开源,在国内已经有100多家互联网公司在使用和评估,包括大众点评网、携程网、猎聘网、陆金所和找钢网等。截至2016年3月,CAT已经获得了1000多个stars。

 

透过CAT,来看分布式实时监控系统的设计与实现

设计目标

透过CAT,来看分布式实时监控系统的设计与实现

 

 

 

  • 可扩展:支持分布式、跨IDC部署,横向扩展。

     

     

  • 高可用:所有应用都可以倒下了,需要监控还站着,告诉它们发生了什么。

     

     

  • 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。

     

     

  • 全量数据:小概率事件是常态,百万分之一的概率,碰到了就是100%。

     

     

  • 高吞吐:要想还原真相,需要全方位的监控和度量,必须要有超强的处理吞吐能力。

     

     

  • 故障容忍:CAT本身故障不应该影响业务正常运转,CAT挂了,应用不该受影响,只是监控能力暂时减弱。

     

     

  • 不保证可靠:允许消息丢失,这是一个很重要的trade-off,虽然目前CAT可以做到4个9的可靠性。

     

     

 

CAT架构

架构追求

简单、去中心化、分工协作,

两层结构,除了依赖外部存储如HDFS和MySQL外,不依赖其他系统,CAT内部全面采用组件化设计和实现。CAT每天消息量巨大,一台机器是不能处理全部流量,必须分片处理,均衡负载。

 

透过CAT,来看分布式实时监控系统的设计与实现

 

业务应用目前使用CAT API进行埋点,后台异步线程采用TCP长连接方式,将消息源源不断地传输到后台服务器;CAT具有fail-over机制,在后台服务器不可用时会自动切换到另一台可用服务器。CAT目前使用native协议做序列化和反序列化,将来会考虑支持更多协议,比如thrift。

 

消息被送到后台,经反序列化后会被放入队列,实时消费调度器会将消息分发到所有消费者内部队列,每个消费者只需处理自己的消费队列,各消费者之间彼此相对独立,如果消费速度太慢,导致消费队列满,则新来的消息会被丢弃。典型消费者都采用实时增量计算的方式,流式处理消息,产生的报表会在当前小时结束后保存到中央数据库中。

 

日报表采用后台作业的形式,由24个小时报表合并得到。周报表则由7个日报表合并得到,以此类推。

 

CAT控制台,即UI层,负责接收用户请求,从后台存储中将报表信息取出显示。对于实时报表,直接通过HTTP请求分发到相应消费机,待结果返回后聚合展示;历史报表则直接取数据库并展示。

 

所有原始消息会先存储在本地文件系统,然后上传到HDFS中保存;而对于报表,因其远比原始日志小,则以K/V的方式保存在MySQL中。

 

消息处理

 

消息处理分五个阶段:

收集、传输、分析、存储和展示。

 

收集阶段:

负责业务应用日志的埋点和采集。CAT目前提供多种语言的客户端供业务应用程序调用,埋点结果以消息树的形式存入传输队列。如果队列满,则会自动丢弃当前消息。

 

传输阶段:

CAT客户端负责将客户端消息传输到后端,CAT消费机负责接收消息。传输前CAT客户端会与CAT消费机建立TCP长连接,不断地从客户端队列中取出消息树,序列化后写入网络;CAT消费机则不断地从网络中取出数据,反序列化后放入消费队列。

 

分析阶段:

负责报表生成。实时消费调度器会将消费队列消息取出,分发给每个消费者内部队列;报表分析器只会从自己的报表队列中取出消息树,逐个消费,更新报表模型。CAT以小时为单位形成报表,原始日志转储(raw log dump)是一个特殊的分析器,它不生产报表,而是将消息存入本地文件系统。

 

存储阶段:

负责报表和原始日志的存储,目前报表会存在MySQL中,原始日志压缩后存在HDFS中长久保存。保留时长取决于存储容量的大小,一般报表会保存3个月以上,原始日志保存一个月。

 

展示阶段:

负责数据的可视化。作为用户服务入口,负责报表和原始日志的输出显示。对于实时报表请求,会向各个消费机分发请求,并将结果聚合后输出HTML,在浏览器展示;历史报表会直接取自数据库。XML数据输出是另一种内置的数据展示方式,方便基于CAT开放外围工具。

 

日志埋点

 

日志埋点是监控活动的

最重要环节之一,

日志质量决定着监控质量和效率。当前CAT的埋点目标是

以问题为中心,

像程序抛出exception就是典型问题。我个人对问题的定义是:

不符合预期的就可以算问题。

比如请求未完成,响应时间快了慢了,请求TPS多了少了,时间分布不均匀等等。

 

在互联网环境中,最突出的问题场景,我的理解是,跨越边界的行为。包括但不限于,HTTP/REST、RPC/SOA、MQ、Job、Cache、DAL; 搜索/查询引擎、业务应用、外包系统、遗留系统; 母/子公司, 第三方网关/银行, 合作伙伴/供应商之间;还有各类业务指标,如PV、用户登录、订单数、支付状态、销售额。

 

CAT提供API支持的语言有:Java,.NET,将来打算支持C/C++、NodeJS、Go、PHP、Python等。

 

领域建模

 

此模型可以覆盖大部分业务应用的日常埋点需求。各种类型都有个性化分析和展示。

 

透过CAT,来看分布式实时监控系统的设计与实现

 

消息树

 

透过CAT,来看分布式实时监控系统的设计与实现

 

CAT消息树如实记录真实用户请求的处理时序,这些请求可能被分布在多台机器上。消息树可以丰富地表达嵌套关系、先后次序和并行处理,这将有助于开发者清楚的了解用户请求到底是怎么被一步步执行的,尤其在追踪一些疑难杂症时,这会特别有用。

 

透过CAT,来看分布式实时监控系统的设计与实现

 

只要遵循CAT埋点规范,CAT会自动地将多台机器上的消息树串起来,可以逐层展示。

 

透过CAT,来看分布式实时监控系统的设计与实现

 

当然也有另一种更适合于人的视图,方便识别突出问题,毕竟人对图形识别更加擅长。

 

CAT API

 

API力求

精简,

将来还有进一步

优化空间。

大部分CAT埋点应该在底层基础架构中完成,一般应用层不需要做大多埋点。有些产品使用如java-agent等方式埋点,CAT埋点也可以采用,埋点质量取决于现有应用代码的规范程度和覆盖范围。

 

实时分析

 

CAT的实时性不是用户要看什么,CAT就实时计算出结果,呈现给用户;而是根据日志消息的特点(比如只读特性)和问题场景,量身定做的。CAT将所有的报表按消息的创建时间,一小时为单位分片,那么每小时就产生一个报表。当前小时报表的所有计算都是基于内存的,用户每次请求即时报表得到的都是最新结果,给人一种“实时”的感觉。对于历史报表,因为它是不变的,所以就实时不实时也就无所谓了。

 

对于内存增量计算,它可以分为:计数、计时和关系处理三种。计数又可以分为两类:算术计数和集合计数。典型的算术计数如:总个数(count),总和(sum),均值(avg),最大/最小(max/min),吞吐(tps)和标准差(std)等,其他都比较直观,标准差稍微复杂一点,大家自己可以推演一下怎么做增量计算。那集合运算,比如95线(表示95%请求的完成时间),999线(表示99.9%请求的完成时间),DAU(日活用户数)等,则稍微复杂一些,系统开销也更大一点。关系处理则涉及图的运算,这里不细述。

 

报表建模

 

了解增量计算很重要,但最终需要落实到各个不同的报表上。一个报表往往有多个维度,以transaction报表为例,它有5个维度,分别是应用、机器、大类、小类和分布情况。如果全维度建模,虽然灵活,但开销将会非常之大。CAT选择固定维度建模,可以理解成将这5个维度组织成深度为5的树,访问时总是从根开始,逐层往下进行。

 

CAT为每个报表单独分配一个线程,所以不会有锁的问题,所有报表模型都是非线程安全的,其数据是可变的。这样带来的好处是简单且低开销。

 

报表代码是使用自研的maven plugin自动生成的。所有报表是可合并和裁剪的,可以轻易地将2个或多个报表合并成一个报表。在报表处理代码中,CAT大量使用访问者模式(visitor pattern)。

 

消息存储

 

消息存储是CAT最有挑战的部分。关键问题是消息数量多且大,像大众点评和携程每天消息数在300-400亿左右,大小有50TB,也就是说每秒消息数在50-60万上下,每秒大小在1GB左右。如果分10台机器处理,则每天每秒需要处理5-6万消息,100MB大小。如果网站流量来点波动的话,挑战就更大了。由于时间关系,这部分今天就不细述了(感兴趣的同学,欢迎加群与吴老师一对一交流)。

 

透过CAT,来看分布式实时监控系统的设计与实现

总结

CAT在分布式实时方面,主要归结于以下几点因素:

 

去中心化,数据分区处理;

 

基于日志只读特性,以一个小时为时间窗口,实时报表基于内存建模和分析,历史报表通过聚合完成;

 

基于内存队列,全面异步化,单线程化,无锁设计;

 

全局消息ID,数据本地化生产,集中式存储;

 

组件化、服务化理念,致力于工具间互通互联。

嘉宾介绍

吴其敏,互联网老兵,软件工匠,开源爱好者,一直深入代码一线,接触java近20年。现在携程网负责框架研发,曾任大众点评网首席架构师、任eBay&易趣资深架构师等。关注分布式系统框架、组件化系统开发,高质量数据建模和代码生成等。

互动问答

问题:业界类似解决方案,以及与CAT的异同?

 

业界有很多开源监控系统,但大多是基于日志行的(如ELK),CAT是基于日志树的。其中最主要的差异是监控源数据的质量。

 

问题:请问吴老师,CAT与应用间是否做了反馈机制,监控报警后是否会有应用重启,服务降级这种操作?点评内部的pigeon是否有这种服务健康检查包括自动降级的功能,能否谈谈您的看法?

 

监控可以理解为监和控。现阶段CAT的侧重点还是在监上,将来会考虑控的一面。要做到控,光CAT是不够的。

 

问题:CAT如何做到高实时性,又如何避免对应用本身性能,可用性等产生影响的?

 

CAT在编码的时候非常的关系性能,每一行代码都经过多次review。消息发送异步化也是避免对主线程造成性能和可用性干扰的重要手段。另外,CAT在设计时就要求做到:不保证可靠,如果后台出现可用性问题和性能问题,客户端会主动丢弃消息,确保应用可用。

 

问题:怎么解决埋点性能问题?特别是访问量大的应用,千万级的,出现问题很多?

 

这是个好问题。CAT不会帮你解决业务埋点的问题。监控埋点是一个领域,跟你要解决的问题非常相关,不同应用,不同场合,不同公司的历史阶段,应该采取不同的策略。对于访问量非常大的应用,CAT埋点要做到小而精,适当的时候可以在客户端做一下聚合。

 

问题:请问这里的消息树是怎么实现的?是自己规定流程自主研发吗?

 

只要使用CAT API埋点,消息树是自然而然形成的,无需特别处理。CAT中有示例代码,可以参考一下。

 

问题:请教吴老师cat server端集群部署时,且数据落本地磁盘,报表的统计基于全量数据还是只是开起任务的哪台机器上的数据,如果是全量的,数据是怎么汇总的?

 

CAT是主张全量日志分析的,全量数据落到每一台消费机上只是一个分片,CAT中所有报表都有内置将分片合并的能力,所有的报表在展示时会合并,做数据汇总。

 

问题:如果客户端上报大量size很大的日志,CAT有没有自保护?

 

有。CAT在客户端有保护机制,服务器端一般处理能力很强,有一定的保存措施,如丢弃消息之类的。但如果报表过大,则可能会出现内存问题。

 

 

http://blog.csdn.net/heyeqingquan/article/details/73733687?locationNum=4&fps=1

分享到:
评论

相关推荐

    基于EtherCAT的分布式测控系统设计与实现.pdf

    "基于EtherCAT的分布式测控系统设计与实现" EtherCAT是一种新型工业以太网总线,具有数据传输实时性高、可靠性好、系统结构拓扑灵活等优点。为了解决工业现场测控点分散、测控范围大、作业环境复杂的问题,我们...

    大众点评实时监控系统CAT

    ### 大众点评实时监控系统CAT #### CAT背景介绍 大众点评实时监控系统CAT是由大众点评网资深工程师尤勇开发的一款开源监控系统。该系统主要针对Java应用进行监控,并已经全面应用于大众点评的核心业务中。CAT的...

    深度剖析开源分布式监控CAT1

    1.背景介绍CAT整个产品研发是从2011年底开始的,当时正是大众点评从.NET迁移到Java的核心起步阶段。当初大众点评已经有核心的基础中间件、RPC组件Pi

    目前分布式链路追踪系统基本都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展而来

    目前,分布式链路追踪系统基本都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展而来。 分布式链路追踪系统的重要性在于,它可以帮助开发者和运维人员更好地了解系统的运行情况,发现问题所在,并...

    美团cat监控系统的服务器搭建

    美团cat监控系统是一种实时且接近全量的监控系统,主要针对Java应用进行监控。它集成了美团上海侧所有核心应用,广泛应用于中间件(MVC、RPC、数据库、缓存等)框架中,为美团各业务线提供性能指标、健康状况、监控...

    大众点评开源的实时应用监控平台 CAT.zip

    CAT 由大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控。 CAT 支持的监控消息类型包括:Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较...

    分布式测试平台任务管理子系统的设计与实现.pdf

    6. 分布式系统的设计原则:分布式系统设计要求系统各部分能够独立运行,且易于扩展。在测试平台中,服务器端和客户端的框架设计是基础,需要保证系统的稳定性和高效性。此外,服务器端还包含了Web子系统、任务管理子...

    CAT实时应用监控平台 v3.1.0.zip

    CAT实时应用监控平台是一款强大的系统监控工具,专为IT运维人员设计,用于实时监测和分析应用程序的性能和稳定性。在v3.1.0版本中,该平台可能包含了一系列优化和增强的功能,以提高监控效率和用户体验。这个压缩包...

    springmvc-cat实时监控demo

    **Spring MVC与CAT实时监控系统整合DEMO详解** 在现代Web开发中,Spring MVC作为Java企业级应用的主流框架,提供了强大的MVC架构支持。然而,随着应用规模的扩大,性能监控变得至关重要。CAT(Chunmi Application ...

    SpringMVC监控系统案例(cat)

    而Cat则是由Dianping(大众点评)开源的一款实时分布式服务监控系统,它专注于服务和系统的性能监控,帮助开发者及时发现并处理问题。在"SpringMVC监控系统案例(cat)"中,我们将探讨如何结合这两者来构建一个全面...

    大众点评CAT监控系统

    大众点评CAT监控系统是一款专为分布式应用设计的性能监控平台,尤其在互联网行业中广泛应用。CAT,全称为"Chinase Application Tracking",旨在提供实时、全面的系统运行状况监控,帮助开发者快速定位并解决问题,...

    大众点评CAT监控解析

    总体而言,CAT监控系统的设计和实现解决了点评在监控领域的诸多痛点,它不仅能够实时收集和分析大量的监控数据,还能够提供有效的数据可视化和问题定位工具,大大降低了监控工作的复杂度,提高了效率。随着CAT系统的...

    深度剖析开源分布式监控CAT

    CAT(CentralApplicationTracking)是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团各业务线...

    fitcrack:基于hashcat的分布式密码破解系统

    Fitcrack(分布式密码破解系统) 注意:可以在找到详细的文档和其他信息 本 README 描述了如何安装和运行 Fitcrack 分布式密码破解系统。 部署方式有四种: 使用安装程序+(推荐方式) 使用安装程序 +(推荐方式...

    CAT监控资料包含部署

    该系统可以与多种流行框架(如MVC框架、RPC框架、数据库框架和缓存框架等)集成,从而实现对应用程序各层次的运行状况进行全面监控。 **主要功能特点**: 1. **细致的性能监控**:CAT能够统计代码段的执行时间,...

    消防指挥中心分布式可视化调度系统设计初探.pdf

    提出了一种新型的分布式可视化调度系统设计方案,本设计初探的重点在于分析传统系统的不足,探讨分布式系统设计的必要性,详细介绍了分布式可视化调度系统的设计原则、核心优势、应用场景以及如何实现系统的高效扩展...

    移动视频监控系统的设计与实现

    ### 移动视频监控系统的设计与实现:关键技术与架构 #### 一、引言与背景 随着科技的迅速发展,移动视频监控系统逐渐成为保障公共安全、提高城市管理效率的重要工具。传统的固定视频监控系统受限于物理位置,难以...

Global site tag (gtag.js) - Google Analytics