1.概述

Akka是一个用来开发支持并发、容错、扩展性的应用程序框架。它是actor model的实现,因此跟Erlang的并发模型很像。在actor模型的上下文中,所有的活动实体都被认为是互不依赖的actor。actor之间的互相通信是通过彼此之间发送异步消息来实现的。每个actor都有一个邮箱来存储接收到的消息。因此每个actor都维护着自己独立的状态。

每个actor是一个单一的线程,它不断地从其邮箱中poll(拉取)消息,并且连续不断地处理。对于已经处理过的消息的结果,actor可以改变它自身的内部状态或者发送一个新消息或者孵化一个新的actor。尽管单个的actor是自然有序的,但一个包含若干个actor的系统却是高度并发的并且极具扩展性的。因为那些处理线程是所有actor之间共享的。这也是我们为什么不该在actor线程里调用可能导致阻塞的“调用”。因为这样的调用可能会阻塞该线程使得他们无法替其他actor处理消息。

2.Actor系统

一个actor系统是所有actor存活的容器。它也提供一些共享的服务,比如调度,配置,日志记录等。一个actor系统也同时维护着一个为所有actor服务的线程池。多个actor系统可以在一台主机上共存。如果一个actor系统以RemoteActorRefProvider的身份启动,那么它可以被某个远程主机上的另一个actor系统访问。actor系统会自动得识别actor消息被路由到处于同一个actor系统内的某个actor还是处于一个远程actor系统内的actor。如果是本地通信的情况(同一个actor系统),那么消息的传输可以有效得利用共享内存的方式;如果是远程通信,那么消息将通过网络栈来传输。

actor基于层次化的组织形式(也就是说它基于树形结构)。每个新创建的actor都将以创建它的actor作为父节点。层次结构有利于监督、管理(父actor管理其子actor)。如果某个actor的子actor产生错误,该actor将会得到通知,如果它有能力处理这个错误,那么它会尝试处理否则它会负责重启该子actor。系统创建的首个actor将托管于系统提供的guardian actor/user。

4.Flink为什么要用Akka来代替RPC

原先的RPC服务存在的问题:

  1. 没有带回调的异步调用功能,这也是为什么Flink的多个运行时组件需要poll状态的原因,这导致了不必要的延时。
  2. 没有exception forwarding,产生的异常都只能简单地吞噬掉,这使得在运行时产生一些非常难调试的古怪问题
  3. 处理器的线程数受到限制,RPC只能处理一定量的并发请求,这迫使你不得不隔离线程池
  4. 参数不支持原始数据类型(或者原始数据类型的装箱类型),所有的一切都必须有一个特殊的序列化类
  5. 棘手的线程模型,RPC会持续的产生或终止线程

采用Akka的actor模型带来的好处

  1. Akka解决上述的所有问题,并对外透明
  2. supervisor模型允许你对actor做失效检测,它提供一个统一的方式来检测与处理失败(比如心跳丢失、调用失败…)
  3. Akka有工具来持久化有状态的actor,一旦失败可以在其他机器上重启他们。这个机制在master fail-over的场景下将会变得非常有用并且很重要。
  4. 你可以定义许多call target(actor),在TaskManager上的任务可以直接在JobManager上调用它们的ExecutionVertex,而不是调用JobManager,让其产生一个线程来查看执行状态。
  5. actor模型接近于在actor上采用队列模型一个接一个的运行,这使得状态机的并发模型变得简单而又健壮

4.Akka在Flink中的使用

Akka在Flink中用于三个分布式技术组件之间的通信,他们是JobClient,JobManager,TaskManager。Akka在Flink中主要的作用是用来充当一个coordinator的角色。

JobClient获取用户提交的job,然后将其提交给JobManager。JobManager随后对提交的job进行执行的环境准备。首先,它会分配job的执行需要的大量资源,这些资源主要是在TaskManager上的execution slots。在资源分配完成之后,JobManager会部署不同的task到特定的TaskManager上。在接收到task之后,TaskManager会创建线程来执行。所有的状态改变,比如开始计算或者完成计算都将给发回给JobManager。基于这些状态的改变,JobManager将引导task的执行直到其完成。一旦job完成执行,其执行结果将会返回给JobClient,进而告知用户

它们之间的一些通信流程如下图所示:

上图中三个使用Akka通信的分布式组件都具有自己的actor系统。

原文链接:https://blog.csdn.net/yanghua_kobe/article/details/51156218

