Akka的类库和模块《six》译

    在深刻研究编写Actor的一些最佳实践以前,先预览一下最经常使用的Akka库会颇有帮助。这将帮助您开始考虑要在系统中使用的功能。全部核心Akka功能均可以做为开源软件(OSS)使用。Lightbend赞助了Akka开发,但也能够为您提供培训,咨询,支持和Enterprise Suite 等商业产品,这是一套管理Akka系统的综合工具。html

    Akka OSS包含如下功能,将在本页后面介绍:编程

    使用Lightbend订阅,您能够在生产中使用Enterprise Suite ,包括如下对Akka核心功能的扩展:安全

    此页面未列出全部可用模块,但概述了主要功能,并让您了解在Akka上开始构建系统时能够达到的复杂程度。服务器

Actor library

    核心Akka库是akka-actor,在Akka库中使用了actor,提供了一致的集成模型,使您没法单独解决并发或分布式系统设计中出现的挑战。Actor是一种编程范式,它将封装(OOP的支柱之一)带到极致。与对象不一样,actor不只封装了它们的状态,还封装了它们的执行。与actor的通讯不是经过方法调用,而是经过传递消息。虽然这种差别可能看起来很小,但实际上它容许咱们在并发和远程通讯方面打破OOP的限制。若是这个描述感受过高而没法彻底掌握,请不要担忧,在下一章中咱们将详细解释Actor。目前,重要的一点是,这是一个处理基本级别的并发和分发的模型,而不是将这些功能引入OOP的临时修补尝试。网络

    Actor解决的挑战包括:多线程

  • 如何构建和设计高性能的并发应用程序。
  • 如何在多线程环境中处理错误。
  • 如何保护个人项目免受并发的陷阱。

Remoting

    远程处理使位于不一样计算机上的Actor可以无缝地交换消息。虽然做为JAR包分发,但Remoting比模块库更像模块。您主要使用配置启用它,它只有几个API。因为actor模型,远程和本地消息发送看起来彻底相同。您在本地系统上使用的模式直接转换为远程系统。您不多须要直接使用Remoting,但它提供了构建Cluster子系统的基础。并发

    远程解决的挑战包括如下内容:负载均衡

  • 如何解决生活在远程主机上的actor系统。
  • 如何解决远程演员系统上的各个Actor。
  • 如何将消息转换为线路上的字节。
  • 如何透明地管理主机之间的低级网络链接(和从新链接),检测崩溃的actor系统和主机。
  • 如何透明地在同一网络链接上复用来自不相关的一组参与者的通讯。

Cluster

    若是您有一组合做解决某些业务问题的actor系统,那么您可能但愿以一种规范的方式管理这些系统。虽然Remoting解决了与远程系统组件进行寻址和通讯的问题,但Clustering使您可以将这些组织成一个由成员协议捆绑在一块儿的“元系统”。在大多数状况下,您但愿使用群集模块而不是直接使用远程处理。群集在远程处理之上提供了一组额外的服务,这是大多数实际应用程序所须要的。异步

    Cluster模块解决的挑战包括如下内容:分布式

  • 如何维护一组能够相互通讯并将彼此视为集群的一部分的actor系统(集群)。
  • 如何安全地将新系统引入现有成员集。
  • 如何可靠地检测暂时没法访问的系统。
  • 如何删除失败的主机/系统(或缩小系统),以便全部剩余成员就群集的剩余子集达成一致。
  • 如何在当前成员集之间分配计算。
  • 如何将群集成员指定为某个角色,换句话说,提供某些服务而不是其余服务。

Cluster Sharding

    分片有助于解决在Akka集群成员之间分配一组Actor的问题。Sharding是一种主要与Persistence一块儿使用的模式,用于平衡大量持久性实体(由actor支持)到集群成员,并在成员崩溃或离开时将它们迁移到其余节点。

    Sharding解决的挑战包括:

  • 如何在一组系统上建模和扩展大量有状态实体。
  • 如何确保群集中的实体正确分布,以便在计算机之间正确平衡负载。
  • 如何确保从崩溃的系统迁移实体而不会丢失状态。
  • 如何确保实体不会同时存在于多个系统上,从而保持一致。

Cluster Singleton

    分布式系统中常见的(实际上有点常见)用例是让一个实体负责给定任务,该任务在集群的其余成员之间共享,并在主机系统出现故障时进行迁移。虽然这无能否认地引入了限制扩展的整个集群的共同瓶颈,可是有些状况下使用这种模式是不可避免的。群集单例容许群集选择将托管特定actor的actor系统,而其余系统始终能够独立于其所在位置访问所述服务。

    Singleton模块可用于解决这些挑战:

  • 如何确保整个群集中只运行一个服务实例。
  • 即便托管它的系统当前在缩小过程当中崩溃或关闭,如何确保服务已启动。
  • 如何从群集的任何成员到达此实例,假设它能够随时间迁移到其余系统。

