dubbo 服务跟踪

本文探讨了在dubbo服务中实现traceId透传以进行服务跟踪的方法。通过测试验证了dubbo服务跟踪的可行性,分析了dubbo源码,展示了关键代码实现,并提出了日志跟踪的建议。
摘要由CSDN通过智能技术生成

本文的目标是改进dubbo,在各个dubbo服务之间透传traceId,实现服务跟踪

一、关于RPC


  在大型系统中,一个对外http服务的背后往往隐匿了多个内部服务之间的相互调用。因为性能、开发成本层面的考量,http协议并不适合内部服务之间的调用,为此产生了thrift、dubbo 等优秀RPC框架。

  thrift 的由facebook 开发,跨语言支持丰富是其最大的亮点,thrift定义了一种接口定于语言,通过自动化工具,生成client 端和server端代码。

  dubbo 是由一个由阿里开发的开源分布式服务框架,相对于于thrift,dubbo实现了完善的服务治理功能,包括:服务发现、路由规则、配置规则、服务降级、负载均衡等。

二、关于服务跟踪


  在微服务的趋势下,一次调用产生的日志分布在不同的机器上,虽然可以使用ELK的技术,将所有服务的日志灌入es中,但是如何将这写日志“穿起来”是一个关键问题。

  一般的做法是在系统的边界生成一个traceId,向调用链上的后继服务传递traceId,后继服务使用traceId 打印相应日志,并再向后继服务传递traceId。简称“traceId透传”。

  在使用http协议作为服务协议的系统里,可以统一使用一个封装好的http client做traceId透传。但是dubbo实现traceId透传就稍微复杂些了。

三、dubbo traceId 透传测试


  首先抛开实现,看一下实现透传成功的测试case

评价指标:

  (1) 调用链上的所有dubbo服务都有一个同样的traceId
  (2) 对业务代码无侵入,来的业务代码无需修改升级
  (3) 对性能无太大的影响

测试用例:

/**
 * 测试Service
 * Created by WuMingzhi on 2017/3/19.
 */
public interface GiftService {
   

    int getPrice(int giftId);
}
/**
 * provider端
 * Created by WuMingzhi on 2017/3/19.
 */
public class GiftServiceImpl implements GiftService{
   

    private static Random random = new Random();

    @Override
    public int getPrice(int i) {
        System.out.println("gift provider traceId:" + TraceIdUtil.getTraceId());
        int price = random.nextInt(i + 100);
        System.out.println("set gift price: " + price);
        return price;
    }
}
/**
 * consumer 端
 * Created by WuMingzhi on 2017/3/19.
 */
public 
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值