您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
(avg什么意思)-avg变量的定义
数据,系统,报表(avg什么意思)-avg变量的定义
发布时间:2020-12-06加入收藏来源:互联网点击:
springcloud官方按照传输方式分成了三种启动服务端的方式:Sleuth with Zipkin via HTTP,Sleuth with Zipkin via Spring Cloud Stream,Spring Cloud Sleuth Stream Zipkin Collector。
由于采取HTTP的传输方式会存在如下弊端:一是每次发送的时候涉及到连接和发送过程;二是当Zipkin Server关闭或者重启过程中,因为客户端收集信息的发送采用http的方式会被丢失。这里可以在通信采用socket或者其他效率更高的通信方式,以及采用异步传输信息的方式在Zipkin Client和Server之间加入MQ来解决。
在信息传递中加入MQ
要将http方式改为通过MQ通信,需要将依赖的原来依赖的io.zipkin.java:zipkin-server换成spring-cloud-sleuth-zipkin-stream和spring-cloud-starter-stream-rabbit。
调用链跟踪系统(二):Cat介绍
(1)概述
CAT(Central Application Tracking) 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。CAT的原型和理念来源于eBay的CAL系统,最初是吴其敏在大众点评工作期间设计开发的。他之前曾CAT不仅增强了CAL系统核心模型,还添加了更丰富的报表。CAT提供了 Java, C/C , Node.js, Python, Go 等多语言客户端,在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团点评各业务线提供系统的性能指标、健康状况、监控告警等。自2014年开源以来,除了美团点评之外,CAT还在携程、陆金所、猎聘网、找钢网等多家互联网公司生产环境应用,项目的开源地址是https://github.com/dianping/cat/。
CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是48分钟40秒,基本上看到48分钟38秒数据,整体报表的统计粒度是分钟级;第二个优势,监控数据是全量统计,客户端预计算;链路数据是采样计算。CAT产品价值
减少故障发现时间降低故障定位成本辅助应用程序优化CAT优势
实时处理:信息的价值会随时间锐减,尤其是事故处理过程中全量数据:全量采集指标数据,便于深度分析故障案例高可用:故障的还原与问题定位,需要高可用监控来支撑故障容忍:故障不影响业务正常运转、对业务透明高吞吐:海量监控数据的收集,需要高吞吐能力做保证可扩展:支持分布式、跨 IDC 部署,横向扩展的监控系统(2)CAT整体设计
主要分为三个模块:CAT-client、CAT-consumer、CAT-home。
Cat-client 提供给业务以及中间层埋点的底层SDK。Cat-consumer 用于实时分析从客户端提供的数据。Cat-home 作为用户给用户提供展示的控制端。在实际开发和部署中,Cat-consumer和Cat-home是部署在一个JVM内部,每个CAT服务端都可以作为consumer也可以作为home,这样既能减少整个层级结构,也可以增加系统稳定性。
在实际开发和部署中,cat-consumer和cat-home是部署在一个jvm内部,每个CAT服务端都可以作为consumer也可以作为home,这样既能减少整个CAT层级结构,也可以增加整个系统稳定性。
上图是CAT目前多机房的整体结构图:
路由中心是根据应用所在机房信息来决定客户端上报的CAT服务端地址每个机房内部都有的独立的原始信息存储集群HDFScat-home可以部署在一个机房也可以部署在多个机房,在做报表展示的时候,cat-home会从cat-consumer中进行跨机房的调用,将所有的数据合并展示给用户实际过程中,cat-consumer、cat-home以及路由中心都是部署在一起,每个服务端节点都可以充当任何一个角色(3)CAT客户端设计
客户端设计是CAT系统设计中最为核心的一个环节,客户端要求是做到API简单、高可靠性能、无论在任何场景下客户端都不能影响各业务服务的性能(监控只是公司核心业务流程一个旁路环节)。以下客户端设计以及细节均以java客户端为例子。
设计架构
CAT客户端是java,客户端在收集端数据方面使用ThreadLocal,是线程本地变量,也可以称之为线程本地存储。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。
在监控场景下,为用户提供服务都是web容器,web容器比如Tomcat或者Jetty,后端的rpc服务端比如dubbo或者点评自研的服务框架pigeon,也都是基于线程池来实现的。业务方在处理业务逻辑时基本都是在一个线程内部调用后端服务,数据库,缓存等,将这些数据拿回来在进行业务逻辑逻辑封装,最后将结果展示给用户。所以将所有的监控请求作为一个监控上下文存入于线程变量就非常合适。
如上图业务执行业务逻辑的时候,就会把此次请求对应的监控存放于线程上下文中,存于上下文的其实是一个监控树的结构。在最后业务线程执行结束时,将监控对象存入一个异步内存队列中,CAT有个消费线程将队列内的数据异步发送到CAT服务端。
API设计
当设计者对监控以及性能分析有足够深度的理解下,才能定义好监控的API,监控和性能分析所针对的场景有如下几种
一段代码的执行时间,一段代码可以是URL执行耗时,也可以是SQL的执行耗时一段代码的执行次数,比如程序抛出异常记录次数,或者一段逻辑的执行次数定期执行某段代码,比如定期上报一些核心指标,jvm内存、gc等指标关键的业务监控指标,比如监控订单数、交易额、支付成功率等在如上的领域模型的基础上,CAT设计自己核心的几个监控对象 Transaction、Event、Heartbeat、Metric
一段监控API的代码示例如下
序列化和通信
序列化和通信是整个客户端包括服务端性能里面很关键的一个环节
CAT序列化协议是自定义序列化协议,自定义序列化协议相比通用序列化协议要高效很多,这个在大规模数据实时处理场景下还是非常有必要的。CAT通信是基于Netty来实现的NIO的数据传输,Netty是一个非常好的NIO开发框架,在这边就不详细介绍。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |