远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
    • 分布式一致性协议之三阶段提交协议(3PC)
    • 分布式一致性协议之NWR协议
    • 分布式一致性协议之Gossip协议
    • 分布式一致性协议之Paxos协议
    • 分布式一致性协议之Raft协议
    • 分布式一致性协议之Lease机制
    • 分布式系统设计策略之心跳检测
    • 分布式系统设计策略之高可用
    • 分布式系统设计策略之容错性
    • 分布式系统设计策略之负载均衡
    • 分布式架构服务调用
    • 分布式服务治理之服务协调
    • 分布式服务治理之服务削峰
    • 分布式服务治理之服务降级
    • 分布式服务治理之服务限流
    • 分布式服务治理之服务熔断
    • 分布式服务治理之服务链路追踪
      • 架构设计基本原则之开闭原则(OCP)
      • 架构设计基本原则之单一职责原则(SRP)
      • 架构设计基本原则之接口隔离原则(ISP)
      • 架构设计基本原则之里式替换原则(LSP)
      • 架构设计基本原则之依赖倒置原则(DIP)
      • 架构设计基本原则知识扩展
      • 分布式架构知识拓展与总结
    • 分布式框架

    • 后端开发
    • 分布式
    terwer
    2022-05-04
    目录

    分布式服务治理之服务链路追踪

    # 服务链路追踪

    # 什么是服务链路追踪

    分布式微服务架构上是通过业务来划分服务的,通过Rest调用对外暴露一个接口,可能需要很多服务协同才能完成这个接口的功能。

    如果链路上任何一个服务出现问题或者出现网络超时,都会导致接口调用失败。随着业务的扩张,接口调用会越来越复杂。

    image-20220412151845220

    极端情况:

    image-20220412151924192

    分布式链路追踪(Distributed Tracing),也叫分布式链路跟踪,分布式跟踪,分布式追踪等,指的是将一次分布式请求还原成调用链路。

    显示的是后端一次分布式请求的调用情况,比如各个节点上的耗时、请求具体到达了那些机器、每个服务节点的请求状态等等。

    # 链路追踪具备的功能
    1. 快速故障定位

      通过调用链追踪,一次请求的逻辑轨迹可以完整的展示处理。开发中可以在业务日志中添加调用链路ID,可以通过调用链加上业务日志快速定位排查错误信息。

      image-20220412152736619

    2. 各个调用环节的性能分析

      在调用链的各个环节,分别添加调用时延,可以分析系统性能瓶劲,有针对性的进行性能优化。

      通过分析各个环节的平均时延,QPS等信息,可以找到系统的薄弱环节,对模板进行调整。

      image-20220412154336064

    3. 数据分析

      调用链绑定业务后,通过查看每条业务数据对应的链路信息,可以得到用户的行为路径,经过了哪些服务器上的哪些服务,进行汇总分析。

    4. 生成服务调用拓扑图

      通过可视化分布式系统的模块,和他们之间的相互联系,来理解系统拓扑。

      点击节点会展示模块的详情,比如当前的状态和请求数量。

    # 链路跟踪设计原则
    1. 设计目标

      • 低侵入性,应用透明
      • 低损耗
      • 大范围部署,扩展性
    2. 埋点和生成日志

      埋点即系统在当前节点的上下文信息,可以分为客户端埋点、服务端埋点,以及客户端和服务端双向型埋点。埋点日志通常包含以下内容:

      traceId、RPCId、调用的开始时间、调用类型、协议类型、调用方ip和端口,请求的服务名等信息,调用耗时、调用结果、异常信息、消息报文等。

    3. 抓取和存储日志

      一般采用离线+实时的方法去存储日志,主要是分布式日志的采集。典型的方案是Flume结合Kafka。

    4. 分析和统计调用链数据

      首先按照traceId汇总日志,然后按照rpcId对调用链进行顺序整理。调用链不要求100%准确,允许部分日志丢失。

    5. 计算和展示

      汇总到各个调用链的日志之后,可以有针对性的进行业务线的分析。

      需要对具体的日志进行整理,进一步储存在HBase或者关系型数据库中,进行可视化查询。

    # 链路跟踪trace模型

    trace调用模型,有以下几个概念:

    image-20220412160143642

    Client && Server:

    对于跨服务的一次调用,请求发起方为client,服务提供方为server,关系如下:

    image-20220412160401367

    链路跟踪的系统实现

    Google的Dapper:https://github.com/bigbully/Dapper-translation (opens new window)

    Twitter的zipkin:https://github.com/openzipkin/zipkin (opens new window)

    淘宝的鹰眼:https://www.infoq.cn/article/kmpztgjqs7vjc5vkvcr2 (opens new window)

    新浪的Watchman:https://www.infoq.cn/article/weibo-watchman (opens new window)

    京东的Hydra:https://github.com/odenny/hydra (opens new window)

    编辑 (opens new window)
    #rpc#service#link#tracking
    上次更新: 2023/02/22, 13:47:25
    分布式服务治理之服务熔断
    架构设计基本原则之开闭原则(OCP)

    ← 分布式服务治理之服务熔断 架构设计基本原则之开闭原则(OCP)→

    最近更新
    01
    解决css部分border被圆角切掉之后圆角的边框消失问题
    03-18
    02
    使用TypeScript开发一个自定义的Node-js前端开发脚手架
    03-08
    03
    Github-Actions使用release-please实现自动发版
    03-06
    更多文章>
    Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式