Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。

Akka 通常是指一个强大的分布式工具集,用于协调远程计算资源来进行一些工作

  • Akka 工具集以及Actor 模型的介绍。
  • Actor 与并发:响应式编程。Actor 与Future 的使用。
  • 传递消息:消息传递模式。 第4 章 Actor 的生命周期—处理状态与错误:Actor 生命周期、监督机制、Stash/ Unstash、Become/Unbecome 以及有限自动机。
  • 纵向扩展:并发编程、Router Group/Pool、Dispatcher、阻塞I/O 的处理以 及API。
  • 横向扩展—集群化:集群、CAP 理论以及Akka Cluster。
  • 处理邮箱问题:加大邮箱负载、不同邮箱的选择、熔断机制。

Actor 模型是一种并发计算的理论模型,而Akka 的核心其实是Actor 并发模型的一种现代化实现

  什么是Actor 首先,让我们来定义什么是Actor。在Actor 模型中,Actor 是一个并发原语;更简单 地说,可以把一个Actor 看作是一个工人,就像能够工作或是处理任务的进程和线程一样。 把Actor 看成是某个机构中拥有特定职位及职责的员工可能会对理解有所帮助。比如说一 个寿司餐馆。餐馆的职员需要做各种各样不同的工作,给客人准备餐盘就是其中之一。

  Actor 每次只同步处理一个消息。邮箱本质上是等待Actor 处理的一个工作队列,如 图1-1 所示。处理一个消息时,为了能够做出响应,Actor 可以修改内部状态,创建更多 Actor 或是将消息发送给其他Actor。

 在具体实现中,我们通常使用Actor 系统这个术语来表示多个Actor 的集合以及所 有与该Actor 集合相关的东西,包括地址、邮箱以及配置。 下面再重申一下这几个重要的概念:

  • Actor:一个表示工作节点的并发原语,同步处理接收到的消息。Actor 可以保存 并修改内部状态。
  • 消息:用于跨进程(比如多个Actor 之间)通信的数据。
  • 消息传递:一种软件开发范式,通过传递消息来触发各种行为,而不是直接 触发行为。
  • 邮箱地址:消息传递的目标地址,当Actor 空闲时会从该地址获取消息进行处理。
  • 邮箱:在Actor 处理消息前具体存储消息的地方。可以将其看作是一个消息队列。
  • Actor 系统:多个Actor 的集合以及这些Actor 的邮箱地址、邮箱和配置等。

  我们可以举一个现实世界中的例子来比喻使用Actor 模型来建模的 过程,这会帮助我们理解它带来的好处。比如有一个寿司餐馆,其中有3 个Actor:客人、 服务员以及厨师。 首先,客人向服务员点单。服务员将客人点的菜品写在一张纸条上,然后将这张纸 条放在厨师的邮箱中(将纸条贴在厨房的窗户上)。当厨师有空闲的时候,就会获取这条 消息(客人点的菜品),然后就开始制作寿司(处理消息),直至寿司制作完成。寿司准 备好以后,厨师会发送一条消息(盛放寿司的盘子)到服务员的邮箱(厨房的窗户),等 待服务员来获取这条消息。此时厨师可以去处理其他客人的订单。 当服务员有空闲时,就可以从厨房的窗户获取食物的消息(盛放寿司的盘子),然后 将其送到客人的邮箱(比如餐桌)。当客人准备好的时候,他们就会处理消息(吃寿司), 如图1-2 所示。 运用餐厅的运作来理解Actor 模型是很容易的。随着越来越多的客人来到餐厅,我们 可以想象服务员每次接收一位客人的下单,并将订单交给厨房,接着厨师处理订单制作寿 司,最后服务员将寿司交给客人。每个任务都可以并发进行。这就是Actor 模型提供的最 大好处之一:当每个人各司其职时,使用Actor 模型分析并发事件非常容易。而使用Actor 模型对真实应用程序的建模过程和本例中对寿司餐厅的建模过程并没有太大差异。

