java 协程 实现 Akka

标签: java 协程 akka | 发表时间:2014-04-09 15:46 | 作者:
出处:http://m635674608.iteye.com

Akka是开源的,可以通过Apache 2许可获得。可以从 http://akka.io/downloads/ 下载。


Akka实现了独特的混合模型
Actors

Actors为你提供:

        对并发/并行程序的简单的、高级别的抽象。
        异步、非阻塞、高性能的事件驱动编程模型。
        非常轻量的事件驱动处理(1G内存可容纳约270万个actors)。


容错性

使用“let-it-crash”语义和监管者树形结构来实现容错。非常适合编写永不停机、自愈合的高容错系统。监管者树形结构可以跨多个JVM来提供真正的高容错系统。


位置透明性

Akka的所有元素都为分布式环境而设计:所有actor都仅通过发送消息进行互操作,所有操作都是异步的。


事务性actors

事务性Actor是actor与STM(Software Transactional Memory)的组合。它使你能够使用自动重试和回滚来组合出原子消息流。


Scala 和 Java APIs

Akka同时提供 Scala API 和 Java API.


Akka可以以两种不同的方式来使用

    以库的形式:在web应用中使用,放到 WEB-INF/lib 中或者作为一个普通的Jar包放进classpath。
    以微内核的形式:你可以将应用放进一个独立的内核。


Cloudy Akka 如何了?

Akka的商业支持早先被叫作Cloudy Akka. 它包括两部分:

    Akka的集群支持
    监控和管理(早先称为Atmos)

Cloudy Akka已经停止了。集群支持已经被移进了Akka的开源版本中(即将到来的Akka 2.1),而监控和管理(Atmos)现在被重新命名为Typesafe控制台,是Typesafe Stack(详见下文)商业合约的一部分。


Typesafe Stack

Akka现在是 Typesafe Stack 的一部分。

Typesafe stack是一个让开发者更容易地构建可扩展软件应用的现代软件平台。它在一个简单的包里组合了Scala语言、Akka、Play! Web框架和其它鲁棒的开发工具,能够与现有的Java基础设施无缝集成。Typesafe Stack是完全开源的。


Typesafe控制台

在Typesafe Stack的顶端,我们还有名叫Typesafe控制台的商业产品,提供以下功能:

    漂亮的Web界面,实时展示系统内部状态
    通过Dashboard、JMX和REST进行管理
    组件间及远程节点间消息的跟踪
    实时统计
    开销非常小的监控程序(生产系统中应该保持运行)
    单节点上统计与日志信息的合并
    统计数据的存储,以备后续处理
    安装升级及滚动升级


Akka平台提供哪些有竞争力的功能?

Akka提供可扩展的实时事务处理,是一个运行时与编程模型一致的系统,为以下目标设计:

    垂直扩展(并发)
    水平扩展(远程调用)
    高容错

在Akka的世界里,只有一个内容需要学习和管理,具有高内聚和高一致的语义。

Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心,Akka-actor是非常小的,可以非常方便地放进你的应用中,提供你需要的异步无锁并行功能,不会有任何困扰。

你可以任意选择Akka的某些部分集成到你的应用中,也可以使用完整的包——Akka 微内核,它是一个独立的容器,可以直接部署你的Akka应用。随着CPU核数越来越多,即使你只使用一台电脑,Akka也可作为一种提供卓越性能的选择。 Akka还同时提供多种并发范型,允许用户选择正确的工具来完成工作。


什么场景下特别适合使用Akka?

我们看到Akka被成功运用在众多行业的众多大企业,从投资业到商业银行、从零售业到社会媒体、仿真、游戏和、汽车和交通系统、数据分析等等等等。任何需要高吞吐率和低延迟的系统都是使用Akka的候选。

Actor使你能够进行服务失败管理(监管者),负载管理(缓和策略、超时和隔离),水平和垂直方向上的可扩展性(增加cpu核数和/或增加更多的机器)管理。

下面的链接中有一些Akka用户关于他们如何使用Akka的描述:
http://stackoverflow.com/questions/4493001/good-use-case-for-akka

所有以上这些都在这个Apache2许可的开源软件中。


以下是Akka被部署到生产环境中的领域
事务处理 (在线游戏,金融/银行业,贸易,统计,,社会媒体,电信):垂直扩展,水平扩展,容错/高可用性

服务后端 (任何行业,任何应用):提供REST, SOAP, Cometd, WebSockets 等服务 作为消息总线/集成层 垂直扩展,水平扩展,容错/高可用性

并发/并行 (任何应用):运行正确,方便使用,只需要将jar包添加到现有的JVM项目中(使用Scala,java, Groovy或jruby)

仿真:主/从,计算网格,MaReduce等等.

批处理 (任何行业):Camel集成来连接批处理数据源 Actor来分治地批处理工作负载

通信Hub (电信, Web媒体, 手机媒体):垂直扩展,水平扩展,容错/高可用性

(MOM, 在线游戏, ):垂直扩展,水平扩展,容错/高可用性

