JaCoco代码测试覆盖率工具
这是通过字节码修改,添加打探针的方式实现的
加密与解密
可通过attack api实现字节码修改达到解密的效果,也可以通过原始class-->加密后的class-->自定义带解密功能的ClassLoader-->解密后的class来实现加密功能。
APM分布全链路跟踪技术
术语
- TraceID:一次调用唯一的ID,它由多个SpanID组成,可封装成对象Tracer
- SpanID:一次处理过程,可封装成对象Span;重要属性有:
- 名称:比如方法名;
- 上下文:包含了TraceID、ParentID等信息;可封装成对象SpanContext
- 开始、结束时间戳;
- Span与ParentID的关系:组成调用树信息;
- 参数:业务日志等附加信息;
- ParentID:处理的父节点;
- Sampling:采集信息,包含采样百分比等信息,一般采样在1/16(影响性能2%)~1/1024(影响性能0%)之间最好。
原理
- 方法级跟踪:对方法体用try-finally包装
- 跨方法跟踪:实际上是把Span放入ThreadLocal中实现的,在下一级取之中的Span如果有值则记录;
- 跨进程:通过把Span内容写到协议的请求头中去;
APM实现
- OpenResty:基于Nginx与Lua的高性能WEB平台,可用于处理高并发、动态网关等功能;
- Node.js APM:前端埋点工具;
- Android APM:安卓埋点和全链路监控工具;