Actor编程模型——简介

2014年10月31日  ⁄ 综合 ⁄ 共 1983字 ⁄ 字号  小 中 大  ⁄ 评论关闭

一、            引言

之前系统中有这样一处代码:

在线上运行一段时间后,这个任务线程竟然莫名其妙地退出了,要不是后来添加了一些日志信息,以及thread-dump分析,根本不晓得这个任务早都没有了。原因就是handler方法里面抛出了unchecked异常NullPointerException,导致该任务直接退出了,while循环直接退出结束。后来用try…catch包裹了handler方法,才能让其幸存下来,并且异常也打印出来了。

我们用try-catch来获取异常信息,打印日志,查看bug代码,然后修复重新发布,一段时间后可能又会抛出另外一个什么unchecked异常后,又要重复这样。

目前的做法基本是这样的,但话说,如果这个任务线程很关键,是p0级的,是会导致飞机失联的(^o^),那根本不允许经过这些漫长的步骤来修复,然后重新发布运行。如果系统能够自动容错,自动处理这些异常和错误,而且仍然保持运行,那情况可能就不一样了,为此本文抛砖引玉,介绍一下actor编程模型。

二、            Actor编程模型

Actor思想是由 Carl Hewitt在1973年提出来的,Erlang/OTP的出现使得actor编程理论得到完美呈现,之后其他的actor系统和框架(如本文后面会提到的akka,scala等等)都是或多或少借鉴了Erlang的实现思想。

Actor的特点: concurrent,
distributed, and fault tolerant。

1.        actor基本介绍

引言中提到的“容错”只是actor编程模型中的一个特征,另外还包括并发和分布式。

Ø  actor

在面对复杂任务时,我们常常需要将其分解为一个个小的任务单元来将问题分而治之。在actor编程思想里面,有3个重点方面:a)任务单元是足够轻量级的,创建成本很小;b)任务单元通过异步消息进行通信,不共享内存;b)任务单元的调度执行是由底层框架来负责的,而不是映射为一个OS级的执行线程,因此可以一个系统中可以创建上百万的任务单元。

上面的任务单元被称为一个actor,这些特点为业务提供了很方便的并发和并行特性。首先,没有了“锁”的概念,不再需要在各种锁的并发竞争中挣扎,其次,actor是由底层框架进行调度,不是OS级线程的调度切换,使得系统上下文切换不会抓狂。

Ø  容错

Actor系统的容错是通过监控来保证的,actor可以创建一个新actor,创建actor的父actor需要负责其子actor的监控任务,一般创建一个新子actor的时候要定义一个监控策略(Supervisor
Strategy),该策略定义了怎么处理子actor抛出的错误,以及如何重启、恢复甚至结束子actor。整个actor系统会是一个稳健的监控树构成。

Joe Armstrong(Erlang作者)语录:

在构建可容错软件系统的过程中要解决的本质问题就是故障隔离。不同的程序员会编写不同的模块,有的模块正确,有的存在错误。我们不希望有错误的模块对没有错误的模块产生任何不利的影响。

因为消除大型软件系统中的这类软件错误仍然是一个未解的难题,所以我认为构建大型的可靠系统的唯一现实的方法就是把系统分解成许多独立的并行进程,并为监控和重启这些进程提供一些机制。

Ø  分布式

在actor系统中,actor之间的通信是通过消息传递来实现的,然而两个进行消息传递通信的actor可以位于同一个机器(或者运行节点,因为一个机器可以运行多个实例),也可以位于不同的机器(或节点)中。也就是说actor的位置对于业务程序来说是透明的,不需要关心底层通信细节,而且保证通信原语(即传递消息的方式)是一样。

三、            小结

编程的困难在于抽象(Joe Armstrong),Actor编程思想为我们构建大型的分布式系统提供了参考和借鉴,我们并不一定要用,但是可以学习参考一下,拓展视野,就好比产品经理不能仅会Axure,也要学习用户心理学是一样的道理。

四、            参考

1.        http://en.wikipedia.org/wiki/Actor

2.        Joe
Armstrong博士论文《面向软件错误构建可靠的分布式系统》

3.        http://www.erlang.org/doc/design_principles/des_princ.html

4.        http://doc.akka.io/docs/akka/2.3.0/general/actors.html

5.        http://www.scala-lang.org/what-is-scala.html

