# MatchMaker モジュール

## 概要

Diarkis MatchMaker は、オンラインマルチプレイヤーゲームのユーザーのマッチメイキングを幅広くカバーします。Diarkis MatchMaker のデザインは非常にユニークです。中央集権的なデータストレージを持つのではなく、Diarkis サーバー・クラスター内の複数のサーバを共有ストレージとして使用します。

Diarkis MatchMaker は**高速**で、**堅牢**かつ**スケーラブル**です。

Diarkis MatchMaker の分散型デザインにより、**フォールトトレラント**（障害耐性）と**スケーラブル**（拡張可能）な特性を持っています。

Diarkis MatchMaker の詳細およびドキュメントについては、[こちらのサーバー API ドキュメント](https://docs.diarkis.io/docs/server/current/diarkis/matching/index.html#hdr-Matchmaking_Rule_Examples)をご覧ください。

## 従来のマッチメイキング方法

ここでは、従来の一般的なマッチメイキングの実装方法と、Diarkis MatchMaker によるマッチメイキングの実装方法を比較します。

### データベース方式

<figure><img src="https://669307705-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlFJ89PMX2ike3NyauXNM%2Fuploads%2Fgit-blob-2e4edec2f9ef11f18ef456340416714875d50203%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

データベース方式では、マッチメイキング・データを保存し、データベースのクエリを使用してマッチを作成します。

#### データベース方式の特徴

* スケールの限界はデータベースのパフォーマンスの限界です。
* マッチメイキング・プロセスの速度は、固定間隔で実行されるバックグラウンド・プロセスの間隔に大きく依存します。
* 異なるデータベースにいるユーザーは**マッチングされません**。

### インメモリ方式

<figure><img src="https://669307705-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlFJ89PMX2ike3NyauXNM%2Fuploads%2Fgit-blob-557041a1a50f5c11cff0e71626a8bbabdd12382f%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

インメモリ方式では、フロント・サーバー（ユーザーと直接通信するサーバー）を使用してマッチメイキング・データを保存し、マッチメイキング操作を実行します。

#### インメモリ方式の特徴

* スケールの限界は、マッチメイキングのストレージと実行者としても機能するフロント・サーバーの限界です。
* 異なるフロント・サーバーにいるユーザーは**マッチングされません**。

## Diarkis のマッチメイキング方式

<figure><img src="https://669307705-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlFJ89PMX2ike3NyauXNM%2Fuploads%2Fgit-blob-cce5c9c4ab997201cb41054f03741571e301ddb4%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

従来のマッチメイキング方法と比較して、Diarkis MatchMaker は**無制限にスケーリング**が可能です。

データはクラスター内のすべてのサーバーに共有されるメモリに保存されているため（冗長性を含む）、マッチメイキング操作は非常に高速に行われ、クラスター内の各サーバーは複数の操作を並行して実行することができます。これにより、**非常に高速**な**マッチメイキング**と**堅牢な耐障害性**（単一障害点がないため）が実現します。

### Diarkis MatchMaker の特徴

* スケーリングに制限がありません。サーバー・ノードを追加または削除するだけで、マッチメイキングのスケールイン/スケールアウトが可能です。
* すべてのユーザーは、異なるサーバーにいてもマッチングが可能です。これは、Diarkis クラスタ内のすべてのサーバーがマッチメイキング・データを共有しているためです。
* Diarkis MatchMaker は、要求に応じて複数のマッチメイキング操作を並行して実行できるため（バックグラウンド操作はありません）、マッチメイキング結果が非常に速く（秒単位、さらにはミリ秒単位で）得られます。
* Diarkis MatchMaker には単一障害点がないため、サーバー障害がマッチメイキング全体に影響を与えることはありません。

## マッチメイキング中の通信

Diarkis MatchMaker は、マッチングされたユーザーが自由に通信できるユニークな機能を備えています。これは、ゲームにロビー機能を組み込むのに最適です。

例えば、ユーザーが他のユーザーとマッチングを待っている間に装備やコスチュームを変更するシナリオを考えてみましょう。Diarkis MatchMaker は、ユーザーがそのような変更をリアルタイムで同期し、メッセージをやり取りすることを可能にします。

## バックフィルマッチメイキング

Diarkis MatchMaker はバックフィルをサポートしています。マルチプレイヤー・ゲーム・セッションを開始する際に、他のユーザーがプレイしている間に追加のユーザーをゲーム・セッションに参加させる必要があるシナリオを考えてみましょう。ここでバックフィルが役立ちます。バックフィルは、すでにマッチングされたユーザーがプレイしている間に、他のユーザーがマッチングしてゲーム・セッションに参加できるように「扉を開けておく」ことを可能にします。

## チームマッチメイキング

Diarkis MatchMaker は、複数のマッチメイキングを並行して実行することができます。これにより、Diarkis MatchMaker を通じてチームを編成し、対戦相手のチームを見つけることができます。

<figure><img src="https://669307705-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlFJ89PMX2ike3NyauXNM%2Fuploads%2Fgit-blob-662ab931198979ed636f60ff0b0594357c0383fa%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>
