Android、iPhone、Second Life のクライアントにサービスを提供するゲーム用のサーバー システムを Scala + Akka で開発しています。このサーバーには、複数のマシンで実行する高可用性が必要な部分があります。これらのサーバーの 1 つが (ハードウェア障害などで) 停止した場合でも、システムは稼働し続ける必要があります。私は、Cassandra の仕組みと同様に、クライアントが接続しようとするマシンのリストを持っていることを望んでいると思います。
これまで Akka で見たマルチノードの例は、高可用性 (少なくともハードウェアに関して) ではなく、スケーラビリティの考え方に重点を置いているように思えます。マルチノードの例には、常に単一障害点があるようです。たとえば、ロード バランサーがありますが、ロード バランサーを備えたマシンの 1 つを再起動する必要がある場合、システムにダウンタイムが発生します。
Akka のこのタイプのハードウェア フォールト トレランスを示す例はありますか? または、これを実現するための良い方法について何か考えはありますか?
これまでのところ、私が思いついた最善の答えは、Erlang OTP のドキュメントを調べて熟考し、Akka で利用可能なビルディング ブロックを使用してシステムを組み立てる方法を見つけようとすることです。
しかし、リソース、例、または複数のマシン間で状態を共有して、そのうちの 1 つがダウンしても実行を継続する方法に関するアイデアがあれば、それらを高く評価します。ここの車輪。複数のノード間で共有状態を自動的に同期するマルチノード STM コンテナーがあるのではないでしょうか? あるいは、これは非常に簡単に作成できるため、ドキュメントではその方法の例をわざわざ示していないのかもしれません。あるいは、私の研究と実験がまだ十分に徹底されていないのかもしれません。どんな考えやアイデアでも大歓迎です。