Hello,大家好呀,前两篇文章,我们说了下关于全链路压测的意义、整体架构,以及5种压测的方案。
前面两篇基本都属于比较理论的内容,今天这篇咱们来点实践的东西,手把手带你搞出一个压测来
如果不清楚之前两篇的文章的小伙伴,可以先看下,在这里
需要在虚拟机或者linux服务器启动运行环境
服务 | ip | 端口 | 备注 |
---|---|---|---|
mysql | 172.18.0.10 | 3306 | 数据库服务 |
rabbitMQ | 172.18.0.20 | 5672,5672 | RabbitMQ消息服务 |
redis | 172.18.0.30 | 6379 | Redis缓存服务 |
nacos | 172.18.0.40 | 8848 | 微服务注册中心 |
skywalking | 172.18.0.50 | 1234,11800,12800 | 链路追踪APM服务端 |
skywalking-ui | 172.18.0.60 | 8080 | 链路追踪APM服务UI端 |
应用服务可以单独部署或者在idea中启动
服务 | ip | 端口 | 备注 |
---|---|---|---|
order-service | 127.0.0.1 | 8001 | 订单服务 |
account-service | 127.0.0.1 | 8002 | 账户服务 |
storage-service | 127.0.0.1 | 8003 | 数据存储服务 |
notice-service | 127.0.0.1 | 8004 | 通知服务 |
我们的docker-compose只对环境进行了搭建,具体微服务在本地运行或者在容器运行都可以。
version: '2'
services:
mysql:
image: mysql:5.7
hostname: mysql
container_name: mysql
networks:
docker-network:
ipv4_address: 172.18.0.10
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- "/tmp/etc/mysql:/etc/mysql/conf.d"
- "/tmp/data/mysql:/var/lib/mysql"
rabbitMQ:
image: rabbitmq:management
hostname: rabbitMQ
container_name: rabbitMQ
networks:
docker-network:
ipv4_address: 172.18.0.20
ports:
- "5672:5672"
- "15672:15672"
redis:
image: redis
hostname: redis
container_name: redis
networks:
docker-network:
ipv4_address: 172.18.0.30
ports:
- "6379:6379"
volumes:
- "/tmp/etc/redis/redis.conf:/etc/redis/redis.conf"
- "/tmp/data/redis:/data"
command:
redis-server /etc/redis/redis.conf
nacos:
image: nacos/nacos-server
hostname: nacos
container_name: nacos
depends_on:
- mysql
networks:
docker-network:
ipv4_address: 172.18.0.40
ports:
- "8848:8848"
environment:
MODE: standalone
volumes:
- "/tmp/etc/nacos/application.properties:/home/nacos/conf/application.properties"
skywalking:
image: apache/skywalking-oap-server
hostname: skywalking
container_name: skywalking
networks:
docker-network:
ipv4_address: 172.18.0.50
ports:
- "1234:1234"
- "11800:11800"
- "12800:12800"
skywalkingui:
image: apache/skywalking-ui
hostname: skywalkingui
container_name: skywalkingui
depends_on:
- skywalking
networks:
docker-network:
ipv4_address: 172.18.0.60
environment:
SW_OAP_ADDRESS: 172.18.0.50:12800
ports:
- "8080:8080"
networks:
docker-network:
ipam:
config:
- subnet: 172.18.0.0/16
gateway: 172.18.0.1
初始化用户数据以及产品数据
将feign,hystrix,ribbon等统一配置配置到nacos
# 配置超时时间
feign:
hystrix:
enabled: true #开启熔断
httpclient:
enabled: true
hystrix:
threadpool:
default:
coreSize: 50
maxQueueSize: 1500
queueSizeRejectionThreshold: 1000
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 60000
ribbon:
ConnectTimeout: 10000
ReadTimeout: 50000
配置好压测数据,并且配置压测线程数1000 进行10轮压测
我们找到一个调用时长1S左右的链路,分析发现在存储服务调用时,耗时较长,但是数据库调用耗时并不长,基本说明是存储服务的连接池耗尽导致调用过长。
调整存储服务的连接池,由原来的最大10 改为100
initialSize: 10
minIdle: 20
maxActive: 100
结果已经由原来的服务内部的耗时 变为了fegin的耗时,这种情况下可以考虑使用fegin的连接池优化或者新增节点
发现消费速度很慢,产生了大量消息堆积
检查
storage-service
的actualPlaceOrder
端点信息
发现平均响应时间在200ms左右
检查断点链路/storage/order/actualPlaceOrder
发现是事务提交慢造成的,这个时候就需要优化mysql服务器了
Skywalking web UI 主要包括如下几个大的功能模块:
查看监控结果
本文由
传智教育博学谷
教研团队发布。如果本文对您有帮助,欢迎
关注
和点赞
;如果您有任何建议也可留言评论
或私信
,您的支持是我坚持创作的动力。转载请注明出处!
|