MembaseはErlang Gamerサーバーの適切な永続レイヤーですか?
-
27-10-2019 - |
質問
プレイヤーが建物をセットアップできるブラウザゲームを作成することを目指しています。
各建物にはいくつかのモジュール(エンジン、オフィス、生産ラインなど)があります。各モジュールには、成分Y、Zを備えた2oo 'item X'の作成のように、実行中の1つ以上のアクションがあります。
ゲームサーバーは、サーバー自体としてOTPアプリケーション、Webフロントとして窒素を使用してセットアップされます。データの持続性が必要です。私は次のことを考えていました:
誰かまたは何かが建物とやり取り、またはいくつかの生産ラインを表すタイマーが終了すると、スーパーバイザーがデータベースから建物の状態をロードするGEN_SERVER(まだ生成されていない場合)を生成するため、GEN_SERVERは「ADDのようなメッセージに答えることができます。このモジュール '、「このアクションを開始」、「この制作を倉庫に保存する」、「die」など。
しかし、建物がx秒または数分間にメッセージを受け取らない場合、彼は終了し(Gen_Server Timeout機能のおかげで)、現在の状態をデータベースに戻します。
したがって、(ソフト)リアルタイムゲームになるため、Gen_Serverは非常に早くセットアップする必要があります。 Membaseをデータベースとして考えていました。なぜなら、非常に良い応答時間があることが知られているからです。
私の質問は次のとおりです。 GENサーバーが実行されている場合、彼の状態はいくつかのメモリを満たし、この状態はメンバーによって処理されたメモリにも存在するため、状態はメモリでサイズの2倍を使用します。それは悪いデザインですか?
私の場合、メンバーは持続性を処理するための良い解決策ですか? Mnesiaをより良い選択、または何か他のものに使用するでしょうか?
Mnesia 2 Go(または4?)テーブルサイズの制限を恐れています。なぜなら、私のGen_Serversの平均状態サイズ(この例の建物、Butalso Players、Production Linesなど)と私はいつかより多くあるかもしれないので、私は恐れています。 1プレーヤー:)
ありがとうございました
解決
私はhynek -pich -vychodilに同意します。リアックは、キーバリストレージに最適です。
あなたが説明したのと同じことに対して、RIAKをほぼ95%使用します。問題なくこれまでにすべてが機能します。 Riakのパフォーマンス制限に達する場合に備えて、ノードを追加してください。
Riakのもう1つのクールなことは、当時のパフォーマンス低下が非常に低いことです。 Riakのベンチマークに関する詳細については、こちらをご覧ください。 http://joyeur.com/2010/10/31/riak-smartmachine-benchmark-the-technical-details/
あなたがそれで行く場合に備えて:
- ドライバー: https://github.com/basho/riak-erlang-client
- 接続プールで作業する必要がある場合があります。 https://github.com/dweldon/riakpool
MembaseとMemoryの使用について:Membaseも試しましたが、タスクには適していないことがわかりました - (Membaseはフォールトトレランスを宣言しますが、MembaseGuysの助けを借りても、障害で動作する方法でそれをセットアップできませんでした私は成功しませんでした)。したがって、現在、私は次のアーキテクチャを使用しています。オンラインでゲームをプレイするすべてのプレイヤーは、プレイヤープロセス(GEN_SERVER)として提示されます。各プレーヤーのすべてのデータデータとビジネスロジックは、プレイヤープロセスにあります。各プレイヤープロセスは、リアックでその状態を救うために時々。
これまでのところ、非常に速く効率的なアプローチのようです。
更新:PostgreSQLを使用しています。すばらしい!