分布式服务链路追踪的解决方案

随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构和容器技术的兴起,看似简单的一个应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成;当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,今天介绍的分布式服务链路追踪就能很好的解决这样的问题。

它可以做什么呢?

  • 用户行为链路:如浏览页面,观看视频,购买商品,收藏,评论等等行为。
  • 服务链路追踪:快速定位异常
  • 大数据AI画像:一个链路非业务的动态行为数据,才是最贴近用户的素材

服务链路追踪的基本出发点——记录足迹

  

  •     (1)入口处生成链路标识traceId
  •     (2)传递traceId参数给下层业务方法
  •     (3)各方法内部记录访问的信息

但是这种方式,违背了我们面向对象原则:高内聚、低耦合。严重的和业务代码耦合在一起。链路追踪不能成为我们的主流业务方法,增值性的服务不能影响我们的主流业务(异常、耗时)

单系统链路追踪-优化方案

我们可以采用ThreadLocal变量来存储traceId(关于threadLocal使用自行百度),traceId就可以在当前线程的范围内访问。

/**
 * @desc
 * @author lizehao
 * @company 连连支付
 * @date 2018年12月30日上午10:40:49
 */
public class TraceDataHolder {

	private static ThreadLocal<String> instanceHolder = new ThreadLocal<String>();

	public static void setTraceId() {
		String traceId = instanceHolder.get();
		if (StringUtils.isEmpty(traceId)) {
			traceId = UUID.randomUUID().toString();
			instanceHolder.set(traceId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值