下一代的 Actor 模型框架 Proto Actor
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);
}
}
相關文章:
原文地址:https://www.oschina.net/p/protoactor
.NET社群新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注