本文摘自:http://www.xuebuyuan.com/2198538.html

Actor编程模型——简介相关推荐

  1. 【专家坐堂】四种并发编程模型简介

    本文来自网易云社区 概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" •       并发 :同一时间 对待 多件事情 (逻辑层面) ...

  2. 四种并发编程模型简介

    概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" •       并发 :同一时间 对待 多件事情 (逻辑层面) •       并 ...

  3. ibm mq 编程_IBM SOA编程模型简介

    ibm mq 编程 SOA编程模型系列 对于任何一个程序员,尤其是非程序员,要有效地掌握和应用令人震惊的软件技术,实践,工具和平台,变得越来越困难. 但是,如果要成功进行业务流程转型,则大量的非程序员 ...

  4. GPU及GPU通用计算编程模型简介

    以下内容来自网络总结: NVIDIA公司在1999年发布GeForce256时首先提出GPU(图形处理器)的概念,随后大量复杂的应用需求促使整个产业蓬勃发展至今. GPU英文全称Graphic Pro ...

  5. SAP CAP 编程模型简介

    官网 CAP 是用于构建企业级服务和应用程序的语言.库和工具框架.它引导开发人员沿着经过验证的最佳实践和大量现成的解决方案来应对重复性任务的"黄金之路". 基于 CAP 的项目受益 ...

  6. Actor编程模型——Erlang/OTP

    http://blog.csdn.net/wuhuan_wp/article/details/24881191 转载于:https://www.cnblogs.com/lpd1/p/8350675.h ...

  7. C# 线程知识--异步编程模型(APM)

    在构建高性能.可伸缩的应用程序时,必定会采用异步操作来提升应用程序性能,改善用户体验,异步操作与线程池结合允许使用很少的线程执行许多的操作.CLR中提供了一种异步操作的模式即异步编程模式. 1.异步编 ...

  8. Hadoop MapReduce编程模型

    MapReduce编程模型 目录 MapReduce编程模型 1.MapReduce编程模型简介 2.什么是MapReduce 3.MapReduce的优缺点 4.MapReduce程序设计方法 5. ...

  9. java actor akka_Actor 模型及Akka简介

    Actor 模型 Actor 的基础就是消息传递,一个 Actor 可以认为是一个基本的计算单元,它能接收消息并基于其执行运算,它也可以发送消息给其他 Actor.Actors 之间相互隔离,它们之间 ...

最新文章

  1. servlet和action的区别
  2. IM设计思考:XMPP多用户文本聊天协议(MUC:Multi User Chat)
  3. is在python中是什么意思_Python 中 is 与 == 有啥区别?
  4. C++/C--删除string末尾字符的方法【转载】
  5. [BZOJ3506] [Cqoi2014] 排序机械臂 (splay)
  6. 电子商务网站建设规划方案
  7. ADMM 大规模变量优化
  8. OpenCV 官方版本百度云盘下载
  9. 苹果笔记本能玩英雄联盟吗_等了一整年的英雄联盟手游,终于能玩了!
  10. 程序员必看电影片单,高分烧脑假期必备!
  11. asio Tcp服务退出时崩溃bug
  12. C语言之计算某天为一年中第几天
  13. CSS图片上面放文字实现方式
  14. 流程图软件lauto_Iauto流程软件
  15. GYM CERC 16 K Key Knocking 构造
  16. RLC电阻电容电感基础知识——电容篇
  17. 小程序+动易SF制作随手拍实例全景式操作(3)
  18. Elasticsearch exception [type=action_request_validation_exception, reason=Validation Failed:
  19. 聊天机器人中的深度学习
  20. 串流直播流媒体视频发布平台功能模块和产品技术参数

热门文章

  1. __builtin_ffs 实现原理
  2. linux poweroff无法关机,linux关机重启六种方法(sysrq shutdown halt init ipmi poweroff)
  3. 关于xxl-job终止任务但程序没有停止的问题
  4. Excel中序号自动填充
  5. Qt学习之路-简易画板4(鼠标点击拖动图形功能)
  6. 杜比服务器网站,杜比服务器远程账号和密码
  7. AI绘图实战(一):制作购物车图标icon | Stable Diffusion成为设计师生产力工具
  8. java hypot_java – 为什么hypot()函数这么慢?
  9. 浅析大数据前景及就业方向
  10. VMware 虚拟机怎么识别不了ISO文件