Proto Actor

Actor 模型框架
授权协议 Apache
开发语言 C# Google Go
所属分类 程序开发、 并发/并行处理框架
软件类型 开源软件
地区 不详
投 递 者 何灿
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

ProtoAct 是下一代的 Actor 模型框架,提供了 .NET 和 Go 语言的实现,默认支持分布式,提供管理和监控功能。在过去几年,我们经常看到两种 Actor 模型方法相互竞争,首先是经典的 Erlang/Akka 风格的 Actor 模型;以及微软的“虚拟Actor”或者成为“Grains” 的风格。这两种风格有各自的优缺点。

而 Proto.Actor 将这两种风格结合在一起形成一个通用的框架。同时解决了另外一个主要的问题 —— 目前已有的 Actor 框架或者是语言无法在不同平台间进行通讯,选择了一种框架会导致你锁定到某一个特定平台上。

这也就是为什么 Proto.Actor 引入了“Actor 标准协议”的概念,这是一个可以被不同语言实现的基础原语的协议。这改变了 Actor 系统中的游戏规则,你可以自由的为你基于 Actor 的微服务选择不同的语言,这在之前是不可想象的。

Proto.Actor 提供了可伸缩、实时的事务处理,适用的场景包括:

  • 投资和商业银行业务

  • 零售

  • 社交媒体

  • 仿真

  • 游戏和赌博

  • 汽车和交通系统

  • 卫生保健

  • 数据分析

任何需要高吞吐量、低延迟的业务需求都可以用到 Proto.Actor 。

Actors :

关于 Actor 模型的介绍:

Actor模型在并发编程中是比较常见的一种模型。很多开发语言都提供了原生的Actor模型。例如erlang,scala等。

Actor,可以看作是一个个独立的实体,他们之间是毫无关联的。但是,他们可以通过消息来通信。一个Actor收到其他Actor的信息后,它可以根据需要作出各种相应。消息的类型可以是任意的,消息的内容也可以是任意的。这点有点像webservice了。只提供接口服务,你不必了解我是如何实现的。

一个Actor如何处理多个Actor的请求呢?它先建立一个消息队列,每次收到消息后,就放入队列,而它每次也从队列中取出消息体来处理。通常我们都使得这个过程是循环的。让Actor可以时刻处理发送来的消息。

Go 示例代码 https://github.com/AsynkronIT/protoactor-go  :

type Hello struct{ Who string }
type HelloActor struct{}

func (state *HelloActor) Receive(context actor.Context) {
    switch msg := context.Message().(type) {
    case Hello:
        fmt.Printf("Hello %v\n", msg.Who)
    }
}

func main() {
    props := actor.FromInstance(&HelloActor{})
    pid := actor.Spawn(props)
    pid.Tell(Hello{Who: "Roger"})
    console.ReadLine()
}

C# 示例代码 https://github.com/AsynkronIT/protoactor-dotnet  :

using System;
using Proto;

class Program
{
    static void Main(string[] args)
    {
        var props = Actor.FromFunc(ctx =>
        {
            if(ctx.Message is string)
                ctx.Respond("hey");
            return Actor.Done;
        });
        var pid = Actor.Spawn(props);

        var reply = pid.RequestAsync<object>("hello").Result;
        Console.WriteLine(reply);
    }
}
  • 一年时间转瞬即逝,16年11月份因为业务需要,开始构建actor工具库,因为cluster下grain实现太困难,17年4月切换到具有该特征的protoactor,到现在,使用这个框架快一年。一路踩坑无数,趁这几天规划下阶段业务,就抽空聊聊。 ProtoActor框架的基本要点 Actor框架的提出基本上与CSP差不多处于同一个年代,相对于后者,过去10年Actor还是要稍微火一些,毕竟目前都强调

  • AKKA 介绍 https://zhuanlan.zhihu.com/p/38662453 https://cloud.tencent.com/developer/article/1165305 Akka是一款高性能高容错性的分布式&并行应用框架。 分布式 & 并行程序。 这块很重要,之前介绍Actor的时候只提到了并行。

 相关资料
  • 在深入到模块进行分析之前,首先来看看Tornado的设计模型。 Tornado框架设计模型 从上面的图可以看出,Tornado 不仅仅是一个WEB框架,它还完整地实现了HTTP服务器和客户端,在此基础上提供WEB服务。它可以分为四层: 最底层的EVENT层处理IO事件; TCP层实现了TCP服务器,负责数据传输; HTTP/HTTPS层基于HTTP协议实现了HTTP服务器和客户端; 最上层为WEB

  • 问题内容: 我是Django REST框架的初学者,需要你的建议。我正在开发Web服务。该服务必须提供与其他服务的REST接口。我需要实现的REST接口无法直接与我的模型一起使用(我的意思是获取,放置,发布,删除操作)。相反,它为其他服务提供了一些计算结果。根据请求,我的服务会进行一些计算,只是将结果返回(不将结果存储在自己的数据库中)。 以下是我对如何实现REST接口的理解。纠正我,如果我错了。

  • 我是Django REST框架的初学者,需要您的建议。我正在开发一个web服务。该服务必须向其他服务提供REST接口。我需要实现的REST接口并不直接与我的模型一起工作(我指的是get、put、post和delete操作)。取而代之的是,它向其他服务提供一些计算结果。在一个请求中,我的服务进行一些计算并返回结果(不将结果存储在自己的数据库中)。 下面是我对如何实现REST接口的理解。纠正我,如果我

  • 在模型内使用缓存说明 phpGrace 1.2.1 版本新增了在模型内使用缓存的功能,为模型封装带来极大变量 (: 实现步骤 01 : 创建模型 <?php /* * 模型类演示 以 person 数据表为例 * 作者 : 深海 5213606@qq.com * 一个自定义缓存类文件的例子, 实现了 persons 数据表 的列表数据及单条数据查询缓存 * 具体的缓存代码请根据项目情况自

  • 在模型内使用缓存说明 phpGrace 1.2.1 版本新增了在模型内使用缓存的功能,为模型封装带来极大变量 (: 实现步骤 01 : 创建模型 <?php /* * 模型类演示 以 person 数据表为例 * 作者 : 深海 5213606@qq.com * 一个自定义缓存类文件的例子, 实现了 persons 数据表 的列表数据及单条数据查询缓存 * 具体的缓存代码请根据项目情况自

  • 我有一个困难在绑定ngModel到离子段,同时建立一个离子应用程序。下面是我收到的错误标题: 无法绑定到“ngModel”,因为它不是“离子段”的已知属性 我打算将共享模块用于两个模块。我使用标准HTML标记创建了另外一个共享模块,它可以根据需要工作。但这一次似乎造成了错误。 我尝试了许多其他用户提出的解决类似问题的方案,但似乎没有一个能解决问题。以下是我正在使用的共享模块: 相同的HTML文件为

  • 我有以下实体框架的数据模型。 我有一个抽象的产品。每种产品都与一类产品相关。例如: 还有具体的产品: 我有分层类别,例如: 每个类别都有

  • 我有一个简单的可编辑的JComboBox,当您键入时,它过滤可用的选择。除了一些奇怪的情况外,它几乎可以工作,例如,当你键入“Sass”时,它将可用的选择过滤到一个“Sassi di Matera”,但如果你选择它,它将选择“Arte ruprestre della Vacamonica”,它碰巧是原始模型的第[0]项,而不是过滤后的模型的第[0]项。 我试着调试了几个小时,但似乎是一些奇怪的up