akka 概览

体系结构

Actor是Akka最核心的概念,也是最基本的执行单元,所以对Actor管理和监控的有效性是极为重要的。在Akka中,每个Actor都有自己的监管对象,即该Actor的创建者,它们通常会负责子Actor的失败处理,另外,某些Actor也需要对生命周期进行监控(比如该Actor的终止),以便及时的响应并作正确处理,这些监督和监控者本身也都是一个Actor。在Akka中,整个Actor体系被抽象成一个ActorSystem,它是一个层级的结构,拥有公共行为的配置和管理。

在ActorSystem基础上,Akka也提供了一些配套的组件,比如持久化,Http服务,网络服务等,他们都是构建高可用分布式应用不可或缺的部分,基本架构体系和周边产品如图1-4所示。

图1-4  Akka基本架构体系及周边产品

 

Actor组件

在Akka中,Actor是一个高度抽象的对象引用,它包含以下几个要素:   

  • 引用(ActorReference)  Actor的引用不同于普通对象的引用,也不能通过传统的“new”的方式直接创建一个Actor对象。很多时候需要通过actorOf或者actorSelection等方式返回一个ActorRef对象,该对象有可能存在于本地,也可能存在于远程节点,对我们来说,它是位置透明的。Actor之间的通信和执行任务都是通过消息驱动的(而不是API的调用)。

  • 状态(State)  Actor在不同时刻可能有着不同的状态,这些状态用变量来表示。在底层实现上,Actor是运行于线程池之上的,肯定会存在多个Actor共享同一个线程的情况,那么会不会出现并发问题呢?实际上,Akka为每个Actor都抽象出一个轻量级的执行“线程”(不是真的线程),在底层已经实现了隔离性,所以基本上不用担心该问题的出现。

  • 另外,当JVM崩溃时,为了避免Actor状态的丢失,我们可以借助持久化方案来对状态进行持久化操作。

  • 行为(Behavior)  Actor都有接收和发送消息的能力,每当它接收到一个消息后,就可以执行某个业务操作,同时也可以把消息转发到其他节点进行处理。

  • 监管策略(SupervisorStrategy)  Actor系统是一个层级结构,当任务被某个Actor分摊到子Actor时,父Actor就拥有监管子Actor的义务。在监管时,我们需要根据不同的情况选择不同的处理方案(比如停止、重启、恢复或者失败上溯)和策略(比如1 vs 1、1 vs N策略)。

邮箱  (Mailbox)

每个Actor都有自己的邮箱,所有其他Actor发送过来的消息都会进入该邮箱。Akka 自带多种邮箱类型,也提供自定义邮箱的接口。

 

路由 (Routing)

消息除了通过普通的Actor发送之外,也可以通过路由进行发送。当通过路由发送 消息时,我们可以根据需求来选择不同的路由策略,比如轮询、广播等。

 

持久化 (Persistence)

任何程序都可能有失败的可能,即便是JVM如此强大稳定的平台也都一样。当程 序出错, JVM崩溃时,任何关键状态的丢失,对我们后续的业务来讲都可能是致命的打击,所以状态数据的持久化变得非常重要。Akka提供了Actor状态的持久化方案, 以便我们在必要时恢复数据。

 

网络(远程和分布式集群)

网络功能是实现远程Actor和分布式集群的基础,这其中包含I/O、网络通(TCP/UDP)、序列化配置、分布式通信协议(Gossip)、节点(node)管理、集群分片等内容。

 

HTTP 模块

Akka提供了简单易用的Http模块,支持完整的Http服务端与客户端开发,可以帮 助我们快速构建性能极强的Rest Web服务。   

 

相关开源项目

Akka具有高性能、可扩展、设计友好等诸多优点,非常被适合用来作为分布式应 用的基础框架,而且由于对Http有非常好的支持,也让它在web服务领域占有一席之地。目前业界已经有多个基于Akka实现的开源项目,项目类型涵盖了Web开发、微服 务、分布式文件或计算服务等。下面是Akka中两个具有代表性的开源项目:    

 

Play框架    

  • 一款大名鼎鼎的Web开发框架。它不同于其他Servlet系的框架,比如Struts或者SpringMVC,底层基于Akka构建,天生拥有异步的特点,具有极佳的性能。

  • 它默认提供restful风格的API,同时也对WebSocket有不错的支持。

Lagom框架

在目前IT界,最火爆的概念要属"微服务"了,微服务的理念是:把业务功能 拆成小的、独立的单元,他们之间能够互相通信而且支持水平扩展。Lagom 就是这样一款微服务框架,它基于异步的消息驱动,对分布式集群、持久化(如  JPA、NoSql)都有良好的支持。同时,它也拥有完整的集成开发环境,非常 便于在线部署和管理。

 

小结

随着互联网的高速发展,开发分布式&并行应用将不再是某些巨头公司的“专利”,而对大部分研发团队来讲,从零开发自己的分布式架构又会面临诸多挑战,此时选择Akka作为分布式并行服务的基础框架将是极好的! Akka底层采用Scala语言实现(JVM上另外一款明星语言),它基于Actor模型,在底层帮助开发者屏蔽了异步、消息通信、容错处理、网络服务、分布式集群等实现细节。在Akka基础上,也诞生了Play、Lagom等应用框架,让开发者更容易打造自己的高可用分布式系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值