许多大型公司都使用Akka解决实际问题。 Akka旨在向多个方向恐吓并提供极大的灵活性。 Akka的目标之一是“管理系统过载”。
Akka使用Actors:“ Akka的代码组织单位”。 根据巴生的说法,“ Actor可帮助您创建并发,可伸缩和容错的应用程序。” 行为者“保持许多与业务逻辑分离的”政策决策”。 演员起源于1970年代(“就像计算机科学中所有很酷的东西一样”),而Erlang多年来一直在使用具有“巨大成功”的演员。
巴生警告说,避免“以共享状态来思考,即泄漏的抽象”。 他补充说,线程和锁是“一种执行手段”,而不是结构化的手段。 他说,这将执行与业务逻辑混合在一起。 并发收集是针对本地使用的良好优化。
演员是“按设计分配的”,而巴生有一张幻灯片,列出了几个解释该声明的项目符号。 他指出,参与者可以替代“线程”,“对象实例”,“回调或侦听器”,“单例或服务”,“路由器,负载均衡器或池”,“ Java EE”。会话Bean或消息驱动Bean,“进程外服务”和“有限状态机”。
巴生引用了卡尔•休伊特关于演员的录像带 。 演员是“体现了几个关键特征的基本计算单位”。
巴生在演示中以我喜欢的格式显示了代码示例:嵌入到他的幻灯片中并突出显示了颜色语法。 他显示了步骤0(“定义”),其中他的代码定义了Actor的类和Actor的行为。
定义后,第一个操作(I –“创建”)“创建Actor的新实例”。 所创建的Actor非常轻巧,其“状态和行为彼此无法区分”。 他把最后一点讲到了:“观察状态的唯一方法是通过向演员发送消息并查看演员的反应。” Actor是状态,行为和消息队列的“非常强大的封装”。
Akka提供了一个ActorSystem
来创建Akka Actor实例。 实例Props
,因为演员需要道具提供给演员。
第2步(“发送”)涉及“向演员发送消息”和“一切都以反应方式发生”和“一切都是异步且无锁的”。 Akka通过演员的tell
方法支持“即发即弃”模式。 但是,Akka提供有保证的交货顺序。 回复是在Akka中使用getSender().tell()
。
第3步(“成为”)“重新定义了演员的行为”,并且“通过接收消息做出反应”。 人们可能想在运行时更改actor行为的原因包括支持将竞争激烈的actor转换为actor池或实现正常降级。
演员可以监督其他演员,进入步骤4(“ SUPERVISE”)。 “保护者检测并响应其监督的Actor的故障”,巴生表示这转化为“干净的分离,处理和错误处理”。
Klang谈到了“ Java,C和C#中的故障管理”,在这里您“被赋予了单一的控制线程”。 他以这种方式将其放在子弹中:“如果这根线炸毁,您就被拧死了。” 这意味着所有“显式错误处理”都在“单线程内”完成,并与业务代码“纠缠”在一起。
巴生表示,处理错误处理的方法是将错误处理推离业务逻辑。 然后,他引用了洋葱层错误内核 。 巴生谈到了为Actor处理失败提供的回调( preRestart
和postRestart
)。
路由器是Actor的特例。 巴生使用RoundRobinRouter
显示了一张带有代码的RoundRobinRouter
。 他还展示了能够在配置文件中的代码之外定义部署方案,并使用路径从代码中引用该方案。 他进一步举例说明了“远程部署”的代码,该代码指定了带有“ akka”协议,主机名和端口的URL。
到目前为止,巴生提出的所有内容都可以作为Akka 2.0使用。 巴生表示,即将发布的Akka 2.1中将会有Akka集群。 他要求提供反馈,以确保Akka 2.2中的群集可以使用正确的API和正确的功能。 规范 ,用户指南和代码本身提供了有关Akka群集的更多信息。
Akka 2.1还具有基于Apache Camel的 Akka Camel 。 Typesafe控制台也可用于监视Akka应用程序,并且有此应用程序的实时演示 。
参考: JavaOne 2012:向上,向上和向外:来自JCG合作伙伴 Dustin Marx的Akka与Akka一起扩展软件 ,该文件来自Inspired by Actual Events博客。
翻译自: https://www.javacodegeeks.com/2012/10/javaone-2012-up-up-and-out-scaling.html