为什么要用akka
Akka提供可扩展的实时事务处理。
Akka是一个运行时与编程模型一致的系统,为以下目标设计:
- 垂直扩展(并发)
- 水平扩展(远程调用)
- 高容错
在Akka的世界里,只有一个内容需要学习和管理,具有高内聚和高一致的语义。
Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心,Akka-actor是非常小的,可以非常方便地放进你的应用中,提供你需要的异步无锁并行功能,不会有任何困扰。
你可以任意选择Akka的某些部分集成到你的应用中,也可以使用完整的包——Akka 微内核,它是一个独立的容器,可以直接部署你的Akka应用。随着CPU核数越来越多,即使你只使用一台电脑,Akka也可作为一种提供卓越性能的选择。 Akka还同时提供多种并发范型,允许用户选择正确的工具来完成工作。
使用akka带来的好处
- AKKA提供一种Actor并发模型,其粒度比线程小很多,这意味着你可以在项目中使用大量的Actor。
- Akka提供了一套容错机制,允许在Actor出错时进行一些恢复或者重置操作
- AKKA不仅可以在单击上构建高并发程序,也可以在网络中构建分布式程序,并提供位置透明的Actor定位服务
Actor
actor是akka执行的基本单元,比线程更轻量级,使用akka可以忘掉线程了。事实上,线程调度已经被akka封装。
##消息投递
- 这个akka应用是有消息驱动的,消息是除了actor之外最重要的核心组件。在actor之前投递消息应该满足不可变性,也就是不便模式
- 消息投递有3种策略:之多一次投递,至少一次投递,精确的消息投递。BUT ,没必要在akka层面保证消息的可靠性,一般在业务层在保证
- akka可以在一定程度上保证顺序性,但不具备传递性,见《java高并发程序设计 P295》
模块
Akka的模块化做得非常好,它为不同的功能提供了不同的Jar包。
- akka-actor-2.0.jar – 标准Actor, 有类型Actor,等等
- akka-remote-2.0.jar – 远程Actor
- akka-slf4j-2.0.jar – SLF4J事件处理监听器
- akka-testkit-2.0.jar – 用于测试Actor的工具包
- akka-kernel-2.0.jar – Akka微内核,可运行一个基本的最小应用服务器
- akka-
-mailbox-2.0.jar – Akka可容错邮箱
要查看每个Akka模块的jar包依赖见 依赖 章节. 虽然不重要不过akka-actor
没有外部依赖 (除了scala-library.jar
JAR包).
我该如何使用和部署 Akka?
Akka 可以有几种使用方式:
- 作为一个库: 以普通jar包的形式放在classpath上,或放到web应用中的
WEB-INF/lib
位置 - 作为一个独立的应用程序,使用 Microkernel(微内核),自己有一个main类来初始化Actor系统