LogoLogo
日本語
日本語
  • Diarkis ヘルプセンター
  • Diarkis の概要
  • 始めよう
    • Diarkis サーバーテンプレート
    • Diarkis クライアント SDK
    • チュートリアル
      • 1. Diarkis サーバーをローカル環境で起動する
      • 2. テストクライアントで疎通確認する
      • 3. カスタムコマンドを実装する
      • Diarkis クライアントからサーバに接続する
    • サンプル
  • Diarkis のモジュール
    • Room モジュール
      • Room モジュールをサーバーでセットアップする
      • Room サンプル
        • room_broadcast
      • Room モジュールをクライアントから利用する
      • Room のその他の機能
    • MatchMaker モジュール
      • MatchMaker モジュールをサーバーでセットアップする
    • Field モジュール
      • Field モジュールをサーバーでセットアップする
    • P2P モジュール
      • P2P モジュールをサーバーでセットアップする
      • P2P サンプル
    • DM (Direct Message) モジュール
      • DM モジュールをサーバーでセットアップする
    • Notifier モジュール
      • Notifier モジュールをサーバーでセットアップする
    • Session モジュール
      • Session モジュールをサーバーでセットアップする
    • Group モジュール
      • Group モジュールをサーバーでセットアップする
  • Diarkis サーバー
    • Diarkis サーバをクラウド環境で起動する
      • AWS
    • Diarkis サーバーを Windows 環境で起動する
    • MARS サーバー
    • UDP サーバー
    • TCP サーバー
    • HTTP サーバー
    • Metrics API
    • サーバー間通信 - Mesh
  • Diarkis クライアント
    • ランタイム・ライブラリ
      • Diarkis RUDP
    • Diarkis Module
      • Diarkis Module の初期化と終了
      • Diarkis Module のカスタイマイズ
      • Diarkis Module のロギング・システム
      • マイグレーション
      • Diarkis のスレッド
    • サンプル
      • C++
        • room_broadcast
        • directmessage_simple
        • group_sample
        • matching_and_turn
        • matchmaker_ticker
        • p2p_rudp_sample
        • session_simple
      • Unreal Engine Plugin
        • FieldWalker
      • Unity Plugin
        • FieldWalker
          • HowToReplicatePosition.md
  • Diarkis ツール
    • Diarkis CLI
      • cgo を利用するプロジェクトをビルドする方法
      • Diarkis CLI v3 への切り替え手順
  • リファレンス
    • API リファレンス
    • リリースノート
      • v1.0
      • v1.0.1
      • v1.0.2
      • v1.0.3
      • v1.0.4
      • v1.0.5
      • v1.0.6
  • サポート
    • ライセンスと購入
GitBook提供
このページ内
  • 概要
  • マイグレーションとは
  • マイグレーション・プロセス全体の流れ
  • マイグレーション時のクライアントの対応

役に立ちましたか?

  1. Diarkis クライアント
  2. Diarkis Module

マイグレーション

前へDiarkis Module のロギング・システム次へDiarkis のスレッド

最終更新 9 か月前

役に立ちましたか?

概要

本ページでは Diarkis サーバーにおけるマイグレーションの挙動について説明します。

マイグレーションとは

Diarkis サーバーはクラスタ構成されており、ユーザーはその中のどれか1つのサーバーに接続しています。 接続している Diarkis サーバーがスケールインしてユーザーが接続しているサーバーが停止するケースを考えます。 サーバーが停止するため一般的なサーバーであればその時接続しているユーザーは切断されることとなります。 しかし、Diarkis サーバーはクラスタ内の他のサーバーへ移動し、サーバーから切断されることなくサービスを継続することができます。 この、接続中のサーバーから別のサーバーへ接続しなおしてサービスを維持する仕組みをマイグレーションと呼びます。

わかりやすい例としてスケールインを用いて説明しましたが、スケールイン時以外にも様々な要因でマイグレーションが発生する可能性があります。 マイグレーション発生時はサーバーとクライアント・アプリケーションが協調してマイグレーションのプロセスを進める必要があります。次項からはマイグレーション発生時の具体的な処理について説明します。

Room に参加している場合は、下記の機能は使用せず をご確認ください。

マイグレーション・プロセス全体の流れ

マイグレーションはサーバーからの通知によって始まります。 様々な要因によりサーバーがマイグレーションが必要と判断すると、サーバーはクライアントへマイグレーションが必要なことを通知し、クライアントでは DiarkisTcpBase::OnOffline/DiarkisUdpBase::OnOffline() が発火します。このイベントによってマイグレーションが必要なことを認識したクライアントは DiarkisTcpBase::SendMigrate()/DiarkisUdpBase::SendMigrate() を実行することでサーバーへマイグレートの開始を要求します。 サーバーはマイグレート要求を受け取ると要求したクライアントを切断し、サーバー上のユーザーのデータを新たな接続先のサーバーへ移動し、その後クライアントは新たなサーバーへ再接続します。 これらの一連のプロセスがマイグレーション時に行われます。

マイグレーション時のクライアントの対応

前項で説明したように、クライアント側では DiarkisTcpBase::OnOffline/DiarkisUdpBase::OnOffline() を受け取った後、DiarkisTcpBase::SendMigrate()/DiarkisUdpBase::SendMigrate() を実行してマイグレーション・プロセスを進める必要があります。

SDK 付属のサンプルでは以下のように OnOfflien() 発火後、すぐに SendMigrate() を呼ぶように実装されています。

void DiarkisTcp::OnOffline()
{
    DiarkisTcpBase::OnOffline();

    // サーバのスケールインにより、接続しているサーバが offline になります。
    // アプリ側の実装に合わせて、適したタイミングで SendMigrate を呼び出して サーバの移動を行ってください。
    this->SendMigrate();
}
void DiarkisUdp::OnOffline()
{
    DiarkisUdpBase::OnOffline();

    // サーバのスケールインにより、接続しているサーバが offline になります。
    // アプリ側の実装に合わせて、適したタイミングで SendMigrate を呼び出して サーバの移動を行ってください。
    this->SendMigrate();
}

なお、DiarkisTcpBase::SendMigrate()/DiarkisUdpBase::SendMigrate() を実行して再接続処理が開始するとサーバーとの接続が一度切断されるため一時的に通信できなくなります。 切断が発生するタイミングは DiarkisTcpBase::SendMigrate()/DiarkisUdpBase::SendMigrate() を実行するタイミングでコントロールすることができますので、アプリケーションの都合に合わせて調整してください。

Room 専用のマイグレーション