要約
- RFC 3082は、ユーザーエージェントがサービス変更を購読し、問い合わせを繰り返さずに済む方法を定める。Directory Agentの有無で通知経路は異なる。
- DAが消えても、既に通知先を知らされたサービスエージェントは送信を続けられる。一方、新しいエージェントは購読を知らない可能性がある。古い通知の継続は、新サービスも漏れなくカバーする証拠ではない。
問い合わせはイベント配信ではない
Service Location Protocolの基本はオンデマンド型だった。サービスエージェント(SA)がサービスを広告し、ユーザーエージェント(UA)が必要になった時点で問い合わせる。サービスの出現や消失をすぐに画面へ反映したいアプリは、ネットワークを定期的にポーリングする必要があった。2001年3月にExperimental Protocolとして発行されたRFC 3082は、変化を通知する仕組みでこの反復を減らそうとした。ただし、Internet Standardを定めた文書ではない。
問い合わせから購読へ移るだけなら単純に見える。だが、後から来たSAに「誰かが待っている」と伝えるのは誰なのか。RFC 3082はDirectory Agent(DA)のない小規模ネットワークと、DAのある大規模ネットワークを別々に扱う。購読状態が置かれる場所も同じではない。
二つの構成、異なる代償
DAがないネットワークでは、SAが登録・登録解除をIPマルチキャストで広く知らせる。マルチキャストが使えなければIPv4ブロードキャストを用いる。UAはサービス種別やスコープで受信後に選別する。新しいSAに購読者を伝える中央役は不要になるが、UAは無関係な通知も処理し、配信範囲の管理が重要になる。
DAを使うネットワークでは、UAがサービス要求にSubscribe拡張を付ける。DAは対象のサービス種別とスコープに対応するマルチキャストグループをNotifyAtとして返す。既存SAにはDAAdvertで通知でき、条件に合う新しいSAの登録応答SrvAckにもNotifyAtを含められる。広告が正常な登録解除なしに期限切れになった場合は、DA自身が登録解除通知を送る。イベント通知の主な送信者はSAであり、DAが全イベントの中央リレーになるわけではない。
処理は分散するが、状態も分散する。DAは購読を記録し、既存SAはグループアドレスを覚え、UAはグループに参加する。マルチキャストアドレスの割り当てとリースも別の状態だ。重複したNotifyAt通知を抑えるため、DAは0〜3秒の一様なランダム遅延を待ち、その間に他のDAから一致する通知が届かないか監視する。これは重複抑制であって、購読テーブルの複製や合意形成ではない。
消える状態と続く通知
第10節は部分障害を明確に記す。DAが予期せず消えると、そこにあったUAの購読情報は失われる。それでもUAは既存SAから通知を受け続ける。既存SAはすでにNotifyAtを受け取っているからだ。しかし、別のDAにも同じ購読情報がない限り、新しいSAには購読が伝わらない。
UAが代替DAを見つけるのは、能動的な要求を出してからかもしれない。旧DAの消失後、新しいDAの発見と購読の更新より先にサービスが登録されれば、その新サービスは通知経路に入らない。古いサービスの通知が続くため配信は動いているように見えるが、新顔は一度も現れない可能性がある。
既に購読を知っているSAには復旧手順がある。期限までは通知を続け、ほかのDAが見つからない場合は期限を無視して新しいDAの発見まで継続する。そこで再登録した後、SrvAckによりUAが購読を更新したか分かる。ただしRFC自身が残余の時間窓を認める。再起動したDAが利用可能になってからUAが購読を更新するまでに起動したSAは、なお通知を知らされない。あらゆる新サービスの通知が必要なUAは、対応スコープを持つ新たなDAすべてに購読を出すべきだ。DAの台数だけでは購読状態は冗長にならない。
通知の受信はサービス完了の証拠ではない
ほかの仕様要素も証拠の境界を示す。マルチキャスト通知は指数バックオフで15秒にわたり再送される。RFCが述べるのはメッセージが届く確率を高めることまでで、到達保証や永続イベントログではない。属性一覧がUDPのMTUを超えればオーバーフロービットが立ち、足りない属性は後からSAまたはDAへ問い合わせられる。RFCはUAによる認証ブロックの検証も定めるが、メッセージの認証は全リスナーの受信、現在の到達可能性、アプリ処理の完了を証明しない。
UAの購読、DAに保存された種別とスコープ、SAへ届くNotifyAt、マルチキャストグループへの参加、イベントの送信、実際の受信、属性不足時の照会、そしてサービス利用の結果を分けて記録する必要がある。RFC 3082は一部の遷移を規定するが、一連の完了を示す単一の受領証にはまとめていない。
タイトルの二つの事実は両立する。RFC 3082は、DA一台の障害で全通知が止まるとは述べていない。既存SAは継続でき、別のDAが範囲を保てることもある。より限定された要点は、すでに知られた送信者が動き続けても、後から来る送信者の発見まで保証されるわけではない、ということだ。ポーリングを通知に置き換えると、「誰が聞いているか」を覚える場所と、復旧時に戻すべき状態が変わる。
出典
仕様と履歴:RFC 3082、RFC Editorの記録、Datatracker履歴、RFC 2608:SLPv2、RFC 2119、RFC 2373、RFC 2730、RFC 2908。編集上の観点であり、SLP動作の証拠ではない資料:Lu HengのRunning-Code PrimacyとOn Reality Layers。
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