Akka并发编程框架 -概念模型(Akka.net或者Orleans)的更多相关文章

  1. java并发编程框架 Executor ExecutorService invokeall

    首先介绍两个重要的接口,Executor和ExecutorService,定义如下: public interface Executor { void execute(Runnable command ...

  2. java架构《并发编程框架篇 __Disruptor》

    Disruptor入门   获得Disruptor 可以通过Maven或者下载jar来安装Disruptor.只要把对应的jar放在Java classpath就可以了. 基本的事件生产和消费 我们从 ...

  3. Akka并发编程——第五节:Actor模型(四)

    本节主要内容: 1. 停止Actor 1. 停止Actor (1)通过ActorSystem.shutdown方法停止全部 Actor的执行 /* *停止Actor:ActorSystem.shutd ...

  4. disruptor - Concurrent Programming Framework 并发编程框架

    disruptor发布了Java的2.0版本(.Net版本见这里),disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件 ...

  5. Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable

    一.Exectuor框架简介 Java从1.5版本开始,为简化多线程并发编程,引入全新的并发编程包:java.util.concurrent及其并发编程框架(Executor框架). Executor ...

  6. GitHub标星120K+的JDK并发编程指南,连续霸榜GitHub终于开源了

    前言 在编程行业中,有一个东西是和广大程序员形影不离的,在最一开始接触编程就是配置它的运行环境,然后java / javac,对,这个东西就是jdk 昨天项目刚上线,可以稍微休息一下了,但是猛的闲下来 ...

  7. Scala-Unit7-Scala并发编程模型AKKA

    一.Akka简介 Akka时spark的底层通信框架,Hadoop的底层通信框架时rpc. 并发的程序编写很难,但是Akka解决了spark的这个问题. Akka构建在JVM平台上,是一种高并发.分布 ...

  8. 大数据入门第二十一天——scala入门(二)并发编程Akka

    一.概述 1.什么是akka Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable).弹性的(Resilient).快速响应的(Responsive)应用程序的平台. 更多入门的基 ...

  9. Scala并发编程模型AKKA

    一.并发编程模型AKKA Spark使用底层通信框架AKKA 分布式 master worker hadoop使用的是rpc 1)akka简介 写并发程序很难,AKKA解决spark这个问题. akk ...

随机推荐

  1. Django之BBS博客项目

    一.登陆功能(验证码) from geetest import GeetestLib from django.contrib import auth #使用极验滑动验证码的登陆 def login(r ...

  2. 【medium】220. Contains Duplicate III

    因为要考虑超时问题,所以虽然简单的for循环也可以做,但是要用map等内部红黑树实现的容器. Given an array of integers, find out whether there ar ...

  3. 从GitHub下载demo时遇到的依赖问题

    从GitHub上使用download zip下载时,经常遇到一些依赖工程没有一起下载,如果额外手动下载,配置起来也相当费事,其实,标准的方法是使用以下命令下载这样的demo. git clone -- ...

  4. oracle查看执行最慢与查询次数最多的sql语句

    前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致.如果执行频 ...

  5. Vue父子组件之间的相互通信

    组件是Vue知识体系中最重要的一部分之一,父子组件由于作用域的不同,无法直接对对方的数据进行操作.它们之间的数据传递都是通过中间介质进行的,父组件给子组件传值是通过props属性,而子组件给父组件传值 ...

  6. Emacs Org-mode 3 表格

    Org 使用内置的表格编辑器.可以进行简单的表格编写和计算. Org中的表格 第一个非空字符“|” 视为表格的起始位置,后面的“|” 视为字段分隔符. 3.1 生成表格 编写表格时,可以将字段先写好, ...

  7. 你不知道的CSS单位

    CSS中大部分属性值都有对应的量词单位,常见的如描述盒模型尺寸的 width, height, margin, padding, border,又比如CSS3中的transform属性的一些值.下面的 ...

  8. Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql

    一般Hive依赖关系型数据库Mysql,故先安装Mysql $: yum install mysql-server mysql-client [yum安装] $: /etc/init.d/mysqld ...

  9. matplotlib基本用法-【老鱼学matplotlib】

    本文介绍一下matplotlib的最基本用法. 这次我们要显示一个线性方程的直线. 首先要引入matplotlib库,一般是用plt这个简写的,我们就按照大多数人的惯例来进行命名: import ma ...

  10. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...