Akka.NETの概要

アッカとは?


リアルタイムのスケーラブルな分散トランザクション処理


正しく、並列で、フォールトトレラントでスケーラブルなアプリケーションを作成するのは難しいと考えています。

ほとんどの場合、これは間違ったツールと間違ったレベルの抽象化を使用しているためです。 Akkaはそれを変更するために作成されました。

アクターモデルを使用して、抽象化のレベルを上げ、スケーラブルで復元力のある柔軟なアプリケーションを作成するためのより良いプラットフォームを提供します(詳細については、 Reactive Manifestoを参照)。

フォールトトレランスを確保するために、電気通信業界で大成功を収めて使用されている自己修復アプリケーションとシステムを作成し、停止することのない「let it fall」モデルを使用しています。 また、アクターは、配布の透過的な抽象化レベルと、真にスケーラブルで復元力のあるアプリケーションの基盤を提供します。

Akka.NETはオープンソースプロジェクトであり、 Apache 2ライセンスの下で利用可能です- ここで説明します

ユニークなハイブリッド


俳優


俳優はあなたに与えます:


耐障害性



透明な配置


Akkaのすべては、分散環境で動作するように設計されています。アクター間のやり取りはすべてシンプルなメッセージングを使用し、すべてが非同期です。

クラスタリングのサポートは現在ベータ版です。 詳細はこちらをご覧ください

持続性


Akka.Persistenceは現在ベータ版であり、非常に活発に開発されています。 (ドキュメント内のアイテムのリンクは壊れていますが、githubでは「 まだ実装されていません 」とだけ書かれています )。

なぜアッカなのか?


競合他社に対するAkka.NETの利点は何ですか?


Akka.NETは、スケーラブルな分散リアルタイムトランザクション処理を提供します。

Akka.NETは、以下のための単一のランタイムおよびプログラミングモデルです。


Akka.NETは非常にスケーラブルなソフトウェアです。 パフォーマンスのコンテキストだけでなく、それが使用されるアプリケーションのサイズにおいても同様です。 Akka.NETのコアであるAkka.NET-actorは非常に小さく、非同期を必要とする既存のプロジェクトに簡単に配置でき、競争力を妨げません。

Akka.NETを使用する良い例ですか?


Akka.NETは、さまざまな業界の多くの大規模な組織でどのように使用されているかがわかります。


アクターを使用すると、障害(マネージャー)を管理し、ワークロード(棚上げ戦略、タイムアウト、プロセス分離)を管理できるだけでなく、水平および垂直のスケーラビリティ(コアを追加したり、マシンを追加したりできます)。

これはAkkaユーザーの何人かが言うことです。

Akka.NETを使い始める


このチュートリアルは、Akka.NETの使用の概要です。 これにより、C#を使用して簡単なGreeter(Welcoming)アクターが作成されます。

プロジェクトのセットアップ


Visual Studioを起動して、新しいC#コンソールアプリケーションを作成します。 次に、パッケージマネージャーコンソールを開き、次のように入力します。
PM> インストール-パッケージAkka

NuGetを使用することもできます
画像

次に、次を使用して追加する必要があります。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //     using Akka; using Akka.Actor; namespace ConsoleApplication11 { class Program { static void Main(string[] args) { } } } 

最初の俳優を作成する


最初のステップは、アクターが応答するメッセージのタイプを作成することです。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Akka; using Akka.Actor; namespace ConsoleApplication11 { //  ()  ,       public class Greet { public Greet(string who) { Who = who; } public string Who { get;private set; } } class Program { static void Main(string[] args) { } } } 

メッセージタイプを取得したら、アクターを作成できます。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Akka; using Akka.Actor; namespace ConsoleApplication11 { public class Greet { public Greet(string who) { Who = who; } public string Who { get;private set; } } //    public class GreetingActor : ReceiveActor { public GreetingActor() { //    //  Greet ()  Receive<Greet>(greet => Console.WriteLine("Hello {0}", greet.Who)); } } class Program { static void Main(string[] args) { } } } 

次に、アクターにメッセージを送信します。 これを行うには、 ActorSystemを使用してActorSystemを呼び出しActorOf

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Akka; using Akka.Actor; namespace ConsoleApplication11 { public class Greet { public Greet(string who) { Who = who; } public string Who { get;private set; } } public class GreetingActor : ReceiveActor { public GreetingActor() { Receive<Greet>(greet => Console.WriteLine("Hello {0}", greet.Who)); } } class Program { static void Main(string[] args) { //     (   ) var system = ActorSystem.Create("MySystem"); //        . //   "ActorRef",    //     , //       . var greeter = system.ActorOf<GreetingActor>("greeter"); //    greeter.Tell(new Greet("World")); //      //   ,    //   . Console.ReadLine(); } } } 

したがって、アクターは、任意の数の呼び出しスレッドから送信されたメッセージを受信する準備ができています。

必須のHello World!


この例は、C#およびF#でアクターを定義および使用する方法を示しています。

C#APIを使用したHello World


メッセージ定義:

 //  ()  ,       public class Greet { public Greet(string who) { Who = who; } public string Who { get;private set; } } 

ReceiveActor APIを使用してアクターを定義します:

 //    public class GreetingActor : ReceiveActor { public GreetingActor() { Receive<Greet>(greet => Console.WriteLine("Hello {0}", greet.Who)); } } 

...またはTypedActor APIを使用:

 public class GreetingActor : TypedActor , IHandle<Greet> { public void Handle(Greet greet) { Console.WriteLine("Hello {0}!", greet.Who); } } 

使用法:

 //     (   ) var system = ActorSystem.Create("MySystem"); //        . //   "IActorRef",    //     , //       . var greeter = system.ActorOf<GreetingActor>("greeter"); //    greeter.Tell(new Greet("World")); //      //   ,    //   . Console.ReadLine(); 

以下も参照してください(元のアイテムは現在ありません):


F#APIを使用したHello World:

 //  ()  ,       type Greet = Greet of string let system = ActorSystem.Create "MySystem" // Use F# computation expression with tail-recursive loop // to create an actor message handler and return a reference let greeter = spawn system "greeter" <| fun mailbox -> let rec loop() = actor { let! msg = mailbox.Receive() match msg with | Greet who -> printf "Hello, %s!\n" who return! loop() } loop() greeter <! Greet "World" 

ユースケースと展開シナリオ:

コンソールアプリケーション
PM> install-package Akka
PM> install-package Akka.Remote

 using Akka; using Akka.Actor; using Akka.Configuration; namespace Foo.Bar { class Program { static void Main(string[] args) { // configure remoting for localhost:8081 var fluentConfig = FluentConfig.Begin() .StartRemotingOn("localhost", 8081) .Build(); using (var system = ActorSystem.Create("my-actor-server", fluentConfig)) { // start two services var service1= system.ActorOf<Service1>("service1"); var service2 = system.ActorOf<Service2>("service2"); Console.ReadKey(); } } } } 


地下室


この記事は、 非常に緩やかな翻訳ですAkka.NETの概要

Source: https://habr.com/ru/post/J320396/


All Articles