Akka的好用例[关闭]

问题

我听过很多关于Akka框架(Java / Scala服务平台)的狂热,但到目前为止还没有看到很多用例的实际例子。所以我有兴趣听听开发人员成功使用它的事情。

只有一个限制:请不要包括编写聊天服务器的情况。 (为什么?因为这被过度使用作为许多类似事物的一个例子)


#1 热门回答(296 赞)

到目前为止,我已经在两个真正的项目中使用它非常成功。两者都处于近实时交通信息领域(高速公路上的交通),分布在多个节点上,在多方之间整合消息,可靠的后端系统。我不能自由地给客户提供具体信息,当我确实得到OK时可能会添加它作为参考。

Akka确实已经完成了这些项目,尽管我们从0.7版本开始。 (我们顺便使用scala)

其中一个最大的优点是,你可以轻松地从演员和消息中构建系统,而且几乎没有电子设备,它可以非常好地扩展,而不需要手动线程的所有复杂性,并且几乎可以免费在对象之间传递异步消息。

它非常适合建模任何类型的异步消息处理。我宁愿用这种风格编写任何类型的(网络)服务系统,而不是任何其他风格。 (你是否曾尝试使用JAX-WS编写异步Web服务(服务器端)?这是很多管道工程)。所以我会说任何不想挂在其中一个组件上的系统,因为所有内容都是使用同步方法隐式调用的,并且一个组件锁定某些东西。它非常稳定,故障的崩溃管理器解决方案确实运行良好。一切都很容易以编程方式设置,并且不难进行单元测试。

然后是优秀的附加模块。 Camel模块确实可以很好地插入Akka,并通过可配置的端点实现异步服务的轻松开发。

我对框架非常满意,它正在成为我们构建的连接系统的事实标准。


#2 热门回答(208 赞)

免责声明:我是Akka的PO

除了提供一个更简单的并发smorgasbord和正确(演员,代理,数据流并发)和STM形式的并发控制。

以下是你可能会考虑的一些用例:

  • 交易处理(在线游戏,金融,统计,投注,社交媒体,电信......)扩大规模,扩展,容错/ HA
  • 服务后端(任何行业,任何应用程序)服务REST,SOAP,cometd等充当消息中心/集成层扩展,向外扩展,容错/ HA
  • 管理单元并发/并行(任何应用程序)正确简单易用和理解只需将jar添加到现有JVM项目(使用Scala,Java,Groovy或JRuby)
  • 批处理(任何行业)Camel集成以与批处理数据源连接Actors分割并征服批处理工作负载
  • 通信中心(电信,网络媒体,移动媒体)扩大规模,扩展,容错/ HA
  • 游戏服务器(在线游戏,投注)向上扩展,向外扩展,容错/ HA
  • BI /数据挖掘/通用计算扩展,向外扩展,容错/ HA
  • 在这里插入其他好的用例

#3 热门回答(75 赞)

我们如何使用它的一个例子是在借记卡/信用卡交易的优先级队列上。我们有数百万这些,工作的努力取决于输入字符串类型。如果交易是CHECK类型,我们只有很少的处理,但如果它是一个销售点,那么还有许多工作要做,例如合并元数据(类别,标签,标签等)并提供服务(电子邮件/短信提醒,欺诈检测,低资金余额等)。基于输入类型,我们组成处理作业所需的各种特征(称为mixins)的类,然后执行工作。所有这些工作都以不同金融机构的实时模式进入同一队列。一旦数据被清理,它就被发送到不同的数据存储以进行持久性,分析或推送到套接字连接,或者发送到Lift comet actor。工作人员不断自我平衡工作,以便我们能够尽快处理数据。我们还可以使用其他服务,持久性模型以及关键决策点。

传递在JVM上的Erlang OTP样式消息为在现有库和应用程序服务器的肩膀上开发实时系统提供了一个很好的系统。

Akka允许你像传统中那样以速度传递消息!它还为你提供框架中的工具,以管理解决方案所需的大量actor池,远程节点和容错。