Diarkis の概要
Diarkis とモジュール
Diarkis はオンライン・マルチプレイヤー・ゲームなどのためのサーバーとクライアントのネットワーク・ミドルウェアです。
本ミドルウェアには、サーバー側とクライアント側の両方の SDK が付属しています。(サーバー側:Go、クライアント側:C++ および C#)
クライアント側には Unreal Engine のプラグインと Unity Engine の SDK も用意されています。
サポートする OS
Linux
Windows
MacOS
iOS
Android
サポートする Platform:
PS4, PS5
Xbox One, Xbox Series X, Xbox Series S
Nintendo Switch
Steam
サーバー・アーキテクチャの理念
Diarkis のサーバー設計は、サーバーの非集中化と分散化に重点を置いています。
Diarkis サーバーは、単一のサーバーのように動作するサーバークラスタを形成するように設計されています。サーバーは100% Golang で書かれています。
この設計により、サーバー・クラスターは耐障害性(クラスター内の一部のサーバーに障害が発生しても、クラスタ内の残りのサーバーは全く影響を受けず、ゲーム・クライアントは単純に継続するために再接続する必要がある)と水平方向にスケーラブル(ユーザーのトラフィック量に応じて、単純にスケールイン/スケールアウトするために追加または削除)であることができます。
以下の図は、Diarkis サーバー・クラスターがどのように構成されているかを示しています。
Pod はサーバーです。
Diarkis クライアントを持つすべてのユーザー・クライアントは、UDP または TCP Pod と直接通信します。
Diarkis は、TCP および UDP ネットワーク・プロトコルの両方をサポートしています。
UDP の場合、Diarkis は再送、パケット順序制御、MTU 超過能力を備えた独自の RUDP を実装しています。
従来のアーキテクチャとの比較
Diarkis を使用せずに、同様のネットワーク・サーバー・システムを実装する方法は多数あります。
ここでは、そのようなシステムの最も一般的な方法の一つを取り上げ、Diarkis と比較します。
サーバーの維持管理 - 従来の方法
従来の方法では、リアルタイム・サーバーの追加や削除など、サーバーに対する変更はすべて手動でのメンテナンスと変更が必要です。これにより、人為的なエラーやその他の潜在的な問題が発生する可能性があります。
一方、Diarkis は手動メンテナンスを全く必要としません。すべてが自動的に処理されます。
システム全体の耐障害性
従来の方法で解決するのが非常に難しい問題が一つあります。それは、システム全体の単一障害点です。
システム全体を管理するために中央制御が必要です。この場合は、データベースになります。
Diarkis のサーバー・クラスターは完全に分散化されており、中央制御システムが存在しないため、Diarkis サーバーのクラスター全体を管理する中央制御システムがありません。これにより、システム全体の単一障害点の問題が効果的に解消されます。
クライアントからサーバーへの通信
Diarkis は、主にリモート・クライアントとのサーバー・リレー同期を使用します。
つまり、Diarkis サーバーはクライアントがデータを交換するためのハブとして機能します。
クライアントとサーバーの通信
Diarkis は主にリモート・クライアントとのサーバー・リレー同期を使用します。
これは、Diarkis サーバーがクライアント間のデータ交換のハブとして機能することを意味します。
Diarkis が提供するもう一つの同期方法は peer-to-peer (P2P) 通信です。
クライアントはデータを peer-to-peer で直接送受信します。サーバー・リレーのようにクライアント間にサーバーは存在しません。Diarkis はクライアントが直接通信するためのディスカバリーポイントとして機能します。
peer-to-peer 通信には 2 つのステップが必要です。まず、クライアントは自分のアドレスを交換し、ホールパンチングを行います。ホールパンチングが成功すると、クライアントはパケットを直接送受信することができます。
Diarkis クライアント SDK
Diarkis クライアントは C++ で書かれています。また、 C# インターフェースもあります。クライアント SDK には Unreal Engine プラグインと Unity Engine プラグインが付属しています。
Diarkis モジュール
Diarkis にはゲーム開発者が使用できる組み込みモジュールがあります。
最終更新