不同性能测试工具的并发模式(二)
三、Actor并发模式这种并发模式比较新颖,属于旧技术新应用的并发模型,代表工具是Gatling(这款工具发布的比较晚,所以采用了这个新颖的并发技术);
随着多核时代和分布式系统的到来,共享模型(上面讲的多线程技术)已经不太适合并发编程,因此几十年前就已经出现的Actor模型又重新受到了人们的重视。MapReduce就是一种典型的Actor模式,而在语言级对Actor支持的编程语言Erlang又重新火了起来,Scala也提供了Actor,但是并不是在语言层面支持,Java也有第三方的Actor包,Go语言channel机制也是一种类Actor模型。
http://www.51testing.com/attachments/2021/06/15326880_202106171727001yV97.png
1. 这种模型结合了多线程并发模型和消息循环并发模型的优势,避免多线程问题又充分利用硬件资源;
2. 基于消息传递的,并且使用每个虚拟用户基于一个 Actor 就可以做到相对独立(没有锁机制),并通过消息传递进行通信,所以具有单线程里进行高并发的能力;
3. 邮箱(Mail Box)是actor之间的通信桥梁,邮箱内部通过FIFO消息队列来存储发送方消息,而接收方则从邮箱中获取消息;
4. 还可以在运行时轻松地动态增加和减少并发虚拟用户数(Actor);
由于 Actor 模型的轻量和高并发性,再加上 Scala 语言基于 JVM,所以 Gatling 的并发模型结合了 JMeter 和 Locust 的优势,其尽可能地避免了多线程存在的一些问题,并可以充分使用硬件资源:多核。其次 Actor 模型核心是基于消息传递的,它具有和消息循环模型同样在单线程里面进行高并发的能力。并且它还可以在运行时轻松地动态增加和减少并发虚拟用户数(Actor)。虽然其并发模型十分优秀,但是需要使用 Scala 语言来进行开发,使得很多测试人员望而却步,导致 Gatling 的使用量并不是很广泛。不过这不能阻止人们对这项技术的向往,可以预见的是,未来的性能压测工具,会更喜欢采用这种并发模式。
四、流量复制回放模式
流量复制回放不属于并发模式,和并发技术也无相关,但之所以我把它放在一起说,是因为这种方式也是性能测试工具采用的一类模式,不需要制造并发,只需要将生产环境的流量复制过来并进行放大,就能模拟百万并发的效果。我们模拟并发的目的,从业务层面的角度来说,也是为了模拟大量的流量,对于互联网时代来说,流量就是生命和血液,复制和复用这种流量,比单纯的模拟并发有时候更有意义。
http://www.51testing.com/attachments/2021/06/15326880_202106171727271ibAz.png
什么是流量复制?
我们把用户访问系统造成的数据传输定义为流量,那么在用户访问系统的过程中,我们可以把进入和流出的数据复制下来,进行保存,待后续使用,即离线模式,或者转发到一个新的服务器,立即使用,即在线模式。
什么是流量回放?
获取到复制下来的流量以后,我们按照接收的时间顺序,将它们一条一条的传输到待测试的服务中,让测试服务产生相应的响应;相当于实际用户帮助我们进行测试。
通常有以下几种回放测试的情景:
(1)复制下来什么内容就回放什么内容,即全量回放;
(2)复制下来的内容进行一些预设规则的过滤,或者特殊的处理后,再进行回放,即选择性回放;
(3)复制下来的内容,对其进行处理从中获取必须的数据项,比如上文中提到的搜索词,即关键词回放。
TCPCOPY是比较常用,极其优秀的流量复制回放工具,但是其对组网的要求较高,以下是组网架构图:
http://www.51testing.com/attachments/2021/06/15326880_202106171727551mpQy.png
1. Online Server(OS):上面要部署 TCPcopy,从数据链路层(pcap 接口)抓请求数据包,发包是从IP层发出去;
2. Test Server(TS):TS设置路由信息,把 被测应用的 需要被捕获的响应数据包信息路由到 AS;
3. Assistant Server(AS):这是一台独立的辅助服务器,原则上一定要用同网段的一台闲置服务器来充当辅助服务器。AS 在数据链路层截获到响应包,从中抽取出有用的信息,再返回给相应的 OS 上的 TCPcopy 进程。
除了TCPCOPY,还有一款比较流行的引流工具Gor (GoReplay),有兴趣的同学可以自己去了解一下。
页:
[1]