web-dev-qa-db-ja.com

分散同時実行性をサポートするためのalangまたはgolangの同様の代替手段?

Golangは組み込みサポートとの並行性が非常に優れていることを知っていますが、それらは分散されていないようです。そのため、分散環境で、プロデューサー/コンシューマーアプリケーションを作成するためのフレームワーク/ライブラリは何でしょうか。

28
Howard

分散プログラムでGoのチャネルの概念を使用する場合は、おそらく Go Circuit フレームワークをチェックしてください。

マルチプロセスプログラム(複数のマシンに分散している可能性があります)を実行するためのフレームワークを提供し、チャネルを使用してそれらのプロセス間で通信できるようにします。

24

ここでホイールを再発明する必要はありません...プロデューサー/コンシューマーアプリケーションは通常、メッセージキューを使用して構築されます。

このアプローチでは、問題を小さな(理想的にはべき等)タスクに分割し、これらのタスクをエンキューできるアプリケーションを構築してから、これらのタスクをデキューして実行できる別のワーカーアプリケーションを用意する必要があります。スケーリングは簡単です。ワーカーを追加するだけです。

Goで記述された非常に優れたソリューションについては、キューイングソリューションがたくさんあります [〜#〜] nsq [〜#〜] をご覧ください。

10
Caleb

2年遅れますが、他の誰かが探している場合。 https://github.com/AsynkronIT/gam

GAM(Go Actor Model)は、Akkaのような俳優と、Virtual GrainsのようなMs Orleansの両方をサポートしています。 Virtual GrainsのようなMs Orleansは、Protobufコード生成を介してサポートされており、タイプされたメッセージとタイプされた粒子タイプを提供します。 https://github.com/AsynkronIT/gam/blob/dev/examples/cluster/member/main.go を参照してください https://github.com/AsynkronIT/gam/blob /dev/examples/cluster/shared/protos.proto

また、1秒あたり1 mil以上のリモートメッセージも非常に高速です。

6
Roger Johansson

参考までに [〜#〜] nats [〜#〜] は、分散システム向けの高性能ソリューションです。これはオープンソースで、 [〜#〜] mit [〜#〜] ライセンスの下にあります。 「コアNATSサーバーは、分散アプリケーションを構築するための中枢神経システムとして機能します。」それに、Go、C#、Java、Ruby、Python、Node.jsなど、コミュニティによって提供される公式の clients があります。

2

AkkaはActor Modelに基づいています。そのために、テストに招待するNice Goフレームワークがあります: https://github.com/AsynkronIT/protoactor-go

ノード間を通過すると主張しているため、優れたパフォーマンスがあると言われています。

1秒あたり200万メッセージ

GoはすでにCSPを使用して実装していますが、Protoactorは以下を追加します。

  • 分離された並行性
  • デフォルトで配布
  • 耐障害性
2
Ismail H