【手把手】光说不练假把式,这篇全链路压测实践探索

本文主要是介绍【手把手】光说不练假把式,这篇全链路压测实践探索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hello,大家好呀,前两篇文章,我们说了下关于全链路压测的意义、整体架构,以及5种压测的方案。

前面两篇基本都属于比较理论的内容,今天这篇咱们来点实践的东西,手把手带你搞出一个压测来

如果不清楚之前两篇的文章的小伙伴,可以先看下,在这里

  • 大厂钟爱的全链路压测有什么意义?四种压测方案详细对比分析
  • 全链路压测的整体架构设计,以及5种实现方案流量染色方案、数据隔离方案、接口隔离方案、零侵入方案、服务监控方案【代码级别】

7 环境准备

7.1 环境服务列表

需要在虚拟机或者linux服务器启动运行环境

服务ip端口备注
mysql172.18.0.103306数据库服务
rabbitMQ172.18.0.205672,5672RabbitMQ消息服务
redis172.18.0.306379Redis缓存服务
nacos172.18.0.408848微服务注册中心
skywalking172.18.0.501234,11800,12800链路追踪APM服务端
skywalking-ui172.18.0.608080链路追踪APM服务UI端
7.2 应用服务列表

应用服务可以单独部署或者在idea中启动

服务ip端口备注
order-service127.0.0.18001订单服务
account-service127.0.0.18002账户服务
storage-service127.0.0.18003数据存储服务
notice-service127.0.0.18004通知服务
7.3 docker-compose 编排环境

我们的docker-compose只对环境进行了搭建,具体微服务在本地运行或者在容器运行都可以。

version: '2'
services:mysql:image: mysql:5.7hostname: mysqlcontainer_name: mysqlnetworks:docker-network:ipv4_address: 172.18.0.10ports:- "3306:3306"environment:MYSQL_ROOT_PASSWORD: rootvolumes:- "/tmp/etc/mysql:/etc/mysql/conf.d"- "/tmp/data/mysql:/var/lib/mysql"rabbitMQ:image: rabbitmq:managementhostname: rabbitMQcontainer_name: rabbitMQnetworks:docker-network:ipv4_address: 172.18.0.20ports:- "5672:5672"- "15672:15672"redis:image: redishostname: rediscontainer_name: redisnetworks:docker-network:ipv4_address: 172.18.0.30ports:- "6379:6379"volumes:- "/tmp/etc/redis/redis.conf:/etc/redis/redis.conf"- "/tmp/data/redis:/data"command:redis-server /etc/redis/redis.confnacos:image: nacos/nacos-serverhostname: nacoscontainer_name: nacosdepends_on:- mysqlnetworks:docker-network:ipv4_address: 172.18.0.40ports:- "8848:8848"environment:MODE: standalonevolumes:- "/tmp/etc/nacos/application.properties:/home/nacos/conf/application.properties"skywalking:image: apache/skywalking-oap-serverhostname: skywalkingcontainer_name: skywalkingnetworks:docker-network:ipv4_address: 172.18.0.50ports:- "1234:1234"- "11800:11800"- "12800:12800"skywalkingui:image: apache/skywalking-uihostname: skywalkinguicontainer_name: skywalkinguidepends_on:- skywalkingnetworks:docker-network:ipv4_address: 172.18.0.60environment:SW_OAP_ADDRESS: 172.18.0.50:12800ports:- "8080:8080"
networks:docker-network:ipam:config:- subnet: 172.18.0.0/16gateway: 172.18.0.1
7.4 初始化数据
  1. 初始化用户数据以及产品数据

  2. 将feign,hystrix,ribbon等统一配置配置到nacos

    # 配置超时时间
    feign:hystrix:enabled: true  #开启熔断httpclient:enabled: true
    hystrix:threadpool:default:coreSize: 50maxQueueSize: 1500queueSizeRejectionThreshold: 1000command:default:execution:timeout:enabled: trueisolation:thread:timeoutInMilliseconds: 60000
    ribbon:ConnectTimeout: 10000ReadTimeout: 50000
    

8 全链路压测测试

8.1 jmeter配置

配置好压测数据,并且配置压测线程数1000 进行10轮压测

file

8.2 第一轮压测
8.2.1 链路分析优化

我们找到一个调用时长1S左右的链路,分析发现在存储服务调用时,耗时较长,但是数据库调用耗时并不长,基本说明是存储服务的连接池耗尽导致调用过长。

file

8.2.2 数据库连接池优化

调整存储服务的连接池,由原来的最大10 改为100

initialSize: 10
minIdle: 20
maxActive: 100
8.3 第二轮压测

结果已经由原来的服务内部的耗时 变为了fegin的耗时,这种情况下可以考虑使用fegin的连接池优化或者新增节点

file

8.3.1 观察消费节点

发现消费速度很慢,产生了大量消息堆积

file

检查storage-serviceactualPlaceOrder端点信息

发现平均响应时间在200ms左右

file

检查断点链路/storage/order/actualPlaceOrder

发现是事务提交慢造成的,这个时候就需要优化mysql服务器了

file

9 Skywalking 使用

