前言 之前断断续续写过一些全链路压测相关的技术文章,很多同学评价还不错。朋友建议我写个系列,基于自己的落地实践经验,对全链路压测做个系统性的梳理总结。 目前草稿写差不多了,大体的更新节奏,应该是一周2篇左右的样子,静等更新吧。 目录大纲 背景:天猫2012双11的痛 全链路压测这个Topic,最初是阿里提出的,背景缘由也很简单,双十一大促嘛。 定义:如何理解全链路压测 PS:这里的定义是我基于自己对生产全链路压测的了解和实践总结得来的,仅代表个人观点。 1、什么是全链路压测? 基于实际的生产业务场景和系统环境,模拟海量的用户请求和数据,对整个业务链路进行各种场景的测试验证,持续发现并进行瓶颈调优,保障系统稳定性的一个技术工程。 2、全链路压测解决了什么问题? 目前业内还没有较好的链路梳理工具,导致这个过程需要人肉来梳理,耗时且费力。 2、数据隔离 生产全链路压测最重要的一点是避免对生产数据造成污染。
——来自百度百科 本篇文章要说的全链路压测SOP,实际上就是我在实践全链路压测的过程中,对实践经验和教训的一个总结。 全链路压测(1):认识全链路压测 全链路压测(2):方案调研和项目立项 全链路压测(3):技术改造和测试验证 全链路压测(4):全链路压测的价值是什么? 全链路压测(5):生产全链路压测实施全流程 全链路压测(6):确认范围和识别风险 全链路压测(7):核心链路四问 全链路压测(8):构建三大模型 全链路压测(9):容量评估和容量规划 全链路压测(10) :测试要做的准备工作 全链路压测(11):聊聊稳定性预案 全链路压测(12):生产压测必不可少的环节 全链路压测(13):高可用和性能优化 再加上本篇的生产全链路压测SOP思维导图,就是整个系列的内容。 最后,重申一下我对全链路压测的部分认知: 全链路压测是一个技术工程,而非单纯的测试手段; 全链路压测只适用于部分企业和业务类型,而非一个银弹; 全链路压测的落地并非一蹴而就,需要较好的技术基础设施建设做保障
前言 前面的几篇文章从生产全链路压测的定义,内部立项和技术调研,聊到了测试验证以及全链路压测的对企业业务和技术团队的价值,算是整体上的构建一个认知的概念。 从这篇文章开始,会进入具体的落地实践环节。 这篇文章中,我会介绍生产全链路压测的落地实施全流程,即每个环节要做什么事情。 四大阶段 如果将生产全链路压测作为一个阶段性的技术项目来看,全链路压测从开始到项目结束,需要经过四个阶段。 整体的实施流程图如下所示: 接下来我来为大家解密,生产全链路压测落地实施,在不同的阶段都会做哪些事情。 筹备阶段 确定业务范围 一般来说线上实施线上全链路压测之前,要明确本次压测需要验证的业务范围。 核心业务定义 出问题会影响其他业务链路; 流量较高且出现问题会影响整体业务目标的达成; 核心项目定义 前面提到了生产全链路压测是个复杂的技术项目,那么如何定义这种技术项目呢?
--全链路跟踪 sleuth zipkin --> <dependency> <groupId>org.springframework.cloud</groupId > <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> 2.编写yml文件 spring
RpcID RPCId用链路调用顺序来递增。 阿里云相似产品:Tracing Analysis 效果图: ? image.png
Zipkin是SpringCloud官方推荐的一款分布式链路监控的组件,使用它我们可以得知每一个请求所经过的节点以及耗时等信息,并且它对代码无任何侵入,我们先来看一下Zipkin给我们提供的UI界面都是提供了哪些信息 zipkin首页为我们提供了对于调用链路的搜索查询及展示的功能 ? 第二个选项卡里提供了历史数据的导入功能 ? 第三个选项卡里展示了各个微服务之间的关系 ? 我们再次回到首页,我们点开一个调用链路之后就会看到此次链路调用的详情 ? 现在我们点开详情中的一个service,可以看到此次调用在这个微服务中的详细信息。 ? <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> 2. 2.
作者:vivo 互联网前端团队- Yang Kun本文是上篇文章《Node.js 应用全链路追踪技术——全链路信息获取》的后续。阅读完,再来看本文,效果会更佳哦。 本文主要介绍在Node.js应用中, 如何用全链路信息存储技术把全链路追踪数据存储起来,并进行相应的展示,最终实现基于业界通用 OpenTracing 标准的 Zipkin 的 Node.js 方案。 2.2 zipkin 架构官方文档上的架构如下图所示:为了更好的理解,我这边对架构图进行了简化,简化架构图如下所示:从上图可以看到,分为三个部分:第一部分:全链路信息获取,我们不使用 zipkin 自带的全链路信息获取 ,我们使用 zone-context 去获取全链路信息第二部分:传输层, 使用 zipkin 提供的传输 api ,将全链路信息传递给 zipkin第三部分: zipkin 核心功能,各个模块介绍如下: 三、Node.js 接入 zipkin3.1 搞定全链路信息获取这个我在 《Node.js 应用全链路追踪技术——全链路信息获取》 文章中,已经详细阐述了,如何去获取全链路信息。
前言 前面的文章介绍了全链路压测的落地实施全流程,其中有个环节我特别提到了它的重要性,同时这也是本篇文章的主题:核心链路梳理。那什么是核心链路?为什么要确定核心链路?如何进行核心链路梳理? 以电商企业为例,为用户提供商品的购买服务,为商家提供商品的管理和上架及定价展示,利润大多为撮合用户和商家交易所带来的服务费以及广告等相关费用。 这么说比较拗口,再直白一些就是:哪些接口会影响用户下单支付,哪些就是核心链路。 下面附一个常见的电商企业核心链路流程图,供大家参考。 为什么要确定核心链路? 流量模型 我在前面的文章《生产全链路压测实施全流程》中有提高转化技术指标的一个案例,这里再次回顾下: 客单价为500,单日GMV为10亿,那么支付订单量为10亿/500=200W; 假设日常支付订单量为 文末回顾 这篇文章主要聊了全链路压测在备战阶段最重要的一件事,核心链路梳理。其中提到了流量模型相关的内容,下篇文章,我会以全链路压测过程中需要梳理的三大模型为主题,为大家介绍它们。
在开始真正的介绍落地实践过程以及相关案例之前,我想和大家聊聊,我对全链路压测的一些认知,即:全链路压测在技术团队中的定位,以及它的价值是什么。 业务和技术是什么关系? 全链路压测对稳定性保障的价值 聊了这么多,回到文章顶部,我所要表达的内容,全链路压测的价值是什么? 通过生产全链路压测,可以串联稳定性保障的全流程,解决线上系统稳定性保障面临的种种挑战,它所带来的价值如下: 总结回顾 这篇文章介绍了我对技术和业务关系的理解,线上稳定性保障面临的挑战以及全链路压测在其中的价值 ,通过前面的几篇文章,从认识全链路压测到项目立项以及技术调研和测试验证,我试图从另一个视角来为大家揭秘全链路压测的另一面。 下篇文章,我会为大家介绍,全链路压测落地实践的整体流程。
生产环境全链路性能测试体系建设之路主要包括生产测试流程规范建设、生产测试工具平台建设、生产测试实施团队建设、落地实施细则。本文主要聊一聊生产测试工具平台建设。 一、应用管理性能测试的数据隔离配置按照应用维度进行管理,相关功能包括应用增删改查、单应用维测试流量开启或关闭控制、应用下实例状态管理、预期数管理和测试规则版本管理。 二、测试规则配置管理对测试规则的管理包括对规则的添加、编辑、删除、导入/导出、启用/禁用等。其中导出/导入规则是从应用维度全量导入或导出配置规则,启用/禁用规则是针对单条数据进行操作,不影响其他规则。 三、链路分析平台具有链路分析能力,下面分别讲解平台上关于链路分析的配置项。首先是链路查询。它支持应用、实例、服务、请求结果、耗时、返回行数和开始时间等维度查询链路。其次是调用树。 对于常态化项目,做好流程规划把控,考虑可能影响项目实施的生产环境的变化因素,例如:接口变化影响测试实施,系统变化影响测试范围,系统应用组件变化造成数据污染,系统中间件变化造成测试链路变化。
前言 全链路压测从零开始系列的第一篇文章介绍了全链路压测的背景、定义、和传统压测的差异以及如何解决差异带来的不稳定性,落地要面临的挑战和完整的压测实践流程以及长期的能力建设演变,算是对全链路压测有了一个比较系统和全面的介绍 国内全链路压测的SaaS服务商,目前只有2家:数列科技和perfma。 ,就可以看到所有的服务调用关系,快速理解系统架构,并且通过链路架构图可以详细了解链路经过的应用、缓存、中间件、DB,甚至第三方的API,每条链路的所有走向都一目了然; 数据安全隔离:在不污染生产环境业务数据情况下进行全链路压测 总结 本篇主要对全链路压测的项目立项和调研环节要考量的点以及业内的一些方案&SaaS及开源产品做了介绍,下一篇开始,会介绍落地实践过程中具体要做的一些事情,包括工具选型、流量评估等,会结合具体的业务场景来为大家分享如何从零开始的落地全链路压测 建个一个学习群,关注回复全链路压测进群。
OpenTracing 抽象出一套与编程语言以及业务逻辑无关的接口,对链路追踪领域各类元素的统一管理,从而实现完整的全链路监控。 有没有一套经历过大规模实际业务场景验证,又简单易用的全链路监控产品呢?在云计算时代这个问题的答案是肯定的,阿里云ARMS就能满足这个要求,代表着业界在全链路监控以及应用性能管理领域的最高水平。 ? 在ARMS的理念中,对全链路监控的理解已经超出了一般意义上APM(应用性能管理的范畴),而是把“可观测性”作为产品的最重要使命。 受益于统一的全链路监控模型,如果一个微服务体系中存在多种语言之间的相互调用,只要把对应的应用都接入ARMS,就能够跨越多语言对调用链路进行统一的管理和分析。 ? ,作为全链路监控以及应用性能管理领域的标杆产品,ARMS还有更多的功能特性等待着我们去挖掘,我们可以对照帮助文档逐步学习。
与单体的复杂系统不同,开发者需要开发和管理一系列相对简单的服务,而这些服务可能以一些复杂的方式交互。 何为全链路测试? 个人认为,链路可以分为业务链路和调用链路,调用链路主要指从请求发起方到结果返回所途径各种服务/中间件产生的路径,可以理解为单系统下的某一功能模块。 而业务链路则是多个业务关联的场景组合产生的链路调用集合,例如淘宝添加购物车->提交订单->支付这个场景,所以全链路必然包含多个业务关联场景涉及的调用链路。 全链路下自动化成本更高,因为全链路用例涉及到多域的流程编排,处理服务间各种异常重试情况(超时、网络异常), 各域的输出断言,这无疑大大增加一条用例开发成本。 综上,我们要正确看待全链路测试,不能迷信于全链路测试,觉得全链路测试通过就没啥问题了。
面临的挑战 除了上面所说的技术层面的问题,要开展全链路压测,还面临如下的几点挑战: ①、由于全链路压测涉及的系统及场景较多,因此需要跨团队沟通、跨系统协调改造,公司体量 越大,这一点难度就越大; ②、全链路压测涉及的系统较多 ,且不同的系统架构也有所不同,因此需要考虑:机房管理、基 础网络、DB管理、持久存储、中间件、应用部署、流量接入、监控与运维保障等多方面; ③、全链路压测的目的是找到系统调用链路薄弱环节并优化,这就要求对整个调用链路涉及的系 不过全链路压测的优点也很明显,比如:优化联络薄弱环节可以提高系统的可用性,容量规划可 以节省成本,提高效率。 开展前的准备工作 在开展全链路压测之前,我们需要做哪些准备工作? 要开展全链路压测,那么一个合理高效可用的压测管理平台,是很有必要的,参考了很多全链路 压测的设计思路,我个人的想法中全链路压测平台的架构设计,主要由以下几部分组成: ①、Controller:主要任务为压测任务分配 具体的架 构设计图,可参考京东的全链路军演系统ForceBot的架构设计,如下图: ? 完成了上面的工作,接下来就可以开展全链路压测的工作了。
目前,链路追踪组件有Google的Dapper,Twitter 的Zipkin,以及阿里的Eagleeye (鹰眼)等,它们都是非常优秀的链路追踪开源组件。 链路追踪(Dapper) 当业务程序代码在线上运行时,实例A、实例B、实例C,他们直接可能从上到下依次调用,为了能很好的监控程序的调用链路,我们需要对调用链路进行追踪监控。 测试结果:hi1 链路追踪:7dfd98e8-c474-461c-87b9-1da3bf6072c2 org.itstack.demo.test.ApiTest.http_lt2 测试结果:hi2 链路追踪 :7dfd98e8-c474-461c-87b9-1da3bf6072c2 org.itstack.demo.test.ApiTest.http_lt3 测试结果:hi3 链路追踪:69cdf9d3-1f42 5362dd7ea140 org.itstack.demo.test.ApiTest.http_lt2 测试结果:hi2 链路追踪:69cdf9d3-1f42-4cf6-8d80-5362dd7ea140
,现金流制约生鲜企业做大做强 ▣ 3、生鲜供应链理念落后,整条网状链是彼此割裂、各自为战的 ▣ 4、生鲜不易储存,商品标准化困难,物流损耗大,产品质量难控制 解决方案 ●●● ▬ 生鲜行业B2B交易平台 产品核心功能 —— image.png ▣ 1、一体化管理,全渠道掌控 通过生鲜B2B交易平台后台一体化管理,把握门店、供应商、采购商、渠道商等的管控,实现标准化、低成本、高效率。 ▬ 生鲜行业渠道管理系统 ▬ 数据分析 实时反馈 财务核算 搭建数字化渠道管理平台,包括预测与计划管理、销售管理、促销管理、客户管理、渠道管理、费用管理、智能分析……实现渠道高效协同,提升了市场信息的采集分析效率 ▣ 3、全渠道用户运营,提升销售转化 线上、线下渠道的打通,基于呼叫中心、微信、短信等渠道实现与用户的互动,并对用户进行细化分类管理,实现精准营销,提升销售转化和复购。 ▬ 生鲜行业供应链管理平台 ▬ 需求发布 在线竞价 数据分析 建立生鲜行业供应链管理平台,撮合上下游供应采购对接,实现采购、生鲜、库存、销售、售后的协同,从供应端驱动整个价值链的效率提升。
现在全链路越来越火,各大厂商也纷纷推出了自己的全链路压测测试方案。特别是针对全链路压测流量模型,各家方案都有所不同。最近我看了一些这方面的资料,有一些感悟。分享给大家。 全链路压测流量模型的梳理呢,这里就先不讲了,各家公司自有司情在。因为主要是全链路压测模型的实现,其实实现也对应了流量模型的梳理结果。 首先要对公司业务模型进行梳理,也就是说对公司的业务链路进行梳理。这里的业务链路可能会比较复杂,不是像很多案例中到的了就非常流行畅的一条链路,中间很有可能会出现各种各样的支路。 如果图图形化展示的话,某一条链路应该就是一个树形结构。树形结构的开始是用户的入口页一般就是入口页面的登陆,或者说是首页接口。 将比较复杂的树形结构简单化,或者干脆将以个业务联络分解成n个列有链路。然后分别实现。最终将流量汇聚,就变成了整个业务链路的流量模型实现。
除此之外,Zuul还提供了全链路追踪的功能,通过在请求头中添加相关信息,可以跟踪一个请求从发起到响应的整个过程,帮助我们定位问题。 实现原理 在Zuul中实现全链路追踪需要用到Sleuth和Zipkin,Sleuth是Spring Cloud提供的用于生成和管理Trace Id的工具,而Zipkin是一个分布式跟踪系统,用于收集和查询 tracing表示开启全链路追踪功能,sleuth表示使用Sleuth进行Trace Id的生成和管理,web表示启用Web的相关配置,client表示启用Zuul作为客户端的相关配置。
全链路追踪系统就是为了解决微服务场景下的这些问题而诞生的。 一般在链路的入口应用中生成traceId和spanId,在后续的各节点调用中,traceId保持不变并全链路透传,各节点只产生自己的新的spanId。 六、总结与展望 全链路追踪系统包含几大部分:链路采集SDK、数据处理服务、用户产品。SDK部分比较偏技术。 用户产品主要考验的是设计者对用户需求的把握,全链路追踪可以做很多事情,产品上可以堆叠出很多功能,怎样能让用户快速上手,简洁而又易用是链路追踪产品设计的一大挑战。 未来一段时间,有赞全链路追踪会围绕以下几个方面继续演进: 赋能有赞云:给有赞云开发者用户提供有容器应用的链路追踪能力; 开源协议支持:数据模型与链路追踪API迁移到OpenTracing协议上,支持更多新语言的快速追踪
2、OpenTelemetry可扩展性架构 OpenTelemetry 的可扩展架构意味着库/插件作者可以使用 API 仪器化他们的代码,当这些工件在实现 OpenTelemetry SDK 的服务或应用程序中使用时 2、采集器 OpenTelemetry Collector 是一个可选的中间代理,基于其,可以运行它来接收、处理和导出遥测数据。 以下是解决方案所采取的步骤,以及它在此过程中生成的数据: 1、使用 API 检测我们所构建的代码,告诉系统组件要收集哪些指标以及如何收集它们 2、使用 SDK 汇集数据,并将其传输以进行处理和导出 open-telemetry/oteps - 项目的增强建议 open-telemetry/opentelemetry-proto - OTLP 的 Protobuf 定义 2、