私はニッチなゲームのために小さなゲームサーバーホスティングビジネスを運営しており、コストを抑えるために専用サーバーを借りています。各サーバーは多くのゲームサーバーインスタンスを実行しています。ゲームサーバーはいつでも作成および削除できます。ゲームサーバーを作成するときに、どのマシンにインストールするかを決める必要があります。サーバーが作成された後、管理者が望む場合は、サーバーを別のマシンに転送できます。
私はバックエンドの改善に取り組んでいます。私が抱えている主な関心事は、ゲームサーバーをマシンに割り当てることです。私は現在、素朴なアルゴリズムを使用しています。
CPU/RAMの量にほぼ比例して、各マシンに重みを割り当てます。
very各ゲームサーバーで使用されるリソースを大まかに概算するために、各ゲームサーバーでプレイできるプレーヤーの最大数に応じて、各ゲームサーバーに重みを割り当てます。
誰かがゲームサーバーを作成したり、既存のゲームサーバーを別のマシンに転送するように要求したりするたびに、マシンごとに次のように計算します。
(マシン上のゲームサーバーの重量の合計)/(マシンの重量)
そして、結果が最も低いマシンにゲームサーバーを割り当てます。
ここでの私の主な関心事は、各ゲームサーバーの重みの計算です。現在オンラインになっているプレーヤーの数、インストールされているMod、サーバーの設定など、リソースの使用量を決定するさまざまな要因があります。その結果、サーバーのプロパティに基づいて正確な重みを割り当てることはできないと思います。最大プレイヤー数で現在行っていることと比較して、より複雑な式を作成しました。
何らかの形の負荷分散ソフトウェアまたはカスタムビルドのソリューションを使用して、リソース使用量の経験的データに基づいてサーバーを割り当てる方が効率的だと思います。しかし、これを行う方法がわかりません。また、私が検討していないまったく異なるアプローチがある可能性があることも認識しています。ヒントをいただければ幸いです。
固定数の異なるサイズのゲームを取得し、そのノードを何度も複製するノードを標準化できます。ただし、これは、使用パターンが比較的一定である場合にのみ機能します。
使用率に基づいて配置するクラスターソフトウェアが存在します。分離されていないアプリケーションプログラム、コンテナインスタンス、または完全なVMの場合。コンテナなどについては触れていないので、使われていないと思います。オペレーティングシステムプラットフォームについても言及していないので、Linuxを想定してください。
RHELHAのようなペースメーカークラスターを例にとってみましょう。このようなクラスター内のリソースは、 定義されたリソース使用率 を持つことができます。したがって、大小のサーバーには異なるCPUとメモリの要件があり、適切に配置されます。ボーナスとして、ノード障害から回復し、リソースを別のノードに移行できます。マイナスのスライドでは、HAクラスターの構築は難しく、正しいことを行うためのテストが必要です。
デプロイするコンテナがある場合、Kubernetesはそれをクラスタで管理できます。繰り返しますが、これらの機能を取得するにはかなり複雑です。
ベアメタルノードアプローチを再検討し、すべてのサーバーに独自のVMを与えることができます。ハイパーバイザーは、ユーザーまたは一部のクラウドプロバイダーによって実行される可能性があります。いずれの場合も、さまざまなサイズに最適なvCPUとvRAMの数を見つけてください。ノードへの配置は、VMware DRSなどの製品を使用してクラウドで行うか、手動で行います。