在家呆了两天,今天聊下分布式压测

2023-11-09 10:10

本文主要是介绍在家呆了两天,今天聊下分布式压测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我叫大鸡腿,大家可以关注下我,会持续更新技术文章还有人生感悟,感谢~

在这里插入图片描述

前言


最近周末两天都宅家,有个台风经过广东,虽然那两个字不知道咋念,但是复制粘贴我还是会的,“暹芭”,哈哈

谈下为啥这期聊到分布式压测,之前在搞全链路灰度的时候,涉及到「流量打标」在很多技术方案都会应用这项技术,所以自然我就关注了这个方案。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSveSwRd-1656949463305)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bc1861696ae04016bf62e89458db5ffc~tplv-k3u1fbpfcp-watermark.image?)]

那么今天我们就聊下分布式压测~

what is 分布式压测


谈到「压测」,我们自然想到jmeter、高并发、qps,没错,其实上为了压到系统能否承受的极限,从而合理的保护系统。但是这个一般出现在Toc业务,因为流量打满状态,比如说秒杀,抢购,我前司微商城qps最高在上w,算是很可以了。

如果我们只压一个系统,或者一个接口,显而易见,是片面的,无法体现整个流程或者体系的稳定性,这时分布式压测就横空出世了。就是在整个链路,然后大批量模拟流量,这样才能接近真实的情况。

谈谈how to do


分为几部分来搞:数据构建、数据隔离(中间件改造)、服务自我保护措施

数据构建

你要压测,需要构建一个请求,那么就需要对应api、参数、header、请求方式等等,其次是基础数据得完善,不能说你拿线上的数据去请求测试环境的吧。

基础数据这个好搞,copy一份对吧,定时同步。主要是接口录入需要大量的时间,这里谈下自动化测试,我看过有些公司也会尝试做自动化测试,但是我发现一个问题,测试同学需要录入很多api,参数,返回数据进行断言,那是相当蛋疼的一件事,妥妥的工具人🔧。

我忘记在哪篇文章提到「流量录制」,这让我想起之前面阿里的时候,有个面试官他们组就是搞这些插件的,通过「jvm-standbox」,这个我还没深入了解,大家可以自行学习下,我后面找一期跟大家聊聊这个。

如果流量录制代替人工录入,减少很多工作量。

压测流量的发起

很多系统都会有鉴权的,没有的话告诉我,我去压下你们接口,哈哈。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-33nRkPTD-1656949463305)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9282e84a35284a7482e9f266c178e516~tplv-k3u1fbpfcp-watermark.image?)]

那么我们如何去搞定登陆的问题,我们看下字节怎么做的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Id5p5Njd-1656949463306)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/de1a49d5a3ba44588e57ed7e1e3588e9~tplv-k3u1fbpfcp-watermark.image?)]

会有一套特殊的鉴权的构造压测数据。

压测流量染色,标识在链路透传

在之前全链路灰度的时候,讲过这个,压测流量的话,我更偏向压测机带上压测游标,主动进行染色,然后网关改成内部染色标识,放到request header头,在整个链路里面传递~

数据隔离

为了跟正常数据分隔开来,这里我们就有把数据隔离搞起来,常见的「影子表、影子库、redis(影子key)、mq(影子topic)」,谈到这里就涉及「中间件改造」了,我们可以采用agent来改写,如果流量带上压测标识,将数据源改为影子数据源。

由于这个只是吹水,就没有上代码,像mysql改下datasource,redis 改写set方法,mq改写生产者推过去的topic,不然就是消费者拿到这个带有压测标识的消息,做特殊处理。

还有特殊点:第三方api

压测流量不如污染第三方的,所以对于第三方接口需要采用mock的方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VysOsQde-1656949463306)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/22953473700e4fa680e9cff1f4bb6ab0~tplv-k3u1fbpfcp-watermark.image?)]

服务自我保护措施

我们去看很多中间件的实现,都会带上开关,为了服务的自我保护机制,比如说方案有问题,你把线上机器压爆了,正所谓程序跟人只要有个能跑就行,哈哈。

其实也是个暗箱操作,出现问题,咔嚓关掉,你不说我不说,大家都不知道,然后偷偷改bug,当然博主不会这么干,哈哈。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLJwt38G-1656949463306)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c0a667f44a9b470191dfa427f45f15d2~tplv-k3u1fbpfcp-watermark.image?)]

监控

这也是最基础,也是很重要量化的工具,我们需要根据压测出来的数据,来看下哪里服务有瓶颈,需要对接口进行优化,还是说做限流,最大程度保护服务,当初前司大促的时候买了400台机器,只能说有钱果然牛逼~

这就完了?还有细节


很多技术方案聊起来都很简单,但是真正去落地的时候会有很多技术细节,我们展开说说。

  1. 影子表怎么构建,怎样更加合理

  2. 压测账号怎么设计,因为有些流量是跟账号绑定的,比如说张三就有100w,这算是基础数据的一部分

  3. 压测流量怎么标识,我觉得是主动带上压测游标

  4. 中间件改造怎样比较合适,mq 不同topic意味着你还要监听两个topic,有些文章说不处理压测mq,意味着某个流程中断了,需要去mock。也有方案说是不同broke,也是一种方案。

总结


到这里,大家也对分布式压测有个大概了解了,很多大厂都会采用该技术方案来保障线上环境的稳定,包括数列科技开源的Takin框架。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tDvbjb6p-1656949463306)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4582a8eb274148eeaf06ee4bcca35d63~tplv-k3u1fbpfcp-watermark.image?)]

最后读完博客,觉得有学习到的,可以点赞关注,我会继续努力输出优质的文章,感谢~

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngSS2S2t-1656949463306)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cd9aa9e5621747a28e546e0387743d06~tplv-k3u1fbpfcp-watermark.image?)]

参考博客

  • 性能利器Takin来了!首个生产环境全链路压测平台正式开源

  • 字节跳动全链路压测(Rhino)的实践

这篇关于在家呆了两天,今天聊下分布式压测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl

基于MySQL实现的分布式锁

概述 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

性能测试工具 wrk,ab,locust,Jmeter 压测结果比较

前言 在开发服务端软件时,经常需要进行性能测试,一般我采用手写性能测试代码的方式进行测试,那有什么现成的好的性能测试工具吗? 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 详见: 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 Jmeter性能测试 入门

Spring Cloud整合Seata实现分布式事务

文章目录 1.Seata1.1 官网1.2 下载1.3 通过安装包运行seata1.3.1 解压seata-server-1.3.0.zip1.3.2 修改 conf/file.conf 配置文件1.3.3 修改conf/registry.conf配置文件1.3.4 添加seata配置信息到nacos1.3.5 配置seata服务端数据库表结构1.3.6 启动seata 2.Spring

ELK+Spring Cloud搭建分布式日志中心

ELK+Spring Cloud搭建分布式日志中心 1.ELK简介2.资源包下载3.Elasticsearch安装3.1 解压Elasticsearch3.2 修改Elasticsearch的配置文件3.3 修改系统配置3.4 启动Elasticsearch 4.ElasticSearch-head插件安装5.Logstash安装6.Kibana安装7.SpringCloud集成logsta

Redis进阶(七):分布式锁

在分布式系统下,涉及到多个节点访问同一个公共资源的情况,此时需要通过 锁 进行互斥控制:避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题: 解决: 采用redis实现分布式锁 可用采取:在购票的时候,操作过程中需要先加锁。在redis上设置一个key - value,完成上述买票操作,再把key - value 删掉。如果发现key - value 存在,就加锁失败,无法进

聊聊分布式,再讨论分布式解决方案

前言 最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。 接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事