マイグレーション
概要
本ページでは Diarkis サーバーにおけるマイグレーションの挙動について説明します。
マイグレーションとは
Diarkis サーバーはクラスタ構成されており、ユーザーはその中のどれか1つのサーバーに接続しています。 接続している Diarkis サーバーがスケールインしてユーザーが接続しているサーバーが停止するケースを考えます。 サーバーが停止するため一般的なサーバーであればその時接続しているユーザーは切断されることとなります。 しかし、Diarkis サーバーはクラスタ内の他のサーバーへ移動し、サーバーから切断されることなくサービスを継続することができます。 この、接続中のサーバーから別のサーバーへ接続しなおしてサービスを維持する仕組みをマイグレーションと呼びます。
わかりやすい例としてスケールインを用いて説明しましたが、スケールイン時以外にも様々な要因でマイグレーションが発生する可能性があります。 マイグレーション発生時はサーバーとクライアント・アプリケーションが協調してマイグレーションのプロセスを進める必要があります。次項からはマイグレーション発生時の具体的な処理について説明します。
Room に参加している場合は、下記の機能は使用せず Room 専用のマイグレーション をご確認ください。
マイグレーション・プロセス全体の流れ
マイグレーションはサーバーからの通知によって始まります。
様々な要因によりサーバーがマイグレーションが必要と判断すると、サーバーはクライアントへマイグレーションが必要なことを通知し、クライアントでは DiarkisTcpBase::OnOffline
/DiarkisUdpBase::OnOffline()
が発火します。このイベントによってマイグレーションが必要なことを認識したクライアントは DiarkisTcpBase::SendMigrate()
/DiarkisUdpBase::SendMigrate()
を実行することでサーバーへマイグレートの開始を要求します。 サーバーはマイグレート要求を受け取ると要求したクライアントを切断し、サーバー上のユーザーのデータを新たな接続先のサーバーへ移動し、その後クライアントは新たなサーバーへ再接続します。
これらの一連のプロセスがマイグレーション時に行われます。
マイグレーション時のクライアントの対応
前項で説明したように、クライアント側では DiarkisTcpBase::OnOffline
/DiarkisUdpBase::OnOffline()
を受け取った後、DiarkisTcpBase::SendMigrate()
/DiarkisUdpBase::SendMigrate()
を実行してマイグレーション・プロセスを進める必要があります。
SDK 付属のサンプルでは以下のように OnOfflien()
発火後、すぐに SendMigrate()
を呼ぶように実装されています。
なお、DiarkisTcpBase::SendMigrate()
/DiarkisUdpBase::SendMigrate()
を実行して再接続処理が開始するとサーバーとの接続が一度切断されるため一時的に通信できなくなります。 切断が発生するタイミングは DiarkisTcpBase::SendMigrate()
/DiarkisUdpBase::SendMigrate()
を実行するタイミングでコントロールすることができますので、アプリケーションの都合に合わせて調整してください。
最終更新