アーキテクチャ

Storia の仕組み

Storia は、連携して動く 4 つのソフトでできています。必須なのはサーバーだけで、ほかのソフトはネットワーク化や、地形生成のための CPU の追加、またはその両方のために使います。このページでは、それぞれの役割、動かす場所、やり取りする内容を説明します。

Storia のネットワーク全体の構成図 プレイヤーは、ポート 25565 で Storia Proxy に接続します。 Storia Proxy は、modern フォワーディングを使って、各プレイヤーを Storia サーバー(たとえばロビーとサバイバル)のどれかに送ります。 Storia サーバーは、地形生成の仕事を暗号化して、ポート 25590 で Storia Relay に送ります。 Storia Relay は仕事を Storia Worker のどれかに渡し、ワーカーは同じ経路で地形を返します。 ネットワーク ゲームサーバー 地形のお手伝い プレイヤー MC Storia Proxy:25565 modern フォワーディング Storia · ロビーFolia Storia · サバイバルFolia AES-GCM Storia Relay:25590 ワーカー A地形ノイズワーカー B地形ノイズワーカー C地形ノイズ
  1. プレイヤーは、ポート 25565 で Storia Proxy に接続します。
  2. Storia Proxy は、modern フォワーディングを使って、各プレイヤーを Storia サーバー(たとえばロビーとサバイバル)のどれかに送ります。
  3. Storia サーバーは、地形生成の仕事を暗号化して、ポート 25590 で Storia Relay に送ります。
  4. Storia Relay は仕事を Storia Worker のどれかに渡し、ワーカーは同じ経路で地形を返します。

4 つのソフト

ソフトごとに役割は 1 つです。組み合わせると、1 か所の重さが全員の足を引っ張らないネットワークになります。

Storia

ゲームサーバー

すること
ワールドを動かします。プレイヤー、モブ、回路、トラップ、チャンクのすべてです。Folia ベースなので、ワールドの場所ごとに別々の CPU コアで処理します。
しないこと
ほかの 3 つは必要ありません。単体で完全な Minecraft サーバーです。
動かす場所
メインのマシン(プロキシを使うなら、ゲームモードごとに 1 台ずつ)。
必要なもの
Java 25。RAM ワールドのためのワールド分の RAM と、ヒープ。
ポート
プレイヤー用の 25565(プロキシの裏に置くなら非公開のポート)。
設定ファイル
storia.yml と、いつもの Paper・Folia の設定ファイル。
ドキュメントを読む

Storia Proxy

玄関

すること
すべてのプレイヤーを 1 つのアドレスで受け付け、適切なサーバーに送ります。サーバーリストの MOTD、自動更新のタブリスト、ネットワーク全体の参加・移動メッセージを、50 個のプレースホルダーで表示します。
しないこと
ワールドは動かさないので、CPU はほとんど使いません。プラグインは Velocity 用のものです。
動かす場所
小さなマシンで十分。サーバーと同じマシンに置くことも多いです。
必要なもの
Java 21 以上、RAM 512 MB ほど。
ポート
プレイヤー用の 25565。
設定ファイル
velocity.toml、storia-proxy.toml。
ドキュメントを読む

Storia Worker

地形生成のための追加の CPU

すること
地形生成で一番重い処理(土地の形・洞窟・帯水層)を Storia サーバーの代わりに計算し、結果を返します。
しないこと
プレイヤー用ポートは開かず、ワールドを保存・変更することもなく、プレイヤー・チャット・インベントリを見ることもありません。
動かす場所
空いているマシンならどこでも。古い PC、2 台目のサーバー、クラウドの VM など。
必要なもの
Java 25、チャンクを除いたワールドフォルダのコピー(level.dat・データパック・data)。
ポート
待ち受けるなら 25590。リレーに自分から接続するなら不要。
設定ファイル
storia.yml(offload.mode: worker)。
ドキュメントを読む

Storia Relay

仕事の配り役

すること
サーバーとワーカーの間に入り、地形生成の仕事を、地形が完全に一致するワーカーのうち一番空いているものに渡します。ワーカーはいつでも追加・削除できます。
しないこと
自分では地形を計算せず、Minecraft のファイルも不要です。
動かす場所
サーバーとワーカーの両方から届くマシン 1 台。プロキシと同じマシンでも構いません。
必要なもの
Java 21 以上、RAM 256 MB ほど。
ポート
サーバーとワーカー用の 25590。
設定ファイル
relay.properties。
ドキュメントを読む

新しいチャンクができるまで

