我听过很多关于Akka框架(Java/Scala服务平台)的赞不绝口,但到目前为止,还没有看到很多实际用例的例子。因此,我很有兴趣了解开发人员如何成功地使用它。
只有一个限制:请不要包括写聊天服务器的情况。 (为什么?因为这已经被过度用作许多类似事情的例子)
我听过很多关于Akka框架(Java/Scala服务平台)的赞不绝口,但到目前为止,还没有看到很多实际用例的例子。因此,我很有兴趣了解开发人员如何成功地使用它。
只有一个限制:请不要包括写聊天服务器的情况。 (为什么?因为这已经被过度用作许多类似事情的例子)
当前回答
我们使用Akka来异步处理REST调用——与异步web服务器(基于net)一起,与传统的每个用户请求线程模型相比,我们可以在每个节点/服务器服务的用户数量上实现10倍的提高。
告诉你的老板,你的AWS托管费用将下降10倍,这是一个不用动脑筋的事情!嘘……不过别告诉亚马逊…:)
其他回答
我们在工作中的几个项目中使用了Akka,其中最有趣的是与车辆碰撞修复有关。主要在英国,但现在扩展到美国,亚洲,大洋洲和欧洲。 我们使用参与者来确保实时提供碰撞修复信息,以实现安全且具有成本效益的车辆修复。
关于Akka的问题其实更多的是“你不能用Akka做什么”。它与强大的框架集成的能力、强大的抽象性和所有的容错能力使它成为一个非常全面的工具包。
您可以将Akka用于几种不同的事情。
我在一个网站上工作,在那里我将技术堆栈迁移到Scala和Akka。我们用它来处理网站上发生的几乎所有事情。尽管你可能认为一个聊天的例子很糟糕,但基本上都是一样的:
网站上的实时更新(例如,浏览量,点赞,…) 显示实时用户评论 通知服务 搜索和其他各种服务
特别是实时更新很容易,因为他们归结为什么聊天的例子ist。服务部分是另一个有趣的话题,因为你可以简单地选择使用远程参与者,即使你的应用程序不是集群的,你也可以轻松地将它部署到不同的机器上。
我还将Akka用于PCB自动外接应用程序,其想法是能够从笔记本电脑扩展到数据中心。你给它的力量越大,结果就会越好。如果您尝试使用常见的并发性,这是非常难以实现的,因为Akka还提供了位置透明性。
目前作为一个空闲时间的项目,我正在构建一个只使用演员的web框架。同样,它的好处是从一台机器到整个机器集群的可伸缩性。此外,使用消息驱动方法可以使您的软件从一开始就面向服务。您拥有所有这些良好的组件,它们彼此通信,但不一定相互了解,它们位于同一台机器上,甚至不在同一个数据中心中。
自从谷歌阅读器关闭后,我开始使用RSS阅读器,当然使用Akka。对我来说,这完全是关于封装的服务。总之:参与者模型本身是您首先应该采用的,Akka是一个非常可靠的框架,可以帮助您实现它,并在此过程中获得许多好处。
我们正在使用akka及其camel插件为twimpact.com分发我们的分析和趋势处理。我们必须每秒处理50到1000条消息。除了使用camel进行多节点处理外,它还用于将单个处理器上的工作分配给多个工作人员,以获得最大性能。工作得很好,但需要了解如何处理拥塞。
我最近在Akka中实现了规范的map-reduce示例:Word count。所以这是Akka的一个用例:更好的性能。它更像是JRuby和Akka的参与者的一个实验,但它也表明Akka不仅仅是Scala或Java:它可以在JVM之上的所有语言上工作。
我们在语音对话系统(primetalk)中使用Akka。无论是对内还是对外。为了在单个集群节点上同时运行许多电话通道,显然需要一些多线程框架。Akka的工作非常完美。我们以前有过java并发性的噩梦。和Akka一起,它就像一个秋千——它简单地工作。坚固可靠。24 * 7,不间断。
在通道中,我们有并行处理的实时事件流。特别是: -冗长的自动语音识别-由演员完成; -音频输出生成器,混合一些音频源(包括合成语音); 文本到语音的转换是一个单独的在频道之间共享的角色集 -语义和知识加工。
为了实现复杂信号处理的互连,我们使用SynapseGrid。它具有在复杂参与者系统中对DataFlow进行编译时检查的好处。