9.1 Skywalking 模块栏目

file

Skywalking web UI 主要包括如下几个大的功能模块:

  • 仪表盘:查看被监控服务的运行状态
  • 拓扑图:以拓扑图的方式展现服务直接的关系,并以此为入口查看相关信息
  • 追踪:以接口列表的方式展现,追踪接口内部调用过程
  • 性能剖析:单独端点进行采样分析,并可查看堆栈信息
  • 告警:触发告警的告警列表,包括实例,请求超时等。
  • 自动刷新:刷新当前数据内容。
9.2 仪表盘

file

  • 第一栏:不同内容主题的监控面板,应用/数据库/容器等
  • 第二栏:操作,包括编辑/导出当前数据/倒入展示数据/不同服务端点筛选展示
  • 第三栏:不同纬度展示,服务/实例/端点
9.3 展示栏
9.3.1 Global全局维度

file

  • 第一栏:Global、Server、Instance、Endpoint不同展示面板,可以调整内部内容
  • Services load:服务每分钟请求数
  • Slow Services:慢响应服务,单位ms
  • Un-Health services(Apdex):Apdex性能指标,1为满分。
  • Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
  • Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
  • 底部栏:展示数据的时间区间,点击可以调整。
9.3.2 Service服务维度

file

  • Service Apdex(数字):当前服务的评分
  • Service Apdex(折线图):不同时间的Apdex评分
  • Successful Rate(数字):请求成功率
  • Successful Rate(折线图):不同时间的请求成功率
  • Servce Load(数字):每分钟请求数
  • Servce Load(折线图):不同时间的每分钟请求数
  • Service Avg Response Times:平均响应延时,单位ms
  • Global Response Time Percentile:百分比响应延时
  • Servce Instances Load:每个服务实例的每分钟请求数
  • Show Service Instance:每个服务实例的最大延时
  • Service Instance Successful Rate:每个服务实例的请求成功率
9.3.3 Instance实例维度

file

  • Service Instance Load:当前实例的每分钟请求数
  • Service Instance Successful Rate:当前实例的请求成功率
  • Service Instance Latency:当前实例的响应延时
  • JVM CPU:jvm占用CPU的百分比
  • JVM Memory:JVM内存占用大小,单位m
  • JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
  • JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
  • CLR XX:类似JVM虚拟机,这里用不上就不做解释了
9.3.4 Endpoint端点(API)维度

file

  • Endpoint Load in Current Service:每个端点的每分钟请求数
  • Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms
  • Successful Rate in Current Service:每个端点的请求成功率
  • Endpoint Load:当前端点每个时间段的请求数据
  • Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间
  • Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
  • Endpoint Successful Rate:当前端点每个时间段的请求成功率
9.4 拓扑图

file

  • 1:选择不同的服务关联拓扑
  • 2:查看单个服务相关内容
  • 3:服务间连接情况
  • 4:分组展示服务拓扑
9.5 追踪

file

  • 左侧:api接口列表,红色-异常请求,蓝色-正常请求
  • 右侧:api追踪列表,api请求连接各端点的先后顺序和时间
9.6 性能剖析

file

  • 服务:需要分析的服务
  • 端点:链路监控中端点的名称,可以再链路追踪中查看端点名称
  • 监控时间:采集数据的开始时间
  • 监控持续时间:监控采集多长时间
  • 起始监控时间:多少秒后进行采集
  • 监控间隔:多少秒采集一次
  • 最大采集数:最大采集多少样本

查看监控结果

file

本文由传智教育博学谷教研团队发布。

如果本文对您有帮助,欢迎关注点赞;如果您有任何建议也可留言评论私信,您的支持是我坚持创作的动力。

转载请注明出处!

这篇关于【手把手】光说不练假把式,这篇全链路压测实践探索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/424098

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

springboot整合swagger2之最佳实践

来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。 一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 SpringBoot集成 pom <!--swagge

轻松录制每一刻:探索2024年免费高清录屏应用

你不会还在用一些社交工具来录屏吧?现在的市面上有不少免费录屏的软件了。别看如软件是免费的,它的功能比起社交工具的录屏功能来说全面的多。这次我就分享几款我用过的录屏工具。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  这个软件的操作方式非常简单,打开软件之后从界面设计就能看出来这个软件操作的便捷性。界面的设计简单明了基本一打眼你就会轻松驾驭啦

深入探索嵌入式 Linux

摘要:本文深入探究嵌入式 Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。关键技术有内核裁剪与优化、设备驱动程序开发、实时性增强和电源管理等。最后展望其未来发展趋势,如与物联网融合、人工智能应用、安全性与

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

【HarmonyOS】-TaskPool和Worker的对比实践

ArkTS提供了TaskPool与Worker两种多线程并发方案,下面我们将从其工作原理、使用效果对比两种方案的差异,进而选择适用于ArkTS图片编辑场景的并发方案。 TaskPool与Worker工作原理 TaskPool与Worker两种多线程并发能力均是基于 Actor并发模型实现的。Worker主、子线程通过收发消息进行通信;TaskPool基于Worker做了更多场景化的功能封装,例