リレーとワーカーを使っている場合に、プレイヤーが一度も生成されていない場所へ歩いていくと何が起きるか。

  1. Storia サーバー

    プレイヤーが生成済みの範囲の端に着き、サーバーは新しいチャンクが必要になります。

  2. Storia サーバー

    サーバーが構造物の開始点とバイオームを決めます。これはワールド全体に関わるので、サーバーに残ります。

  3. Storia サーバー

    ノイズの段階のために、空きのある接続を選んで依頼を送ります。中身はチャンクの位置、ディメンション、近くの構造物の外形です。

  4. Storia Relay

    リレーは、このディメンションの確認用チャンクが完全に一致したワーカーのうち、一番空いているものに依頼を渡します。

  5. Storia Worker

    ワーカーが地形の形・洞窟・帯水層を計算し、ブロックと高さマップを返します。

  6. Storia サーバー

    サーバーが返事を検証してから反映します。時間内に返事が来なければ、代わりに自分で生成します。

  7. Storia サーバー

    サーバーが地表、洞窟、木、鉱石、光を加え、できあがったチャンクをプレイヤーに送ります。

プレイヤーが遊ぶまで

  1. サーバーリスト

    プレイヤーのクライアントがプロキシのアドレスに ping します。Storia Proxy は、storia-proxy.toml の MOTD に {online} などのプレースホルダーを埋めて返します。

  2. ログイン

    プロキシが Mojang でプレイヤーを認証し、try リストの最初のサーバーにつなぎます。

  3. フォワーディング

    modern フォワーディングが、プレイヤーの UUID とスキンを、フォワーディング用の秘密鍵で署名して Storia サーバーに渡します。サーバーはこれを信頼できます。

  4. プレイ中

    タブリストは毎秒、プレイヤーとネットワークのプレースホルダーで更新されます。参加・退出・移動のメッセージは全員に届きます。

  5. サーバーの移動

    プレイヤーが別のサーバーへ移るときは、プロキシが接続を保ったまま移します。サーバーが予期せず止まったときは、そのサーバーのプレイヤーを別のサーバーへ移します。

それぞれの接続で流れるもの

接続流れるもの保護
プレイヤー ↔ Storia ProxyMinecraft のプロトコル。移動、チャット、チャンクなど、ゲームに必要なものすべて。Minecraft 自体の暗号化(オンラインモード)。
Storia Proxy ↔ Storia サーバー同じ Minecraft の通信と、引き継いだプレイヤーの身元。フォワーディング用の秘密鍵で署名。サーバーはインターネットに直接公開しないでください。
Storia サーバー ↔ Relay・Worker行きはチャンクの位置、ディメンション、近くの構造物の外形。帰りは地形のブロックと高さマップ。プレイヤー、チャット、インベントリは一切流れません。合言葉から作った鍵で AES-256-GCM。合言葉そのものは送られません。
Relay ↔ Worker同じ地形の依頼と返事を中継します。同じ暗号化で、接続ごとに別の鍵。

どれかが止まったら

止まったもの起きること
ワーカー処理中の依頼は別のワーカーに回るか、サーバーに戻され、サーバーが自分で生成します。そのチャンクの生成が少し遅れる程度です。
リレーサーバーはすべての地形を自分で生成し、リレーが戻ると自動で接続し直します。
Storia サーバープロキシが、そのサーバーのプレイヤーを try リストの別のサーバーへ移します。ほかのサーバーは動き続けます。
プロキシ戻るまで、プロキシ経由では参加できません。サーバーとワールドは動き続け、何も失われません。
サーバーを動かしているマシンRAM ワールドでは、最後の同期(初期設定で 5 分ごと)以降の変更が失われます。サーバーのプロセスだけが落ちた場合は、次の起動時に RAM 上のコピーから復旧します。

よくある 4 つの構成

まずは 1 つ目から始めて、サーバーが大きくなったらソフトを足していけます。入れ直す必要はありません。

1

サーバー 1 台

ほとんどのサーバーはこれで十分。すべて 1 台のマシンで動きます。

プレイヤーStoria

Storia のみ

2

ネットワーク

複数のゲームモードを 1 つのアドレスで。タブリストやメッセージも共通になります。

プレイヤーProxyStoria ×2

Storia Proxy + Storia

3

お手伝い付きのサーバー

探索や事前生成が多いサーバーに、空いているマシンを 1〜2 台足します。

プレイヤーStoriaWorker ×2

Storia + Storia Worker

4

フルネットワーク

多くのサーバーで、出入り自由なワーカーを共有します。

プレイヤーProxyStoria ×3RelayWorker ×N

4 つすべて

必要なものの一覧

ソフトJavaメモリポート必要なファイル
Storia25ヒープ + RAM 上のワールド25565ワールド
Storia Proxy21 以上512 MB ほど25565なし
Storia Worker252〜4 GB25590(リレーを使うなら不要)region・entities・poi を除いたワールドフォルダ
Storia Relay21 以上256 MB ほど25590なし

ポートはすべて変更できます。4 つのソフトは、毎回のリリースにそろってダウンロードページに入っています。

4 つともダウンロード