因为最近工作的关系,要把异步任务从应用服务器中拆分到专门的异步处理服务器中.
方案一
是采用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%。
相关推荐
总的来说,这个简单的Scala Akka Actor demo提供了一个学习Akka和Scala并发编程的实践平台,可以帮助开发者更好地理解和应用Akka框架。通过这个示例,可以深入理解Actor模型的优势,以及如何在实际项目中利用它来...
《Akka Essentials 代码》是针对Akka框架深入学习的一份资源,主要涵盖了Akka的基础概念、核心组件以及实际应用中的关键技巧。Akka是一个基于Actor模型的高性能、分布式计算框架,广泛应用于构建高可用、容错的Java...
Akka框架借鉴了Erlang的并发模型,但它是建立在JVM之上,并且提供了丰富的抽象和工具,能够简化开发工作。 标题“Akka Scala 学习高清原版pdf”表明该文档是一个专注于Scala语言在Akka框架中应用的指南,而“描述”...
《Effective Akka》是一本深入探讨Akka框架的著作,主要针对使用Scala语言的开发者。Akka是一个基于actor模型的高性能、高并发性框架,它为构建可扩展、容错的分布式系统提供了强大的工具。本篇文章将围绕Akka的核心...
《Learning Akka》这本书是关于Akka框架的深入学习指南,它主要面向那些希望掌握分布式系统设计和并行计算技术的开发人员。Akka是一个用Scala语言构建的高性能、容错的工具包,广泛应用于Java和Scala环境中。本书...
4. **性能测试**:评估Akka系统的性能是测试用例的重要组成部分。这包括测试在高负载下的系统响应时间、资源利用率以及并行处理能力。可以使用工具如JMeter、 Gatling或Akka自带的`StressTest`来完成这些测试。 5. ...
列举了一些实际项目中 Akka 的成功应用案例,如金融交易系统、游戏服务器、实时数据分析平台等,帮助读者了解 Akka 如何解决实际问题。 #### 二、一般概念 这一部分深入探讨了 Akka 的核心概念和技术细节。 ##### ...
《Akka in Action》中文版是一本专注于Akka框架的实战型书籍,旨在帮助读者深入理解和熟练运用这一强大的并发和分布式处理工具。Akka是由Lightbend公司开发的一个开源库,基于Scala语言,用于构建高度可伸缩、容错且...
- **Akka**: 是一个基于Actor模型的并发框架,由Typesafe Inc.开发。它为构建高度并发、分布式、容错的应用程序提供了强大的工具。 - **Scala**: 是一种多范式编程语言,结合了面向对象和函数式的特性,广泛应用于大...
10. **测试支持**:Akka提供了全面的测试工具,如TestKit,可以帮助开发者编写单元测试和集成测试,确保系统行为符合预期。 总之,Akka 2.10-2.314是一个强大而全面的框架,旨在帮助开发者构建高效、可扩展和容错的...
《Akka in Action》是一本深入探讨Akka框架的书籍,其提供的完整源代码是学习Akka技术的重要参考资料。Akka是一个用Scala语言构建的开源工具包,它为开发高效、容错、并行和分布式应用程序提供了强大的支持。在Java...
Akka HTTP,作为Scala和Java平台上的一个高性能、低级别的HTTP服务器和客户端库,是Akka框架的一个重要组成部分。它允许开发者构建可扩展、反应式、容错的应用程序。在描述中的"akka-http-1.0-RC2.jar.zip"文件,...
Akka 通过 Actor 模型来实现这一点,Actor 模型允许开发者以简单的方式构建可扩展且响应迅速的应用程序。 ##### 1.3 如何开始使用 Akka? 为了开始使用 Akka,你需要熟悉以下几个概念: - **Actor Systems**:管理 ...
《Akka in Action》是一本深入探讨Akka框架的书籍,源代码提供了书中示例的实现,便于读者理解和实践。Akka是用Scala语言编写的,用于构建高度并发、分布式和反应式的应用程序。它基于Actor模型,是Lightbend公司...
总体而言,Akka文档提供了丰富的信息,帮助开发人员理解和利用Akka框架中的各种组件和概念,以便构建高性能、可伸缩且健壮的应用程序。通过深入分析文档内容,读者将能够掌握使用Akka进行并发编程的高级技术,并能够...
- 性能测试 Actor 系统。 #### 4. Actors (Java with Lambda Support) 这部分介绍了如何利用 Java 8 的 Lambda 特性来简化 Actor 的定义和使用。 #### 5. Futures and Agents 这部分介绍了 Akka 中的 Futures 和 ...
- **多节点测试简介:** 介绍如何在多节点环境下进行 Akka 的测试。 - **多节点测试实践:** 如何配置和执行多节点测试。 **9.3 带有 Lambda 支持的 Actors** - **Lambda 支持的 Actors 简介:** 介绍带有 Lambda ...
通过以上对 Akka 2.0 文档的深入分析,我们可以看出 Akka 不仅是一个强大的并发框架,更是一整套用于构建高度分布式系统的解决方案。无论是对于初学者还是有经验的开发者来说,Akka 都是一个值得深入研究的技术。
Akka 是一个基于 Actor 模型的开源框架,主要用于构建高度并发、分布式和容错的系统,主要在 Java 和 Scala 语言环境下使用。Akka 的核心理念是通过 Actor 模型来解决多线程和并发问题,从而实现高效且可扩展的软件...