• 全链路压测设计---理论


    1.首先我们要懂什么是全链路,全链路的核心是什么

    其实全链路的核心主要是:监控、引流、熔断

    监控:在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路

     然后就可能会出现以下几个问题

    1. 如何快速发现问题?

    2. 如何判断故障影响范围?

    3. 如何梳理服务依赖以及依赖的合理性?

    4. 如何分析链路性能问题以及实时容量规划?

    随着服务的复杂性我们可能还需要关注

    1. 吞吐量,根据拓扑可计算相应组件、平台、物理设备的实时吞吐量。

    2. 响应时间,包括整体调用的响应时间和各个服务的响应时间等。

    3. 错误记录,根据服务返回统计单位时间异常次数。

    然后我们选型的监控工具需要满足

    1. 请求链路追踪,故障快速定位:可以通过调用链结合业务日志快速定位错误信息。

    2. 可视化:各个阶段耗时,进行性能分析。

    3. 依赖优化:各个调用环节的可用性、梳理服务依赖关系以及优化。

    4. 数据分析,优化链路:可以得到用户的行为路径,汇总分析应用在很多业务场景。

    然后我们的全链路,一般的全链路监控系统,大致可分为四大功能模块

    1.埋点与生成日志 不能造成性能负担:

      一个价值未被验证,却会影响性能的东西,是很难在公司推广的!

      因为要写log,业务QPS越高,性能影响越重。通过采样和异步log解决。

    2.收集和存储日志

      每个机器上有一个 deamon 做日志收集,业务进程把自己的Trace发到daemon,daemon把收集Trace往上一级发送;

      多级的collector,类似pub/sub架构,可以负载均衡;

      对聚合的数据进行 实时分析和离线存储; 离线分析 需要将同一条调用链的日志汇总在一起;

    3.分析和统计调用链路数据,以及时效性

      强依赖:调用失败会直接中断主流程

      高度依赖:一次链路中调用某个依赖的几率高

      频繁依赖:一次链路调用同一个依赖的次数多

    4.展现以及决策支持

     span在一次大的跟踪过程中是什么样的。Dapper记录了span名称,以及每个span的ID和父ID,以重建在一次追踪过程中不同span之间的关系。如果一个span没有父ID被称为root span。所有span都挂在一个特定的跟踪上,也共用一个跟踪id。

    type Span struct {
    TraceID int64 // 用于标示一次完整的请求id
    Name string
    ID int64 // 当前这次调用span_id
    ParentID int64 // 上层服务的调用span_id 最上层服务parent_id为null
    Annotation []Annotation // 用于标记的时间戳
    Debug bool
    }

    类似于 树结构的Span集合,表示一次完整的跟踪,从请求到服务器开始,服务器返回response结束,跟踪每次 rpc 调用的耗时,存在唯一标识trace_id。比如:你运行的分布式大数据存储一次 Trace 就由你的一次请求组成。

     每种颜色的note标注了一个span,一条链路通过TraceId唯一标识,Span标识发起的请求信息。树节点是整个架构的基本单元,而每一个节点又是对span的引用。节点之间的连线表示的span和它的父span直接的关系。虽然span在日志文件中只是简单的代表span的开始和结束时间,他们在整个树形结构中却是相对独立的。

    沫笙
  • 相关阅读:
    PHP中单引号与双引号的区别分析
    utf8_unicode_ci与utf8_general_ci的区别
    [mysql-Ver5.6.23] windows版my.ini配置
    Gateway/Worker模型 数据库使用示例
    php 字符串 以 开头 以结尾 startWith endWith
    MySQL错误ERROR 2002 (HY000): Can't connect to local MySQL server
    vim变ide
    在Vue中使用样式
    Vue指令之`v-model`和`双向数据绑定
    Vue指令之事件修饰符
  • 原文地址:https://www.cnblogs.com/wendy-0901/p/14713469.html
Copyright © 2020-2023  润新知