Akka简单的性能测试

因为最近工作的关系,要把异步任务从应用服务器中拆分到专门的异步处理服务器中.

方案一

是采用MQ的方式将任务消息发出,在服务端进行处理,如下图所示:

这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理。

这种方案的不足是,可能在某些需求的情况下,需要将结果存放到共享的HashMap或者Threadlocal中进行存放结果,客户端会一直阻塞,直到得到结果,从多线程的角度来说,还是用了共享变量,虽然共享变量可能是线程安全的,但是从并发模型的角度来讲,并不是一个最好的方式。

方案二

采用比较流行的Akka框架来实现。

Akka的五大特性

* 易于构建并行和分布式应用

* 可靠性(Resilient by Design)

系统具备自愈能力,在本地/远程都有监护。

* 高性能(High Performance)

在单机中每秒可发送50000000个消息。内存占用小,1GB内存中可保存2500000个actors。

* 弹性,无中心(Elastic — Decentralized)

自适应的负责均衡,路由,分区,配置

* 可扩展(Extensible) 可以使用Akka 扩展包进行扩展。

因为之前一直研究Scala,Scala的多线程处理的性能是非常高的,那基于Scala语言而开发出来的Akka框架得到了广泛使用。那么接下来我将使用一个非常简单的例子,以及一些测试用例展现一下它的性能。

代码如下:

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedActor;

/**
 * PROJECT_NAME: akkademo
 * DATE:         16/2/27
 * CREATE BY:    chao.cheng
 **/
public class ToStringActor extends UntypedActor {
    @Override
    public void onReceive(Object message) {
        System.out.println(message.toString());
        try {
            Thread.sleep(500);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        ActorSystem system = ActorSystem.create("toStringActor");
        final ActorRef toString = system.actorOf(Props.create(ToStringActor.class),"toString");
        for(int i=0;i<10000000;i++) {
            toString.tell("test"+i,toString);
        }
        System.out.println("[结束]=======================");
    }
}

程序的简单说明:

采用事件的机制,循环发送一千万条数据,通过onReceive方法异步处理任务。

用VisualVM工具截图可以看到:

后台其实自适应只起了三个线程在运行,分别是dispatcher-2,dispatcher-3,dispatcher-4。

正在分析性能耗时。

服务器整体CPU占比时间为15.9%。

时间: 2024-10-07 10:56:05

Akka简单的性能测试的相关文章

用NAT123搭建内网WCF服务并实现安卓APP访问附带站点简单的性能测试

以下原创,转转请注明出处,谢谢合作! 简介:NAT123是个很很强大的工具,而且使用非常简单,真正实现了帮用户无视内外网的建站服务. 这里简单介绍一下如何用NAT123建内网WCF服务,然后用一个安卓APP实现对它的调用,由于NAT123提供全端口映射(需要访问者支持),所以既可以做站点,APP后台,也可以做其他应用的服务器比如FTP等等,根据具体应用的需要而定.最后对所建的两个映射站点做了个简单的性能测试. 用NAT123搭建内网WCF服务:(由于文章主要是介绍NAT123,WCF相关内容自行

JMeter简单的性能测试实例

JMeter基础之--一个简单的性能测试 上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.com  和 tt-topia.rhcloud.com 2)测试目的是该网站在负载达到20 QPS 时的响应时间. QPS 解释 QPS:Query Per Second 每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特网上,作为域名系统服务器的机器的

Jmeter初步使用二--使用jmeter做一个简单的性能测试

经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍并使用. 首先,打开Jmeter工具,并建立一个测试计划(测试脚本).启动jmeter后,jmeter会自动生成一个空的测试计划,我们可以基于该测试计划建立自己的测试计划. 步骤: 步骤一:添加线程组 一个性能测试请求负载是基于一个线程组完成的.一个测试计划必须有一个线程组.测试计划添加线程组非常简

JMeter基础之一 一个简单的性能测试

JMeter基础之一 一个简单的性能测试 上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.com  和 tt-topia.rhcloud.com 2)测试目的是该网站在负载达到20 QPS 时的响应时间. QPS 解释 QPS : Query Per Second 每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特网上,作为域名系统服务器的机

【jmeter】一个简单的性能测试

1.测试目标网站http://www.jianshu.com/ 2.测试目的是该网站15QPS负载下的响应时间 执行测试之前,要先建立一个测试计划,而jmeter每次打开后,都会生成一个空的测试计划 添加线程组 一个性能测试是基于测试计划完成,而一个测试计划又是基于线程组完成的.所以一个测试计划必定有一个线程组,在jmeter中,添加线程组非常简单.鼠标右键->添加->Threads->线程组 下面说说线程组的构成 线程数:vuer的数量,也就是虚拟机用户数.一个线程数代表一个虚拟用户,

转:JMeter基础之一 一个简单的性能测试

QPS 解释 QPS : Query Per Second 每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量. 为了达成预期的测目的,需要需要在jmeter中建立一个测试计划.因为本次测试仅要求完成对fnng.cnblogs.com  和 tt-topia.rhcloud.com 两个博客首页请求,因此只需要使用HTTP Request Sampler 即可. 建立测试计划 启动jmeter后,jmeter会自动生成一个空的测试

JMeter基础之一个简单的性能测试

我们了解了jmeter的一此主要元件,创建一个简单的测试计划来使用这些元件.该计划对应的测试需求: 1)测试目标网站是www.51cto.com 2)测试目的是该网站在负载达到20 QPS 时的响应时间. ●  QPS 解释 QPS : Query Per Second 每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量. 为了达成预期的测目的,需要需要在jmeter中建立一个测试计划.本次测试仅要求完成对www.51cto.co

akka简单示例

刚刚开始接触akka,网上找了2个简单示例,并在公司运营机器上尝试,踩了一些坑,在此记录. 1. 本地hello world 1 [[email protected] ~/akka_example/hello_world]$ cat src/helloWorld.scala 2 package our.examples 3 import akka.actor.Actor 4 import akka.actor.ActorSystem 5 import akka.actor.Props 6 7 c

【转】JMeter基础之——一个简单的性能测试

上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.com  和 tt-topia.rhcloud.com 2)测试目的是该网站在负载达到20 QPS 时的响应时间. QPS 解释 QPS:Query Per Second 每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量. 为了达成预期