Cluster Publish-Subscribe

    对于系统之间的协调,一般须要将消息分发到群集中的一组感兴趣系统的全部或一个系统。这种模式一般称为发布 - 订阅,该模块解决了这个问题。能够向主题的全部订户广播消息或者向表示感兴趣的任意玩家发送消息。

    Cluster Publish-Subscribe旨在解决如下挑战:

  • 如何向群集中感兴趣的一方广播消息。
  • 如何从群集中感兴趣的一方向成员发送消息。
  • 如何订阅和取消订阅群集中某个主题的事件。

Persistence

    就像OOP中的对象同样,actor会将它们的状态保存在易失性内存中。一旦系统关闭,正常或因为崩溃,内存中的全部数据都将丢失。持久性提供模式以使Actor可以持续致使其当前状态的事件。启动时,能够重播事件以恢复由actor主持的实体的状态。能够查询事件流并将其输入其余处理管道(例如,外部大数据集群)或备用视图(如报告)。

    Persistence应对如下挑战:

  • 如何在系统从新启动或崩溃时恢复实体/ actor的状态。
  • 如何实施CQRS系统。
  • 如何确保在网络错误和系统崩溃时可靠地传递消息。
  • 如何检测实体进入其当前状态的域事件。
  • 如何利用应用程序中的事件源来支持在项目不断发展的同时支持长时间运行的流程。

Streams

    Actor是并发的基本模型,但有一些常见的模式,它们的使用要求用户反复实现相同的模式。很是常见的状况是,Actor的链或图须要处理潜在的大型或无限的顺序事件流并正确协调资源使用,以便更快的处理阶段不会压倒链或图中较慢的处理阶段。Streams在actor之上提供了更高级别的抽象,简化了编写这样的处理网络,处理后台全部精细细节并提供安全,类型化,可组合的编程模型。Streams也是Reactive Streams标准的实现,它能够与该标准的全部第三方实现集成。

    Streams能够解决如下的问题:

  • 如何处理具备高性能的事件流或大型数据集,利用并发性并保持资源使用紧张。
  • 如何将可重用的事件/数据处理组件组装成灵活的管道。
  • 如何以灵活的方式将异步服务相互链接,并具备良好的性能。
  • 如何提供或使用符合Reactive Streams标准的接口与第三方库进行交互。

Distributed Data

    在最终一致性可接受的状况下,能够在Akka群集中的节点之间共享数据,而且即便面对群集分区也能够接受读取和写入。这可使用无冲突复制数据类型(CRDT)来实现,其中不一样节点上的写入能够同时发生而且以后以可预测的方式合并。分布式数据模块提供了共享数据和许多有用数据类型的基础结构。

    Distributed Data旨在解决如下挑战:

  • 即便面对集群分区,如何接受写入。
  • 如何在共享数据的同时确保低延迟的本地读写访问。

HTTP

    Akka HTTP是Akka的独立模块。

    远程,内部或外部提供API的事实标准是HTTP。Akka提供了一个库,用于构建或使用此类HTTP服务,方法是提供一组工具来建立HTTP服务(并提供服务)和一个可用于使用其余服务的客户端。这些工具特别适合经过利用Akka Streams的底层模型来流入和流出大量数据或实时事件。

    HTTP模块解决的一些挑战:

  • 如何经过HTTP API以高效的方式将系统或集群的服务公开给外部世界。
  • 如何使用HTTP将大型数据集传入和传出系统。
  • 如何使用HTTP将实时事件传入和传出系统。

Example of module use

    Akka模块无缝集成在一块儿。例如,考虑网站用户访问的大量有状态业务对象,例如文档或购物车。若是使用分片和持久性将它们建模为分片实体,它们将在群集中平衡,您能够按需扩展。它们将在来自广告活动的峰值期间或在假期处理以前提供,即便某些系统崩溃也是如此。您还可使用持久性查询获取域事件的实时流,并使用Streams将它们传输到流式快速数据引擎。而后,将该引擎的输出做为Stream,使用Akka Streams运算符对其进行操做,并将其做为由群集托管的负载均衡的HTTP服务器集提供的Web套接字链接公开,以支持您的实时业务分析工具。

    咱们但愿此文档引发您的兴趣!下一个主题介绍了咱们将在本指南的教程部分中构建的示例应用程序。

原文:https://doc.akka.io/docs/akka/current/guide/modules.html

有什么讨论的内容,能够加我公众号:

相关文章
相关标签/搜索