Java生鲜电商平台-SpringCloud分布式请求跟踪系…

2019-10-28 06:34:26来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Java生鲜电商平台-SpringCloud分布式请求跟踪系统设计与实践

Java生鲜电商平台-SpringCloud分布式请求跟踪系统设计与实践

 

Java生鲜电商平台微服务现状

  • 某个服务挂了,导致上游大量报警,如何快速定位哪个服务出问题?
  • 某个核心挂了,导致大量报错,如何快速定位哪里出了问题?
  • 应用程序的性能瓶颈?
  • 线上发布了服务,怎么知道一切正常?
  • App响应延迟,怎么确定有哪些服务导致?
   

如何解决

  1. 业务端去解决,通过日志,grep,awk,sed等等定位。
  2. 分布式请求跟踪系统。(帮助开发人员快速理解系统行为,快速定位问题的工具,分布式请求跟踪系统应运而生)

产品

   

设计需求

  • 基于日志的分布式请求跟踪系统

    • 业务侵入小
    • 将每个系统分散的日志聚合起来,并进行海量数据日志分析。
  • 核心---调用链

    • 每次请求生成一个全局唯一id,通过它将不同系统生成的日志串在一起,重组成调用链,使其价值达 1+1》2的效果。
    • 开发人员通过分布式请求跟踪链排查问题
    • 对多个请求进行统计和分析。

设计目标

  • 低侵入性
    • 作为非业务组件,尽量减少侵入或者无侵入其他业务系统,对于使用方透明,减少业务开发人员的负担。
  • 灵活的应用策略
    • 使使用方可以根据需求,自定义收集数据的使用范围和粒度。
  • 时效性
    • 从数据的产生和收集,到数据的分析与处理,再到最终的页面展现,尽可能快。
  • 可视化
    • 使用场景友好的用户视角,可读性高。

分布式请求跟踪系统使用的场景

场景一 调用链跟踪

一次请求调用过程的展示,以图形化方式梳理各个为服务端集群之间的调用关系,并记录整个调用过程的耗时,协助开发人员分析整个系统的瓶颈点与热点,从而优化系统。

 

一次调用的耗时     多次调用     访问量与耗时情况    

场景二 调用链的路径分析

对多条调用链进行分析,整理出集群之间的调用关系,计算出整个调用链路的关键节点、直接依赖、间接依赖 强度等等

   

场景三 调用来源分析

针对某一特定集群,整理出其他集群对其调用情况,防止错误调用情况的发生。

  image

场景四 调用量统计

实时统计各个计算的调用次数、QPS、平均耗时、最大耗时等信息,开发人员可以根据相关信息进行容量规划。

   

场景五 监控请求调用量

开发人员通过自定义正则表达式,对匹配该规则的URL进行实时监控,包括调用次数等等。。。。。。

   

整体架构设计

  • 埋点和生成日志

    • java探针-javaagent技术,通过本地socket将收集到的数据实时发送给本机上的日志收集节点agent,将本机上的多个java探针的日志数据发送到日志收集服务器集群。


         
  • 收集和存储日志

    • 日志收集服务器集群对数据进行格式化处理之后,分成三个工作流进行后续处理


         
  • 汇总和重组调用链

  • 分析和统计调用链

    • 原始数据直接存入到ES集群中,用于页面实时调用链的展示
    • 原始数据存入到本地的日志中,通过Flume上传到HDFS急群众,利用Hadoop集群定时的进行离线分析,分析后的结果存入到ES集群中,用于页面数据分析的展示。
    • 原始数据发送到Spark/Flink在线分析集群,进行QPS、平均耗时等实时数据统计,分别将计算结果保存到Redis集群和ES集群中,用于页面实时数据统计的展示。


         

整体架构


   

埋点和生成日志

  • 请求唯一标识(TraceID)
  • 时序标识(SequenceID)
  • 深度标识(DepthID)

重点是ID的生成,怎么生成呢?

ID体系设计

  • 请求唯一标识(TraceID)网关生成
    分布式id

  • 时序标识(SequenceID)
    每层从1开始递增,放在threadlocal里面。下一层继承上一层的深度,加一个点。

  • 深度标识(DepthID)

     

    点的个数递增    

开源产品选择

  • Pinpoint
  •  Apache SkyWalking 

  •  

     


原文链接:https://www.cnblogs.com/jurendage/p/11751529.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java中常用的四种线程池

下一篇:手把手教你怎么使用云服务器