95-848-020-源码-AKKA-Akka与Actor 模型相关推荐

  1. 100种目标检测数据集【voc格式yolo格式json格式coco格式】+YOLO系列算法源码及训练好的模型

    提示:本文介绍并分享了应用于各行业.各领域非常有用的目标检测数据集(感谢您的关注+三连,数据集持续更新中-),其中绝大部分数据集作者已应用于各种实际落地项目,数据集整体质量好,标注精确,数据的多样性充 ...

  2. Akka源码分析-Akka Typed

    对不起,akka typed 我是不准备进行源码分析的,首先这个库的API还没有release,所以会may change,也就意味着其概念和设计包括API都会修改,基本就没有再深入分析源码的意义了. ...

  3. 从源码到实战:BERT模型训练营

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 开课吧教育 方向:NLP 之 BERT实战 都说BERT模型开启了NLP的新时代,更有" ...

  4. Huggingface BERT源码详解:应用模型与训练优化

    ©PaperWeekly 原创 · 作者|李泺秋 学校|浙江大学硕士生 研究方向|自然语言处理.知识图谱 接上篇,记录一下对 HuggingFace 开源的 Transformers 项目代码的理解. ...

  5. akka linux 端口,Actor模型开发库 Akka

    Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. Actor模型并非什么新鲜事物,它由Carl Hewitt于上世纪70 ...

  6. spring源码解析系列之事件驱动模型架构

    2019独角兽企业重金招聘Python工程师标准>>> 说在前面 本文转自"天河聊技术"微信公众号 为什么要去研究spring源码,我认为java最NX的就是我写 ...

  7. Chrome源码剖析、上--多线程模型、进程通信、进程模型

    Chrome源码剖析.上 原著:duguguiyu. 整理:July. 时间:二零一一年四月二日. 出处:http://blog.csdn.net/v_JULY_v. 说明:此Chrome源码剖析很大 ...

  8. 【chrome】Chrome源码剖析、上--多线程模型、进程通信、进程模型

     Chrome源码剖析.上 原著:duguguiyu. 整理:July. 时间:二零一一年四月二日. 出处:http://blog.csdn.net/v_JULY_v. 说明:此Chrome源码剖析很 ...

  9. mysql 网络io_如何在MySQL源码中看其网络IO模型

    前言 MySQL是当今最流行的开源数据库,阅读其源码是一件大有裨益的事情(虽然其代码感觉比较凌乱).而笔者阅读一个Server源码的习惯就是先从其网络IO模型看起.于是,便有了本篇博客. MySQL启 ...

  10. YYModel 源码分析:字典转模型

    本文拿一个简单的例子,看 YYModel 字典转模型的源代码 有这么个模型 @interface Author : NSObject @property NSString *name; @proper ...

最新文章

  1. ejabberd java,java-xmpprpc结合ejabberd开发
  2. go怎么用改变c语言程序位置,Go与C语言的互操作
  3. 解决使用MinGW编译C++代码报cannot find -lxxxx的问题
  4. QT学习笔记(九):遍历容器-迭代器(iterators)
  5. x264 scan8存储分析
  6. 摘得“2019最佳智能手机”大奖的华为P30系列究竟比iPhone XS系列强在哪
  7. HDOJ--1262--寻找素数对
  8. 微服务系统和分布式系统的区别
  9. 职位搜索引擎职友集开放招聘信息协议
  10. 靖哥哥教你一步一步搭建redis集群环境
  11. C语言——定积分的计算
  12. No.1_NABCD模型分析
  13. jmeter计算测试QPS
  14. 20210326TCPandUDP
  15. 发年终奖了,可以安心过个好年了~
  16. 【图片选择】Android 仿微信图片选择器疾风加载 (单选,多选,相机)--唯剑做伴且随疾风前行
  17. 10个高质量的简历制作网站推荐
  18. 关于position:fixed;的居中问题
  19. 被微信好友删除,自己却不知道!3招帮你检测出来
  20. 首个中文Stable Diffusion模型开源;TPU演进十年;18个PyTorch性能优化技巧 | AI系统前沿动态...

热门文章

  1. 三星Galaxy Z Fold3已开始量产:搭载骁龙888 Pro 售价或超2万
  2. 一周愣降900元!这款iPhone不值了?
  3. 全球芯片供应不足!苹果iPhone生产可能面临中断风险
  4. 特斯拉否认推出16万元电动车 近期全球多地曝召回
  5. 王腾疑似喜提Redmi Note10系列新机:最高搭载1亿像素主摄
  6. 超越苹果! 雷军愿望达成:小米,世界第三!
  7. 马云身家将超4800亿!蚂蚁集团IPO发行价出炉,总市值达2.1万亿
  8. 特斯拉股价周五收盘下跌7.38% 此前公布第三季度交付量创新高
  9. 华为Mate 40这下稳了:全新5nm麒麟芯片将于9月全部交付
  10. 外媒揭晓华为Mate 30 Pro配置细节:新iPhone最大的对手