マルチノードクラスタリング (TsgcWSCluster) — sgcWebSockets | eSeGeCe

マルチノードクラスタリング

TsgcWSCluster — sgcWebSockets サーバーを複数のノードにスケールします。いずれかのノードでの publish や Presence イベントは、ゼロインフラのメッシュバックプレーンまたは Redis Pub/Sub バックプレーンを通じて、他のすべてのノードに接続されているサブスクライバーに届きます。既存の Publish、チャネル、Presence のコードはそのまま変更不要です。

TsgcWSCluster

2 台以上の WebSocket サーバーをロードバランサーの背後に配置しても、あるノードで publish されたメッセージは他のノードに接続されているサブスクライバーに届きます。コンポーネントをサーバーの隣に配置し、各ノードを相互に指定するだけで、チャネル、ブロードキャスト、Presence がクラスター全体で機能します。

コンポーネントクラス

TsgcWSCluster

バックプレーン

メッシュ(ゼロインフラ)または Redis Pub/Sub

プラットフォーム

Delphi 7–13 (Win32/Win64、Linux64、macOS、Android、iOS) および .NET

エディション

Enterprise

コンポーネントを配置し、各ノードを相互に指定して実行する

sgc プロトコルをクラスターにアタッチして開始します。あるノードのクライアントがチャネルに Publish すると、他のノードのクライアントがそれを受信します。スティッキーセッションは不要です。

uses
  sgcWebSocket, sgcWebSocket_Protocols, sgcWebSocket_Cluster;

var
  Server: TsgcWebSocketServer;
  Protocol: TsgcWSPServer_sgc;
  Cluster: TsgcWSCluster;
begin
  Server := TsgcWebSocketServer.Create(nil);
  Server.Port := 8080;

  Protocol := TsgcWSPServer_sgc.Create(nil);
  Protocol.Server := Server;

  Cluster := TsgcWSCluster.Create(nil);
  Cluster.EngineType  := clusterMesh;                // ゼロインフラのバックプレーン
  Cluster.ClusterPort := 5410;                       // このノードのメッシュリスナー
  Cluster.Peers.Add('192.168.1.101:5410');          // 他のノード
  Cluster.Peers.Add('192.168.1.102:5410');
  Cluster.Attach(Protocol);                          // このプロトコルの pub/sub をクラスター化
  Cluster.Start;

  Server.Active := True;
end;
var server = new TsgcWSServer { Port = 8080 };
var protocol = new TsgcWSPServer_sgc { Server = server };

var cluster = new TsgcWSCluster {
    EngineType  = ClusterEngineType.Mesh,   // ゼロインフラのバックプレーン
    ClusterPort = 5414,
    Protocol    = protocol
};
cluster.Peers.Add("192.168.1.101:5414");
cluster.Peers.Add("192.168.1.102:5414");
cluster.Start();

server.Active = true;

主な機能

2 つのバックプレーンエンジン、ドロップイン可能な Attach、クラスター全体の Presence(コンポーネントリファレンスより)。

バックプレーンエンジン

公開プロパティ EngineType: clusterMesh(外部インフラ不要)または clusterRedis(Redis Pub/Sub)。

メッシュ

プロパティ: ClusterPortPeers。各ノードがリッスンし、ピアに直接接続します。追加のインストールは不要です。

Redis

プロパティ: 大規模なデプロイ向けの RedisHostRedisPortRedisChannel

Attach

メソッド: AttachDetachStartStopsgc プロトコルと Presence をそれぞれ 1 回の呼び出しでクラスター化します。

クラスター全体の Presence

メンバー一覧はすべてのノードにわたる和集合になります。切断されたノードのメンバーは消去されるため、ゴーストメンバーは残りません。

ヘルス

プロパティ ReadyConnectedPeerCount、およびイベント OnPeerConnectedOnPeerDisconnectedOnClusterMessage

仕様と参考資料

このコンポーネントが基盤とするバックプレーンの一次資料です。

ドキュメントとデモ

コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、そして体験版のダウンロードはこちらです。

デモプロジェクト — 02.WebSocket_Protocols\14.MultiNode_Clustering すぐに実行可能な 2 ノードのサンプルです。sgcWebSockets パッケージに同梱されています。下記より体験版をダウンロードしてください。
技術ドキュメント (PDF) 本コンポーネントのみを対象とした機能解説、クイックスタート、Delphi および C++ Builder のコードサンプル、一次資料への参照を収録しています。
ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した総合マニュアルです。

WebSocket サーバーを複数ノードにスケールする

体験版をダウンロードして、メッシュまたは Redis バックプレーンで sgcWebSockets のデプロイをクラスター化しましょう。