Open2

NATS の jitter について

nukopynukopy

NATS の接続時のオプション一覧

https://deno.land/x/nats@v1.28.0#connection-options

再接続時の jitter について

https://deno.land/x/nats@v1.28.0#jitter

jitter とは意図的に導入されるランダムな遅延のこと。

主な目的は、多数のクライアントが同時に特定のアクションを実行することにより起きる問題を防ぐこと。NATS の設定の文脈では、NATS との接続が切れたときに多数のクライアントが同時に NATS へ再接続しようとすることでサーバに負荷がかかる問題を防ぐこと。

NATS では jitter の仕組みが実装されており、クライアントの接続が切れたとき、クライアントごとに少しずつ異なる再接続タイミングが生成され、サーバーへの再接続要求が時間的に分散される。これにより、ネットワーク障害からの復旧時や大規模なシステムで多数のクライアントが存在するときにサーバへの突発的な負荷が軽減できる。

jitter に関係あるオプション

  • reconnectTimeWait
  • reconnectJitter
  • reconnectJitterTLS
  • reconnectDelayHandler

jitter の動作

  • reconnectDelayHandlerが指定されている場合:
    • この関数が返す値が待機時間として使用される。他の設定は無視される。
  • TLSオプションが指定されている場合:
    • 実際の待機時間 = reconnectTimeWait + random(0, reconnectJitterTLS)
  • TLSオプションが指定されていない場合:
    • 実際の待機時間 = reconnectTimeWait + random(0, reconnectJitter)
nukopynukopy

/**
 * NATS 接続時のオプション
 * ref: https://deno.land/x/nats@v1.28.0#connection-options
 */

export interface NatsConnectionOptions {
  // 1. 基本的な接続オプション
  servers?: string | string[];
  name?: string;
  pedantic?: boolean;

  // 2. TLS / セキュア接続
  tls?: {
    certFile?: string;
    keyFile?: string;
    caFile?: string;
    rejectUnauthorized?: boolean;
  };

  // 3. 認証
  user?: string;
  pass?: string;
  token?: string;

  // 4. 接続ハンドリング
  reconnect?: boolean;
  maxReconnectAttempts?: number;
  reconnectTimeWait?: number;
  noRandomize?: boolean;
  timeout?: number;
  pingInterval?: number;
  maxPingOut?: number;
  reconnectJitter?: number;
  reconnectJitterTLS?: number;
  reconnectDelayHandler?: (attempts: number) => number;

  // 5. プロトコルハンドリング
  noEcho?: boolean;
  ignoreClusterUpdates?: boolean;
  inboxPrefix?: string;

  // 6. パフォーマンスと制限
  maxPubAcksInflight?: number;
  waitOnFirstConnect?: boolean;

  // 7. エラーハンドリング
  yieldTime?: number;

  // 8. エンコーディング
  preserveBuffers?: boolean;

  // 9. ドレインモード
  drain?: boolean;
  drainTimeout?: number;

  // 10. モニタリングとデバッグ
  verbose?: boolean;
  logtime?: boolean;

  /**
   * note: 再接続時の jitter について
   * ref: https://deno.land/x/nats@v1.28.0#jitter
   *
   * jitter とは意図的に導入されるランダムな遅延のこと。
   * 主な目的は、多数のクライアントが同時に特定のアクションを実行することにより起きる問題を防ぐこと。
   * NATS の設定の文脈では、NATS との接続が切れたときに多数のクライアントが同時に NATS へ再接続しようとすることでサーバに負荷がかかる問題を防ぐこと。
   *
   * NATS では jitter の仕組みが実装されており、クライアントごとに少しずつ異なる再接続タイミングが生成され、サーバーへの接続要求が時間的に分散される。
   * サーバへの突発的な負荷が軽減できる。
   *
   * jitter に関係あるオプション:
   * - reconnectTimeWait
   * - reconnectJitter
   * - reconnectJitterTLS
   * - reconnectDelayHandler
   *
   * 動作
   * - reconnectDelayHandlerが指定されている場合:
   *   - この関数が返す値が待機時間として使用される。他の設定は無視される。
   * - TLSオプションが指定されている場合:
   *   - 実際の待機時間 = reconnectTimeWait + random(0, reconnectJitterTLS)
   * - TLSオプションが指定されていない場合:
   *   - 実際の待機時間 = reconnectTimeWait + random(0, reconnectJitter)
   */
}