天天看点

pinpoint agent性能优化方面官方文档翻译pinpoint agent 的性能优化

文章源地址

https://naver.github.io/pinpoint/techdetail.html#optimizing-performance-of-the-pinpoint-agent

pinpoint agent 的性能优化

最后我们将介绍怎样去优化pinpoint的agent

用二进制的格式(Thrift)

你可以使用二进制的格式化(Thrift)提升转码速度,尽管这是比较难用和调试的,这可以通过减少数据产生的量从而提升网络带宽使用的效率;

使用可变长度转码和格式化来优化上报的记录数据

如果你转换一个long型的整数成为string,数据的大小将是8bytes,然而,如果你用可变长度的转码,数据长度取决于当前数字,将变为1-10bytes.为了减少数据的大小,pinpoint使用thrift的Compact Protocol方法优化记录数据的转码来减少数据大小;pinpoint agent通过将根方法的剩余时间转换为向量值来减少数据的大小.

可变长度转码
在google 开发者"Base 128 Varints"查看更多的可变长度转码,

pinpoint agent性能优化方面官方文档翻译pinpoint agent 的性能优化

图形4 :比较等长的转码和可变长度的转码

如图4所示,不同的方法调用和完成,你需要测量6个不同的时间点;使用等长的转码,程序需要48bytes(6点*8bytes)

同时,pinpoint agent使用可变长度的转码,记录的数据使用相应的格式转化,基于根方法的开始时间,在其他节点计算不同的时间信息(向量值),因为向量值是一个小的数字,使用13bytes而不是48bytes,仅仅消耗一个小的资源.

如果消耗更多的时间执行方法,他讲增加数字消耗bytes的长度,尽管如此,他仍旧比等长的转码更有效率;

用常量表替换重复的API信息,sqls和String

我们想要pinpoint能够实现代码级的追踪,然而,这存在术语增长数据大小的问题,由于这个术语,每一次发送数据到服务端都有一个很高带宽消耗.

为了解决这个问题,我们采用了在远程hbase服务端常量话的存储策略,因为每次都发送"method A"到pinpoint的collector将会超载,pinpoint agent转换"method A"为一个持久化在HBase里的ID,当用户在网站检索的时候,pinpoint web通过搜索Hbase中类似的ID来整理这个追踪,这种方法同样适用于减少频繁适用的sql语句的数据量;

处理大量的采样数据

线上的请求量是非常大的,一个服务每天处理超过200亿的请求.扩展网络带宽是一个简单的方式去适配这么大的请求量,但是,这是最消耗性能的解决方法.

在pinpoint中,你可以收集抽样的数据,而不是追踪每个请求.在开发环境请求比较少,所有数据都被收集.在生产环境中请求量非常大,仅仅1-5%的请求就足以分析整个应用的状态,使用采样的方法,你可以最少使用网络带宽和消耗服务器资源.

Pinpoint的采样方法
pinpoint支持计数采样器,如果设置为10将只采集10个请求中的1个,我们计划增加新的更高效的采样器

使用异步的最小化应用线程数传递数据

pinpoint在转码数据和提交远程消息的时候不会影响应用线程,而是使用其他线程.

通过udp传递数据

和google的Dapper不同,Pinpoint传递数据通过网络确保传输速度.当网络流量大的时候传输数据会成为一个问题.在这些解决方案中,pinpoint agent使用udp的方式确保服务不受影响.

注意
数据转换的Api可以被替换成一个接口.也可以被转换成一个其他方式的实现,比如说本地文件.