付録 C. 重複検出
付録 C. 重複検出
第 9.4 節で述べるとおり、課金レコードの重複検出はセッション識別子に基づきます。重複はさまざまな理由で現れます。
-
代替サーバーへのフェイルオーバ。ほぼリアルタイムの性能が求められる場合、フェイルオーバ閾値は低く保つ必要があり、重複の可能性が高まります。フェイルオーバはクライアント側でも、Diameter エージェント内でも起こり得ます。
-
クライアントまたはエージェントが、非揮発メモリからレコードを送信した後、応用層 ACK の受信と送信対象レコードの削除の前に故障した場合。クライアントまたはエージェントの再起動直後にレコードが再送されます。
-
RADIUS ゲートウェイから受信した重複。RADIUS の再送動作は [RFC2865] 内で定義されていないため、重複の起こりやすさは実装により異なります。
-
実装上の問題と誤設定。
T フラグは、代替サーバーへのフェイルオーバなどに起因する応用層での再送イベントの指標として用いられます。Diameter クライアントまたはエージェントが送信する要求メッセージにのみ定義されます。例えば再起動後、クライアントは再起動前に非揮発メモリ内の課金レコードの送信を試みたかどうか分からない場合があります。Diameter サーバーは、要求の処理と重複メッセージの検出の補助として T フラグを使用しても構いません(MAY)。ただし、そうするサーバーは、最初に送信された要求が再送された要求より後にサーバーに到着した場合でも重複を見つけられるようにしなければなりません(MUST)。これは、サーバーから応答を受け取れず要求が再送される場合にのみ使用できます(例:代替ピアへのフェイルオーバ、プライマリピアの復旧、クライアントまたはエージェントの再起動後に非揮発メモリから保存済みレコードを再送する場合など)。
場合によっては、Diameter 課金サーバーは重複検出と課金レコード処理を後処理フェーズまで遅延できます。その時点ではレコードは含まれる User-Name でソートされやすく、この場合の重複排除は容易です。他方、与信限度の適用やリアルタイム不正検知など、リアルタイムの重複検出が必要な状況もあります。
一般に、フェイルオーバまたは非揮発ストレージ内レコードの再送に起因する重複の発生だけが、Diameter クライアントまたはエージェントによって確実に検出できます。そのような場合、クライアントまたはエージェントは T フラグを設定してメッセージを可能な重複として印付けできます。Diameter サーバーが重複検出を担当するため、最適化のために T フラグを利用するかどうかを選べます。T フラグは相互運用性に影響せず、一部のサーバーでは不要なため、Diameter クライアントおよびエージェントによる T フラグの生成は必須(REQUIRED)ですが、Diameter サーバーによる実装は任意(MAY)です。
例として、重複は最長の記録されたネットワーク分断または機器故障の時間窓内、おそらく 1 日程度に現れると通常想定できます。したがって、この時間窓内のレコードだけを後方方向に調べれば十分です。第二に、ハッシュ手法や、受信メッセージの T フラグの利用などの方式により、稀な場合を除きこの集合に対する完全検索の必要をなくせます。
以下は、サーバーが T フラグを用いて重複要求を検出する例です。
Diameter サーバーは、受信メッセージの T フラグを調べ、レコードが可能な重複かどうかを判断しても構いません(MAY)。要求メッセージに T フラグが設定されている場合、サーバーは設定可能な重複時間窓で前後方向に重複を検索します。これによりデータベース検索は T フラグが設定されたレコードに限定されます。運用の良いネットワークでは、ネットワーク分断と機器故障はまれであると考えられ、この方法は重複検出プロセスを大幅に最適化します。フェイルオーバ中は、元の伝送と重複伝送が経路で異なる遅延を被るため、T フラグ付きのレコードの後に元のレコードが到着することがあります。フェイルオーバ間隔が短いほどその可能性は高まります。順序が入れ替わった重複を検出するため、Diameter サーバーは T フラグ付き要求の重複チェックに後方および前方の時間窓を用いるべきです(should)。例えば、元のレコードがネットワークを抜け課金サーバーに記録される時間を確保するため、Diameter サーバーは元のトランスポート接続が閉じた後、TIME_WAIT + RECORD_PROCESSING_TIME が経過するまで T フラグ付きレコードの処理を遅延できます。その期間の後、T フラグ付きレコードをデータベースと照合し、元のレコードが送信されていれば受信・記録済みであると相対的に確信できます。