商业智能/数据挖掘/通用数据处理:垂直扩展,水平扩展,容错/高可用性

复杂事件流处理:垂直扩展,水平扩展,容错/高可用性

 

   资料

   http://akka.io/
   http://akka.io/docs/akka/1.2/java/remote-actors.html
   http://typesafe.com/resources/getting-started/tutorials/getting-started-first-java.html
   http://akka.io/docs/akka/1.2/java/remote-actors.html#id6
   http://www.gtan.com/akka_doc/index.html(中文api)

 

  

import akka.actor.UntypedActor;

public class TestActor extends UntypedActor {
    public void onReceive(Object msg) {
        getContext().reply(msg + " World");
    }
}
import akka.actor.Actors;
import akka.remoteinterface.RemoteServerModule;

public class Server {

    public static void main(String[] args) {
        RemoteServerModule server = Actors.remote().start("localhost", 8888);
        server.register("test-service", Actors.actorOf(TestActor .class));
    }
}
import akka.actor.ActorRef;
import akka.actor.Actors;

public class Client {

    public static void main(String[] args) {
        
        ActorRef actor = Actors.remote().actorFor("test-service", "localhost", 8888);
        for (int i = 0; i < 10000; i++) {
            Object result = actor.sendRequestReply("Hello");
            System.out.println(result);
        }
    }
} 

 

 





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java 协程 akka] 推荐:

java 协程 实现 Akka

- - zzm
Akka是开源的,可以通过Apache 2许可获得. 可以从 http://akka.io/downloads/ 下载.         对并发/并行程序的简单的、高级别的抽象.         异步、非阻塞、高性能的事件驱动编程模型.         非常轻量的事件驱动处理(1G内存可容纳约270万个actors).

Akka简单性能分析

- - 并发编程网 - ifeve.com
因为最近工作的关系,要把异步任务从应用服务器中拆分到专门的异步处理服务器中. 是采用MQ的方式将任务消息发出,在服务端进行处理,如下图所示:. 这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理. 这种方案的不足是,可能在某些需求的情况下,需要将结果存放到共享的HashMap或者Threadlocal中进行存放结果,客户端会一直阻塞,直到得到结果,从多线程的角度来说,还是用了共享变量,虽然共享变量可能是线程安全的,但是从并发模型的角度来讲,并不是一个最好的方式.

Akka 和 Storm 的设计差异

- - zzm
Akka 和 Storm 的设计差异. Akka 和 Storm 都是实现低延时, 高吞吐量计算的重要工具. 如果说 Akka 是 linux 内核的话, storm 更像是类似 Ubuntu 的发行版.然而 Storm. 并非 Akka 的发行版, 或许说 Akka 比作 BSD, Storm 比作 Ubuntu 更合适..

分布式应用框架Akka快速入门

- - CSDN博客架构设计推荐文章
转载请注明出处: http://blog.csdn.net/jmppok/article/details/17264495. 本文结合网上一些资料,对他们进行整理,摘选和翻译而成,对Akka进行简要的说明. Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用.

Akka Cluster 2.3.1 bug分析和相关实现原理

- - 开源软件 - ITeye博客
       Akka这样一个scala世界里的明星,给我们提供了各种各样吸引人的功能和特性,尤其在分布式、高并发领域. 但就像任何其他优秀的框架,它的实现也必然会有其复杂性,在Roland Kuhn(Akka Tech Lead)的带领下,Akka的实现原理吸收了各个领域内成熟、领先的理论. 尤其是Akka里cluster的实现,更是体现了非常多的优秀理论和实战经验.

Storm Akka Finagle对比及使用场景分析

- - CSDN博客云计算推荐文章
本文翻译自: http://blog.samibadawi.com/2013/04/akka-vs-finagle-vs-storm.html. Storm Akka Finagle对比及使用场景分析. Storm、Akka、Finagle是三个开源的分布式并行处理框架,都基于JVM运行. 他们在解决下面这些问题上十分有用:.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.

Java浮点数

- d0ngd0ng - 译言-电脑/网络/数码科技
Thomas Wang, 2000年3月. Java浮点数的定义大体上遵守了二进制浮点运算标准(即IEEE 754标准). IEEE 754标准提供了浮点数无穷,负无穷,负零和非数字(Not a number,简称NaN)的定义. 在Java开发方面,这些东西经常被多数程序员混淆. 在本文中,我们将讨论计算这些特殊的浮点数相关的结果.

Qt——转战Java?

- - 博客 - 伯乐在线
编者按:事实上,在跨平台开发方面,Qt仍是最好的工具之一,无可厚非,但Qt目前没有得到任何主流移动操作系统的正式支持. 诺基亚的未来计划,定位非常模糊,这也是令很多第三方开发者感到失望,因此将导致诺基亚屡遭失败的原因. Qt的主要开发者之一Mirko Boehm在博客上强烈讽刺Nokia裁了Qt部门的决定,称其为“绝望之举”,而非“策略变更”.