从AOP到分布式链路追踪

文章目录

  • 1、aop介绍
    • 2.1 spring aop
    • 2.2 jdk动态代理
  • 2、分布式链路追踪
    • 2.1 日志规范
    • 2.2 Spring Log组件
    • 2.3 MDC介绍以及使用
  • 3、接入
    • 3.1 侵入式接入
    • 3.2 aop接入
  • 4、中间件skywalking
    • 4.1 基本原理介绍
    • 4.2 agent示例

1、aop介绍

面向切面的编程Aspect Oriented Programming,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。

2.1 spring aop

三个基础概念:

  • advice:定义拦截行为,以及执行时机。比较常见的,方法执行之前进行拦截,执行之后,环绕,以及发生异常之后等执行时机。
  • pointcut:切入点。哪些方法需要增强,通常使用execution表达式进行增强。
  • weaving:代码织入。通常代表spring对advice和pointcut的集合处理。
    从AOP到分布式链路追踪_第1张图片
    SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,并没有提供一种新的AOP实现方式,其底层逻辑为jdk与cglib动态代理。

2.2 jdk动态代理

package spring.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class ProxyTest {
    
//    private static Log logProxy = new LogD();
//    private Advice advice;
    public static void main(String[] args) {
        Log log = (Log) Proxy.newProxyInstance(ProxyTest.class.getClassLoader(), LogD.class.getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("pre invoke log");
                Object result = method.invoke(new LogD(), args);
                System.out.println("after invoke log");
                return result;
            }
        });
        log.info("this is test !!1",222);
    }

}

interface Log {
    void info(Object... args);
}

class LogD implements Log {

    @Override
    public void info(Object... args) {
        System.out.println(String.format("log info %s", Arrays.toString(args)));
    }
}


2、分布式链路追踪

Dapper

故障快速定位:可以通过调用链结合业务日志快速定位错误信息。

链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来。

链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。

从AOP到分布式链路追踪_第2张图片
https://pics2.baidu.com/feed/7af40ad162d9f2d3fd977039b26b8a1a6127ccf6.png?token=30fa37fc2fd2aef6c3d0274b2b3fc173

2.1 日志规范

主要记录TraceId,SpanId等链路分析标识。

2.2 Spring Log组件

有时间再来更新吧。。

2.3 MDC介绍以及使用

logback自定义MessageConverter

3、接入

3.1 侵入式接入

3.2 aop接入

4、中间件skywalking

4.1 基本原理介绍

4.2 agent示例

你可能感兴趣的:(分布式,分布式,java,spring)