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:安卓埋点和全链路监控工具;