(57)【特許請求の範囲】
【請求項１】
複数のサーバノードを含む物理的セキュリティシステムにおいてデータを共有する方法であって、
（ａ）前記サーバノードのうちの１つのサーバノード（「第１ノード」）が、前記サーバノードのうちの別のサーバノード（「第２ノード」）を識別するノード識別子にアクセスするステップを含み、
サーバクラスタが前記第１及び第２ノードを含み、前記ノード識別子を含むクラスタメンバーシップ情報が、前記サーバクラスタにおける全てのサーバノードを識別し且つ該全てのサーバノードによってアクセス可能であり、
更に、
（ｂ）前記第１ノードからのデータを前記第２ノードに送信するステップであって、前記第２ノードの通信エンドポイントは前記ノード識別子に関連づけられている当該ステップと、
（ｃ）新しいサーバノードを前記サーバクラスタに追加するステップと、を含み、
前記追加するステップは、
（i）前記新しいサーバノード上に格納されたあるバージョンのクラスタメンバーシップ情報を、既に前記サーバクラスタの一部である前記サーバノードの１つ（「メンバーシップ制御ノード」）上に格納されたあるバージョンのクラスタメンバーシップ情報と交換することであって、
前記交換の前に、
前記新しいサーバノードに格納されたあるバージョンのクラスタメンバーシップ情報は、当該新しいサーバノードが属するクラスタにおけるすべてのサーバノードを識別し、
前記メンバーシップ制御ノードに格納されたあるバージョンのクラスタメンバーシップ情報は、当該メンバーシップ制御ノードが属する前記サーバクラスタにおけるすべてのサーバノードを識別し、
（ii）前記新しいサーバノード上に格納されたあるバージョンのクラスタメンバーシップ情報を、前記新しいサーバノードが前記サーバクラスタに加入する前に前記サーバクラスタが含んでいた前記全てのサーバノードに格納されたあるバージョンのクラスタメンバーシップ情報に同期すること、
を含む、方法。
【請求項２】
（ａ）前記サーバクラスタが、少なくとも３つのサーバノードを含む、又は
（ｂ）前記方法が、
(i)前記第２ノードを使用して、前記第１ノードを識別するノード識別子にアクセスするステップと、
(ii)前記第２ノードからの前記データを前記第１ノードに送信するステップと
を含む、請求項１に記載の方法。
【請求項３】
前記サーバノードが、カメラ、ネットワークビデオレコーダ、及びアクセス制御サーバを含む、請求項１に記載の方法。
【請求項４】
前記クラスタメンバーシップ情報が、
（ａ）前記サーバクラスタにおける前記サーバノードの各々を一意的に識別するノード識別子と、
（ｂ）前記サーバノードが属するサーバクラスタを一意的に識別するクラスタ識別子と、
を含む、請求項１に記載の方法。
【請求項５】
前記サーバクラスタにおける前記サーバノードの各々が、前記クラスタメンバーシップ情報のバージョンを永続的にローカルに格納する、請求項４に記載の方法。
【請求項６】
（ａ）前記サーバクラスタにおける前記サーバノードの１つ（「リブートサーバノード」）をリブートするステップと、
（ｂ）前記リブートされたサーバノードがオンラインに戻ると、前記リブートされたサーバノードを使用して、
（ｉ）前記サーバクラスタを識別する前記クラスタ識別子にアクセスしと、
（ｉｉ）前記サーバクラスタに自動的に再加入する、
ことを含む方法を実行するステップと、
を含む、請求項５に記載の方法。
【請求項７】
前記データを送信するステップが、
（ａ）前記第１ノードを使用して、前記ノード識別子から前記第２ノードの通信エンドポイントを探すステップと、
（ｂ）前記第１ノードからのデータを前記通信エンドポイントに送信するステップと、を含み、
前記通信エンドポイント及び前記ノード識別子が、前記サーバクラスタにおけるサーバノードの全てに対するノード識別子を対応する通信エンドポイントに関係付けるネットワークマップへのエントリを含み、前記サーバクラスタにおける前記サーバノードの各々が、前記ネットワークマップの固有のバージョンを永続的にローカルに格納する、請求項５に記載の方法。
【請求項８】
前記ネットワークマップにより、前記サーバクラスタにおける前記サーバノードの各々が、中央サーバを使用することなく前記サーバクラスタにおけるサーバノードの何れかの他のノードに前記データを送信できるようになる、請求項７に記載の方法。
【請求項９】
前記データが前記第１ノード上にローカルに格納され、本方法が更に、前記第１ノードを使用して前記データを修正するステップを含み、前記第１ノードからのデータを前記第２ノードに送信するステップが、前記第１ノードが前記データを修正した後に前記第１ノード及び第２ノード上のデータを同期するステップの一部を構成し、
前記データが、カジュアリティバージョニング機構を使用して生成されたバージョン情報を含み、前記データの異なるバージョンが、前記第１及び第２ノード上に格納され、前記データを同期するステップが、前記第１及び第２ノード上に格納されたバージョン情報を比較して、前記第１及び第２ノードの双方に対してバージョン情報が最新であることを示すデータを採用することを含む、
請求項５に記載の方法。
【請求項１０】
前記データが、前記第１ノードのノード識別子、前記第１ノードのハートビート状態情報、前記第１ノードのアプリケーション状態情報、及びバージョン情報を含み、前記データを送信するステップが、前記サーバクラスタにおける前記サーバノードのペア間でデータ交換を実行するゴシッププロトコルを使用して、前記サーバクラスタにおけるサーバノードの全てに前記データを配布することを含む、請求項５に記載の方法。
【請求項１１】
（ａ）前記データが、前記サーバクラスタにおけるサーバノードの全てに定期的に配布される、又は
（ｂ）前記データが、前記第１ノードが前記サーバクラスタに加入した時に前記第２ノードに送信される、
請求項１０に記載の方法。
【請求項１２】
前記サーバクラスタにおけるサーバノードの何れかによって修正することができるエントリが追加されたドメインが、前記サーバクラスタにおけるノードの各々にローカルに格納され、本方法が更に、前記サーバノードのどれが前記エントリのうちの最新の修正されたエントリを有するかを前記バージョン情報が示すように、カジュアリティバージョニング機構を使用して前記バージョン情報を生成するステップを含む、請求項１０に記載の方法。
【請求項１３】
前記アプリケーション状態情報が、前記ドメインにおけるエントリの全てをハッシュすることによって生成されたトップレベルハッシュを含み、さらに、
（ａ）前記第２ノードを使用して、前記トップレベルハッシュを、前記第２ノード上にローカルに格納された対応するドメインのバージョンをハッシュすることによって生成されたトップレベルハッシュと比較するステップと、
（ｂ）前記トップレベルハッシュが異なる場合、前記バージョン情報を使用して前記第１及び第２ノードの双方で前記ドメインを同期するステップと、
を含む、請求項１２に記載の方法。
【請求項１４】
前記第１ノードによってのみ修正することができるステータスエントリが、前記第１ノード上にローカルに格納され、前記バージョン情報が、前記ステータスエントリを修正する時は必ず前記第１ノードによって増分されるバージョン番号を含み、及び
前記アプリケーション状態情報が、前記ステータスエントリを識別するステータスエンティティ識別子及び前記バージョン番号を有するステータスエンティティペアを含む、
請求項１０に記載の方法。
【請求項１５】
（ａ）前記第２ノードを使用して、前記第１ノードから受信されたバージョン番号を、前記第２ノード上にローカルに格納された対応するステータスエントリのバージョン番号と比較するステップと、及び
（ｂ）前記バージョン番号が異なる場合、前記第２ノード上にローカルに格納されたステータスエントリを、前記第１ノード上にローカルに格納されたステータスエントリによって更新するステップと、
を更に含む、請求項１４に記載の方法。
【請求項１６】
前記ステータスエントリを更新するステップが、前記ステータスエントリと同時に修正された前記第１ノード上にローカルに格納されたステータスエントリを前記第１ノードから前記第２ノードに送信するステップを含む、請求項１５に記載の方法。
【請求項１７】
（ａ）前記第１及び第２ノードが、前記サーバクラスタにおけるサーバノードのグループの少なくとも一部を含み、前記第１ノードが前記データを全体的に順序付けられた方式で前記グループにおけるサーバノードの全てに送信でき、前記データを送信するステップが、前記第１ノードが前記グループにおけるサーバノードの全てに前記データを送信することを含む、又は
（ｂ）前記データが、前記サーバクラスタにおけるサーバノードのうちの別のサーバノードから前記第１ノードを介して前記第２ノードにストリーミングされるストリーミングビデオを含む、
請求項５に記載の方法。
【請求項１８】
前記データが、前記物理的セキュリティシステムのランタイム中に生成された非永続的データを含む、請求項１７に記載の方法。
【請求項１９】
第１ノード及び第２ノードを有する複数のサーバノードを備えた物理的セキュリティシステムであって、前記第１ノードが、コンピュータ可読媒体に通信可能に接続されたプロセッサを含み、前記コンピュータ可読媒体は、請求項１〜１８の何れか１項に記載の方法を前記プロセッサに実行させるようにするステートメント及び命令を符号化している、物理的セキュリティシステム。
【請求項２０】
複数のサーバノードを含む物理的セキュリティシステムにおいてデータを共有する請求項１〜１８の何れか１項に記載の方法をプロセッサに実行させるためのステートメント及び命令を符号化した非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本出願は、その全体が引用により本明細書に組み入れられる２０１２年９月７日出願の同一出願人による米国特許出願第１３／６０７，４４７号明細書の同時係属出願である。
本開示は、複数のサーバノードを有する物理的セキュリティシステムに関する。
【背景技術】
【０００２】
物理的セキュリティシステムは、許可されていない人が、建物、設備、又はコンフィデンシャル情報などの施設に物理的にアクセスするのを防ぐための手段を実装するシステムである。物理的セキュリティシステムの実施例は、施設及び施設に近接したものを監視するためにカメラが使用されるシステムのような監視システム、建物へのアクセスを制御するためにＲＦＩＤカードを使用するシステムのようなアクセス制御システム、家庭用盗難警報システムのような侵入検出システム、及び前述のシステムの組合せを含む。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願連番第１３／６０７，４４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
物理的セキュリティシステムは、コンピュータを組み込むことが多い。この種類の物理的セキュリティシステムが増えるにつれて、本システムを作動させるのに必要とされるコンピュータパワーも増大する。例えば、監視システムにおけるカメラの数が増えるにつれて、追加されるビデオを格納でき且つ多数のカメラの同時使用及び管理を可能にするために、コンピュータパワーの必要量も増大する。従って、物理的セキュリティシステムが増えるにつれて生じる問題に対処するよう、研究及び開発が継続的に行われている。
【課題を解決するための手段】
【０００５】
第１の態様によれば、複数のサーバノードを含む物理的セキュリティシステムにおいてデータを共有する方法が提供される。本方法は、サーバノードのうちの１つのサーバノード（「第１ノード」）を使用して、サーバノードのうちの別のサーバノード（「第２ノード」）を識別するノード識別子にアクセスするステップを含み、第１及び第２ノードは、サーバクラスタの少なくとも一部を含み、ノード識別子は、サーバクラスタにおける全てのサーバノードを識別し且つ該全てのサーバノードによってアクセス可能なクラスタメンバーシップ情報の少なくとも一部を含み、本方法は更に、第１ノードからのデータを第２ノードに送信するステップを含む。
【０００６】
サーバクラスタは少なくとも３つのサーバノードを含むことができる。
【０００７】
サーバノードは、カメラ、ネットワークビデオレコーダ、及びアクセス制御サーバを含むことができる。
【０００８】
本方法は、第２ノードを使用して、第１ノードを識別するノード識別子にアクセスするステップと、第２ノードからの付加的なデータを第１ノードに送信するステップと、を更に含むことができる。
【０００９】
クラスタメンバーシップ情報は、サーバクラスタにおけるサーバノードの各々を一意的に識別するノード識別子と、サーバノードが属するサーバクラスタを一意的に識別するクラスタ識別子と、を含むことができる。
【００１０】
サーバクラスタにおけるサーバノードの各々は、クラスタメンバーシップ情報の固有のバージョンを永続的にローカルに格納することができる。
【００１１】
本方法は更に、サーバクラスタにおけるサーバノードの１つ（「リブートサーバノード」）をリブートするステップと、リブートされたサーバノードがオンラインに戻ると、リブートされたサーバノードを使用して、（ｉ）サーバクラスタを識別するクラスタ識別子にアクセスし、（ｉｉ）サーバクラスタに自動的に再参加する、ことを含む方法を実行するステップと、を含むことができる。
【００１２】
本方法は更に、新しいサーバノードをサーバクラスタに追加するステップを含むことができ、該追加するステップが、新しいサーバノード上に格納されたクラスタメンバーシップ情報のバージョンを、既にサーバクラスタの一部であるサーバノード（「メンバーシップ制御ノード」）の１つ上に格納されたクラスタメンバーシップ情報のバージョンと交換するステップと、新しいサーバノード上に格納されたクラスタメンバーシップ情報のバージョンを、新しいサーバノードがクラスタに加入する前にクラスタにおけるサーバノードの全て上に格納されたクラスタメンバーシップ情報のバージョンに同期するステップと、を含む方法を実行することによって行われる。
【００１３】
データを送信するステップは、第１ノードを使用して、ノード識別子から第２ノードの通信エンドポイントを探すステップと、第１ノードからのデータを通信エンドポイントに送信するステップと、を含むことができる。
【００１４】
通信エンドポイント及びノード識別子は、サーバクラスタにおけるサーバノードの全てに対するノード識別子を対応する通信エンドポイントに関係付けるネットワークマップへのエントリを含むことができ、サーバクラスタにおけるサーバノードの各々は、ネットワークマップのノード固有のバージョンを永続的にローカルに格納することができる。
【００１５】
このネットワークマップにより、サーバクラスタにおけるサーバノードの各々は、中央サーバを使用することなくサーバクラスタにおけるサーバノードの何れかの他のノードにデータを送信できるようになる。
【００１６】
データは第１ノード上にローカルに格納することができ、本方法は更に、第１ノードを使用してデータを修正するステップを含むことができ、第１ノードからのデータを第２ノードに送信するステップは、第１ノードがデータを修正した後に第１及び第２ノード上のデータを同期するステップの一部を構成する。
【００１７】
データは、カジュアリティバージョニング機構を使用して生成されたバージョン情報を含むことができ、データの異なるバージョンは、第１及び第２ノードに格納することができ、データを同期するステップは、第１及び第２ノード上に格納されたバージョン情報を比較して、第１及び第２ノードの双方に対してバージョン情報が最新であることを示すデータを採用するステップを含むことができる。
【００１８】
データは、第１ノードのノード識別子、第１ノードのハートビート状態情報、第１ノードのアプリケーション状態情報、及びバージョン情報を含むことができ、データを送信するステップは、クラスタにおけるサーバノードのペア間でデータ交換を実行するゴシッププロトコルを使用して、サーバクラスタにおけるサーバノードの全てにデータを配布するステップを含むことができる。
【００１９】
データは、サーバクラスタにおけるサーバノードの全てに定期的に配布することができる。
【００２０】
データは、第１ノードがクラスタに加入した時に第２ノードに送信することができる。
【００２１】
サーバクラスタにおけるサーバノードの何れかによって修正することができるエントリが追加されたドメインは、サーバクラスタにおけるノードの各々にローカルに格納することができ、本方法は更に、サーバノードのどれがエントリのうちの最新の修正されたエントリを有するかをバージョン情報が示すように、カジュアリティバージョニング機構を使用してバージョン情報を生成するステップを含むことができる。
【００２２】
アプリケーション状態情報は、ドメインにおけるエントリの全てをハッシュすることによって生成されたトップレベルハッシュを含むことができる。
【００２３】
本方法は更に、第２ノードを使用して、トップレベルハッシュを、第２ノード上にローカルに格納された対応するドメインのバージョンをハッシュすることによって生成されたトップレベルハッシュと比較するステップと、トップレベルハッシュが異なる場合、バージョン情報を使用して第１及び第２ノード双方でドメインを同期するステップと、を含むことができる。
【００２４】
第１ノードによってのみ修正することができるステータスエントリは、第１ノード上にローカルに格納することができ、バージョン情報は、ステータスエントリを修正する時は必ず第１ノードが増分するバージョン番号を含むことができる。
【００２５】
アプリケーション状態情報は、ステータスエントリを識別するステータスエンティティ識別子及びバージョン番号を有するステータスエンティティペアを含むことができる。
【００２６】
本方法は更に、第２ノードを使用して、第１ノードから受信されたバージョン番号を、第２ノード上にローカルに格納された対応するステータスエントリのバージョン番号と比較するステップと、バージョン番号が異なる場合、第２ノード上にローカルに格納されたステータスエントリを第１ノード上にローカルに格納されたステータスエントリによって更新するステップと、を含むことができる。
【００２７】
ステータスエントリを更新するステップは、ステータスエントリと同時に修正された第１ノード上にローカルに格納された付加的なステータスエントリを第１ノードから第２ノードに送信するステップを含むことができる。
【００２８】
第１及び第２ノードは、第１ノードがデータを全体的に順序付けられた方式でグループにおけるサーバノードの全てに送信することができるクラスタにおけるサーバノードのグループの少なくとも一部を含むことができ、データを送信するステップは、第１ノードがグループにおけるサーバノードの全てにデータを送信するステップを含むことができる。
【００２９】
データは、物理的セキュリティシステムのランタイム中に生成された非永続的データを含むことができる。
【００３０】
データはまた、サーバクラスタにおけるサーバノードのうちの別のサーバノードから第１ノードを介して第２ノードにストリーミングされるストリーミングビデオを含むことができる。
【００３１】
別の態様によれば、物理的セキュリティシステムにおいてデータを共有するためのシステムが提供され、本システムは、第１ノード及び第２ノードを有する複数のサーバノードを備え、第１ノードが、コンピュータ可読媒体に通信可能に接続されたプロセッサを含み、該コンピュータ可読媒体は、方法をプロセッサに実行させるようにするステートメント及び命令を符号化しており、上記方法が、第２ノードを識別するノード識別子にアクセスするステップを含み、該第１及び第２ノードは、サーバクラスタの少なくとも一部を含み、ノード識別子は、サーバクラスタにおけるサーバノードの全てを識別し且つ該全てのサーボノードによってアクセス可能なクラスタメンバーシップ情報の少なくとも一部を含み、上記方法が更に、データを第２ノードに送信するステップを含む。
【００３２】
別の態様によれば、複数のサーバノードを含む物理的セキュリティシステムにおいてデータを共有する方法をプロセッサに実行させるためのステートメント及び命令を符号化した非一時的コンピュータ可読媒体が提供され、上記方法が、サーバノードのうちの１つのサーバノード（「第１ノード」）を使用して、サーバノードのうちの別のサーバノード（「第２ノード」）を識別するノード識別子にアクセスするステップを含み、第１及び第２ノードは、サーバクラスタの少なくとも一部を含み、ノード識別子は、サーバクラスタにおける全てのサーバノードを識別し且つ該全てのサーバノードによってアクセス可能なクラスタメンバーシップ情報の少なくとも一部を含み、上記方法が更に、第１ノードからのデータを第２ノードに送信するステップを含む。
【００３３】
別の態様によれば、複数のサーバノードを含む物理的セキュリティシステムにおいて無人ディスプレイと対話するための方法が提供され、本方法は、無人ディスプレイと通信可能なサーバノードのうちの１つのサーバノード（「第２ノード」）から、クライアントディスプレイと通信可能なサーバノードのうちの別のサーバノード（「第１ノード」）に、無人ディスプレイ上に表示されたビューを示すビュー状態データを送信するステップと、クライアントディスプレイ上に無人ディスプレイ上に表示されたビューの少なくとも一部を表示するステップと、を含む。１つの態様において、サーバノードのどれもが中央ゲートウェイサーバではなく、代替の態様において、サーバノードの少なくとも１つが中央ゲートウェイサーバである。
【００３４】
本方法は更に、第１ノードから第２ノードに無人ディスプレイのビューを変更するためのメッセージを送信するステップと、第１ノードから第２ノードに送信されたメッセージに従って、無人ディスプレイを更新するステップと、を含むことができる。
【００３５】
第１及び第２ノード並びに複数のサーバノードのうちの少なくとも別のサーバノードは、サーバクラスタを含むことができ、第１及び第２ノードは、第２ノードがビュー状態データを全体的に順序付けられた方式でグループにおける全ての他のサーバノードに送信できるクラスタにおけるサーバノードのグループの少なくとも一部を含むことができ、ビュー状態データを送信するステップは、第２ノードがグループにおける他のサーバノードの全てにデータを送信するステップを含むことができる。
【００３６】
第１及び第２ノード並びに複数のサーバノードのうちの少なくとも別のサーバノードは、サーバクラスタを含むことができ、第１及び第２ノードは、第１ノードが無人ディスプレイの状態を変更するためのメッセージを全体的に順序付けられた方式でグループにおける全ての他のサーバノードに送信できるクラスタにおけるサーバノードのグループの少なくとも一部を含むことができ、第１ノードは、無人ディスプレイの状態を変更するためのメッセージをグループにおける他のサーバノードの全てに送信することができる。
【００３７】
本方法は更に、無人ディスプレイのビューが制御できるという通知を第２ノードから第１ノードに送信するステップを更に含むことができる。
【００３８】
通知を送信するステップは、クラスタにおけるサーバノードのペア間でデータ交換を実行するゴシッププロトコルを使用して、サーバクラスタにおけるサーバノードの全てに通知を配布するステップを含むことができる。
【００３９】
本方法は、無人ディスプレイの状態を制御ディスプレイに送信する前に、第２ノードを使用して第１ノードを識別するノード識別子にアクセスするステップを含むことができ、第１及び第２ノードは、サーバクラスタの少なくとも一部を含み、ノード識別子は、サーバクラスタにおける全てのサーバノードを識別し且つ該全てのサーバノードによってアクセス可能なクラスタメンバーシップ情報の少なくとも一部を含む。
【００４０】
クラスタメンバーシップ情報は、サーバクラスタにおけるサーバノードの各々を一意的に識別するノード識別子と、サーバノードが属するサーバクラスタを一意的に識別するクラスタ識別子を含むことができる。
【００４１】
サーバクラスタにおけるサーバノードの各々は、クラスタメンバーシップ情報の固有のバージョンを永続的にローカルに格納することができる。
【００４２】
別の態様によれば、クライアントディスプレイと、無人ディスプレイと、複数のサーバノードとを備えた物理的セキュリティシステムが提供され、サーバノードのうちの１つのサーバノード（「第１ノード」）は、クライアントディスプレイと通信可能であり、サーバノードのうちの別のサーバノード（「第２ノード」）は、無人ディスプレイと通信可能であり、第２ノードは、第２ディスプレイ上に表示されたビューを示すビュー状態データを第１ノードに送信するよう構成され、第１ノードは、第２ディスプレイ上に表示されたビューの少なくとも一部分をクライアントディスプレイ上に表示するよう構成される。１つの態様において、サーバノードのどれもが中央ゲートウェイサーバではなく、代替の態様において、サーバノードの少なくとも１つが中央ゲートウェイサーバである。
【００４３】
別の態様によれば、クライアントディスプレイを有するクライアントと、無人ディスプレイと、複数のサーバノードとを備えた物理的セキュリティシステムが提供され、サーバノードのうちの１つのサーバノード（「第１ノード」）は、クライアントと通信可能であり、サーバノードのうちの別のサーバノード（「第２ノード」）は、無人ディスプレイと通信可能であり、第２ノードは、第２ディスプレイ上に表示されたビューを示すビュー状態データを第１ノードに送信するよう構成され、クライアント及び第１ノードは、第２ディスプレイ上に表示されたビューの少なくとも一部分をクライアントディスプレイ上に表示するよう構成される。１つの態様において、サーバノードのどれもが中央ゲートウェイサーバではなく、代替の態様において、サーバノードの少なくとも１つが中央ゲートウェイサーバである。
【００４４】
無人ディスプレイは、第２ノードに直接接続することができ、又は、例えば無人クライアント又はワークステーションを介して第２ノードに間接的に接続することができる。
【００４５】
別の態様によれば、複数のサーバノードを含む物理的セキュリティシステムにおいて無人ディスプレイと対話するための方法をプロセッサに実行させるためのステートメント及び命令を符号化した非一時的コンピュータ可読媒体が提供され、本方法は、無人ディスプレイと通信可能なサーバノードのうちの１つのサーバノード（「第２ノード」）からクライアントディスプレイと通信可能なサーバノードのうちの別のサーバノード（「第１サーバ」）に、無人ディスプレイ上に表示されたビューを示すビュー状態データを送信するステップと、クライアントディスプレイ上に、無人ディスプレイ上に表示されたビューの少なくとも一部分を表示するステップと、を含む。
【００４６】
別の態様によれば、複数のサーバノードを含む物理的セキュリティシステムを使用してビューを共有（「共有ビュー」）する方法が提供され、本方法は、第１クライアントからサーバノードのうちの１つのサーバノード（「第１ノード」）に、第１クライアントによって表示された共有ビューを表すビュー状態データを送信するステップと、第１ノードからビュー状態データを第２クライアントにサーバノードのうちの別のサーバノード（「第２ノード」）を介して送信するステップと、共有ビューを表示するためにビュー状態データを使用して第２クライアントのディスプレイを更新するステップと、第２クライアントにおける共有ビューの変更に応答して、第２クライアントによって表示された共有ビューを表す更新されたビュー状態データを第２クライアントから第２ノードに送信するステップと、更新されたビュー状態データを第２ノードから第１ノードを介して第１クライアントに送信するステップと、第１クライアントのディスプレイを更新して、更新されたビュー状態データを使用して共有ビューを表示するステップと、を含む。１つの態様において、サーバノードのどれもが中央ゲートウェイサーバではなく、代替の態様において、ノードの少なくとも１つが中央ゲートウェイサーバである。
【００４７】
第１及び第２ノード並びに複数のサーバノードのうちの少なくとも別のサーバノードは、サーバクラスタを含むことができ、第１及び第２ノードは、第１ノードがビュー状態データを全体的に順序付けられた方式でグループの全ての他のサーバノードに送信できるクラスタにおけるサーバノードのグループの少なくとも一部を含むことができ、ビュー状態データを送信するステップは、第１ノードがデータをグループにおける他のサーバノードの全てに送信するステップを含むことができる。
【００４８】
第１及び第２ノード並びに複数のサーバノードのうちの少なくとも別のサーバノードは、サーバクラスタを含むことができ、第１及び第２ノードは、第２ノードが更新されたビュー状態データを全体的に順序付けられた方式でグループの全ての他のサーバノードに送信できるクラスタにおけるサーバノードのグループの少なくとも一部を含むことができ、更新されたビュー状態データを送信するステップは、第２ノードが更新されたビュー状態データをグループにおける他のサーバノードの全てに送信するステップを含むことができる。
【００４９】
本方法は、第２クライアントのディスプレイ上に共有ビューを表示する前に、第１クライアントから第１及び第２ノードを介して第２クライアントに、第１クライアントによって表示された共有ビューを第２クライアントと共有できるという通知を送信するステップを含むことができる。
【００５０】
第１及び第２ノード並びに複数のサーバノードのうちの少なくとも別のサーバノードは、サーバクラスタを含むことができ、第１及び第２ノードは、第１ノードが通知を全体的に順序付けられた方式でグループにおける他のサーバノードの全てに送信できるクラスタにおけるサーバノードのグループの少なくとも一部を含むことができ、通知を送信するステップは、第１ノードが通知をグループにおける他のサーバノードの全てに送信するステップを含むことができる。
【００５１】
本方法は、第１ノードが状態データを第２クライアントに第２ノードを介して送信する前に、第１ノードを使用して第２ノードを識別するノード識別子にアクセスするステップを含むことができ、第１及び第２ノードは、サーバクラスタの少なくとも一部を含み、ノード識別子は、サーバクラスタにおける全てのサーバノードを識別し且つ該全てのサーバノードによってアクセス可能なクラスタメンバーシップ情報の少なくとも一部を含む。
【００５２】
クラスタメンバーシップ情報は、サーバクラスタにおけるサーバノードの各々を一意的に識別するノード識別子と、サーバノードが属するサーバクラスタを一意的に識別するクラスタ識別子と、を含むことができる。
【００５３】
サーバクラスタにおけるサーバノードの各々は、クラスタメンバーシップ情報の固有のバージョンを永続的にローカルに格納することができる。
【００５４】
別の態様によれば、ディスプレイを有する第１クライアントと、ディスプレイを有する第２クライアントと、複数のサーバノードとを備えた物理的セキュリティシステムが提供され、サーバノードのうちの１つのサーバノード（「第１ノード」）は、第１ディスプレイと通信可能であり、サーバノードのうちの別のサーバノード（「第２ノード」）は、第２ディスプレイと通信可能であり、第１及び第２クライアント及び第１及び第２ノードは、第１クライアントから第１ノードに、第１クライアントのディスプレイ上に表示された共有ビューを表すビュー状態データを送信し、ビュー状態データを第１ノードから第２クライアントに第２ノードを介して送信し、共有ビューを表示するためにビュー状態データを使用して第２クライアントのディスプレイを更新し、第２クライアントにおける共有ビューの変更に応答して、第２クライアントのディスプレイ上に表示された共有ビューを表す更新されたビュー状態データを第２クライアントから第２ノードに送信し、更新されたビュー状態データを第２ノードから第１クライアントに第１ノードを介して送信し、更新されたビュー状態データを使用して共有ビューを表示するために第１クライアントのディスプレイを更新する、よう構成される。１つの態様において、サーバノードのどれもが中央ゲートウェイサーバではなく、代替の態様において、サーバノードの少なくとも１つがゲートウェイサーバである。
【００５５】
別の態様によれば、複数のサーバノードを含む物理的セキュリティシステムを使用してビューを共有する（「共有ビュー」）ための方法をプロセッサに実行させるためのステートメント及び命令を符号化した非一時的コンピュータ可読媒体が提供され、本方法は、第１クライアントからサーバノードのうちの１つのサーバノード（「第１ノード」）に第１クライアントによって表示された共有ビューを表すビュー状態データを送信するステップと、ビュー状態データを第１ノードから第２クライアントにサーバノードのうちの別のサーバノード（「第２ノード」）を介して送信するステップと、共有ビューを表示するためにビュー状態データを使用して第２クライアントのディスプレイを更新するステップと、第２クライアントにおける共有ビューの変更に応答して、第２クライアントによって表示された共有ビューを表す更新されたビュー状態データを第２クライアントから第２ノードに送信するステップと、更新されたビュー状態データを第２ノードから第１ノードを介して第１クライアントに送信するステップと、共有ビューを表示するために更新されたビュー状態データを使用して第１クライアントのディスプレイを更新するステップと、を含む。
【００５６】
この概要は、必ずしも全ての態様の全範囲を記載したものではない。他の態様、特徴及び利点は、特定の実施形態の以下の説明を精査すると当業者に明らかになるであろう。
【００５７】
添付図面において、１又はそれ以上の例示的な実施形態が例証されている。
【図面の簡単な説明】
【００５８】
【図１】１つの実施形態による、分散型物理的セキュリティシステムを示すブロック図である。
【図２】図１のシステムによって使用されるプロトコル群を示すブロック図である。
【図３】図１のシステムが異なるシステムユーザ間で設定をどのように共有するかを示すＵＭＬシーケンス図である。
【図４】図１のシステムが異なるシステムユーザ間で状態をどのように共有するかを示すＵＭＬシーケンス図である。
【図５】図１のシステムが異なるシステムユーザ間でビューをどのように共有するかを示すＵＭＬシーケンス図である。
【図６】図１のシステムが異なるシステムユーザ間でストリームをどのように共有するかを示すＵＭＬシーケンス図である。
【図７】図１のシステムのユーザが見るビューを示す図である。
【図８】別の実施形態による、物理的セキュリティシステムにおいてデータを共有する方法を示す図である。
【図９】別の実施形態による、クラスタに自動的に再加入するための方法を示す図である。
【図１０】図１のシステムが無人ビューをシステムユーザとどのように共有するかを示すＵＭＬシーケンス図である。
【図１１】別の実施形態による複数のサーバノードを含む物理的セキュリティシステムにおいて無人ディスプレイと対話するための方法を示す図である。
【図１２】別の実施形態による複数のサーバノードを含む物理的セキュリティシステムを使用してビューを共有する方法を示す図である。
【発明を実施するための形態】
【００５９】
「上部」、「下部」、「上向き」、「下向き」、「垂直に」、及び「水平に」などの方向を示す用語は、単に相対的な基準を提供する目的で以下の説明において使用されており、何れかの製品が使用時にどのように位置付けられるか又は組立体又は環境に対して装着されるかに対しての何らかの制限を示唆するものではない。加えて、本明細書で使用される「ｃｏｕｐｌｅ（結合する）」及び「ｃｏｕｐｌｅｄ（結合される）」、「ｃｏｕｐｌｅｓ（結合する）」、及び「ｃｏｕｐｌｉｎｇ（結合）」などの変形形態は、別途指示のない限り、間接的及び直接的接続を含むものとする。例えば、第１デバイスが第２デバイスに結合される場合、当該結合は、直接接続によるか又は他のデバイス及び接続を介した間接的接続によるものとすることができる。同様に、第１デバイスが第２デバイスに通信可能に接続される場合、通信は、直接接続によるか又は他のデバイス及び接続を介した間接的接続によるものとすることができる。
【００６０】
監視システムが特定数のカメラを含むようになると、ストレージ容量及び処理能力の限界に起因して単一のサーバを使用して監視システムを稼働させることは、実現が困難であるか、又は不可能になる。従って、カメラの数の増加に対処するために、システムに付加的なサーバが追加される。このことは、幾つかの問題を生じることになる。
【００６１】
例えば、監視システムのユーザは、ユーザがカメラ又はサーバにそれぞれ直接接続されていない場合でも、別のユーザが見ているもの（ユーザの「ビュー」）及びシステムのカメラを使用して取り込まれ又はシステムのサーバ上に格納されるストリームビデオを見ることができることを望む場合がある。同様に、ユーザは、システムのどこかで発生しているユーザ状態（例えば、システムの別のユーザが現在システムにログインされているかどうか）及びシステム事象（例えば、警報が起動されたかどうか）に対して、ユーザが直接接続されていないサーバ上でこれらが発生した場合でも、これらにアクセスできることを望む場合がある。追加のサーバを付加することによってスケールアウトされる従来の監視システムでは、この機能を提供するための一般的な方法は、中央ゲートウェイサーバをシステムに追加することである。中央ゲートウェイサーバは、システム事象、ユーザ状態、ビュー、及びビデオを中央ゲートウェイサーバ自体を介してシステムにおける１つのサーバから別のサーバへルーティングし、これによって、ユーザが直接接続されている特定のサーバに関係なく、ユーザは、これらの事象、状態、ビュー、及びビデオにアクセスし又は見ることが可能になる。しかしながら、中央ゲートウェイサーバを使用することで、中央ゲートウェイサーバが故障した場合に、事象、状態、ビュー、及びビデオをもはや共有することができないので、監視システムに単一障害点をもたらすことになる。また、サーバがシステムに追加され、該サーバは中央ゲートウェイサーバ機能の提供の専用となるので、中央ゲートウェイサーバの使用は、監視システムのコストアップになる。
【００６２】
ユーザはまた、システムにおける複数のサーバにわたって同期されるべき共通設定（例えば、ユーザ名、パスワード、アクセス権、その他の形式のユーザアクセス情報）を必要とする場合がある。追加のサーバを付加することによってスケールアウトされる従来の監視システムでは、この機能は、１つのサーバから他方のサーバにマニュアルで設定をエクスポートすることによるか、又は必要に応じて他のサーバが通信するこれらの設定の全てを格納する中央管理サーバを使用して、これらの設定を検索することによって提供される。設定をマニュアルでエクスポートすることは、比較的大きな同期遅延、使用及びセットアップの難しさに起因して、及び大きな同期遅延がシステムの冗長性を損なうので、問題がある。上述したように、中央管理サーバの使用は、中央ゲートウェイサーバを使用するのと同じ問題が生じやすい。
【００６３】
本明細書で記載される実施形態の幾つかは、上述したゲートウェイ又は管理サーバのような中央サーバに頼ることなく、システムにおける２又はそれ以上のサーバノード間でビュー、ビデオ、システム事象、ユーザ状態、及びユーザ設定のようなデータを自動的に共有することができる監視システムのような分散型物理的セキュリティシステムに向けられる。これらの実施形態は、ユーザが、ネットワークビデオレコーダ、カメラ、及びサーバのようなサーバノードにクライアントを介して接続するピアツーピア監視システムに向けられる。サーバノードは、クラスタにおいてグループ化され、クラスタ内の各サーバノードがクラスタ内の他のサーバノードとデータを共有することができる。このデータを共有するために、サーバノードの各々は、データが、ビュー、ビデオ、システム事象、ユーザ状態、又はユーザ設定を表すかどうかに応じて、異なる方法でサーバノード間でデータを共有するプロトコル群に基づいてデータを交換するサービスを実行する。図１から１０は、これらの実施形態を示す。
【００６４】
代替の実施形態において、異なるサーバノード間でビューを共有するのに使用される技術の幾つかは、連合ネットワーク（すなわち、中央サーバを含むネットワーク）及び図１から９に示したようなピアツーピアネットワークに適用可能である。図１０及び１１は、これらの実施形態を示す。
【００６５】
ここで図１を参照すると、１つの実施形態による、監視システム１００の形式の分散型物理的セキュリティシステムが示されている。システム１００は、３つのクライアント１０２ａ−ｃ（第１クライアント１０２ａから第３クライアント１０２ｃ、総称して「クライアント１０２」）と、６つのサーバ１０４ａ−ｆ（第１サーバ１０４ａから第６サーバ１０４ｆ、総称して「サーバ１０４」）と、３つのサーバノードカメラ１０６ａ−ｃ（第１ノードカメラ１０６ａから第３ノードカメラ１０６ｃ、総称して「ノードカメラ１０６」）と、５つの非ノードカメラ１１４と、を含む。
【００６６】
ノードカメラ１０６及びサーバ１０４の各々は、互いに通信可能に接続されたプロセッサ１１０及びメモリ１１２を含み、メモリ１１２は、本明細書で記載される方法の何れかの実施形態をプロセッサ１１０に実行させるステートメント及び命令が符号化されている。サーバ１０４及びノードカメラ１０６は、３つのクラスタ１０８ａ−ｃ（総称して「クラスタ１０８」）にグループ化され、第１〜第３サーバ１０４ａ−ｃが、互いに通信可能に接続されて第１クラスタ１０８ａを形成し、第４〜第６サーバ１０４ｄ−ｆが互いに通信可能に接続されて第２クラスタ１０８ｂを形成し、３つのノードカメラ１０６が互いに通信可能に接続されて第３クラスタ１０８ｃを形成する。第１〜第３サーバ１０４ａ−ｃは、第１クラスタ１０８ａの「メンバ」と呼ばれ、第４〜第６サーバ１０４ｄ−ｆは、第２クラスタ１０８ｂの「メンバ」と呼ばれ、第１〜第３ノードカメラ１０６ａ−ｃは、第３クラスタ１０８ｃの「メンバ」と呼ばれる。
【００６７】
サーバ１０４及びノードカメラ１０６の各々は、各々が、そのクラスタ１０８の他のメンバの存在を認識して、データをクラスタ１０８の他のメンバに送信することができるので「サーバノード」であるが、対照的に、非ノードカメラ１１４は、直接接続されているサーバ１０４ａ、ｂ、ｃ、ｄ、ｆだけを認識するので、サーバノードではない。図示の実施形態において、サーバノードは、クラスタ１０８のサーバノードの全てを列挙するクラスタメンバーシップ情報にアクセスできることに基づき、クラスタ１０８の他のメンバの全てを認識する。クラスタメンバーシップ情報は、サーバノードの各々に永続的及びローカルに格納され、これにより、サーバノードの各々が、システム１００の作動中にリブートした時に、そのクラスタ１０８に自動的に再加入するのが可能になる。以下における「ノード」の言及は、別途指示のない限り、「サーバノード」の言及である。
【００６８】
図示の実施形態において、クラスタ１０８のどれもがクラスタ内の通信に参加していないが、代替の実施形態（図示せず）では、様々なクラスタ１０８のメンバが、互いにデータを共有することができる。図示の実施形態において、サーバ１４は、商用オフザシェルフサーバであり、カメラ１０６、１１４は、カナダ  バンクーバ所在のＡｖｉｇｉｌｏｎ（商標）コーポレーション製であるが、代替の実施形態において、他の好適な種類のサーバ１０８及びカメラ１０６、１１４を使用することができる。
【００６９】
第１クライアント１０２ａは、クラスタ１０８ａ、ｂのメンバである第１及び第４サーバ１０４ａ、ｄに通信可能に接続されることによって、第１及び第２クラスタ１０８ａ、ｂに通信可能に接続され、第２クライアント１０２ｂは、クラスタ１０８のメンバである第２及び第４サーバ１０４ｂ、ｄ及び第１ノードカメラ１０６ａに通信可能に接続されることによって、３つのクラスタ１０８全てに通信可能に接続され、第３クライアント１０２ｃは、クラスタ１０８ｂ、ｃのメンバである第５サーバ１０４ｅ及び第２ノードカメラ１０６ｂに通信可能に接続されることによって、第２及び第３クラスタ１０８ｂ、ｃに通信可能に接続される。以下で詳細に説明するように、クラスタ１０８ａ−ｃの何れかの所与のクラスタにおいて、ノードの各々は、プロトコル群２００（図２に図示）に従ってノードが互いに通信できるようにするサービスを実行して、これにより、何れか１つのノードは、データがビュー、ビデオ、システム事象、ユーザ状態、ユーザ設定、又は別のデータの種類であるかに関係なく、分散コンピュータを使用して、すなわち中央サーバを使用することなく当該データを何れかの他のノードと共有することが可能になる。ノードの各々は、同じクラスタ１０８の一部を形成するノード全てを識別するクラスタメンバーシップ情報にアクセスすることができ、このクラスタメンバーシップ情報にアクセスすることによって、データは、クラスタ１０８のノード全ての間で共有し同期させることができる。
【００７０】
図２は、システム１００のノードによって利用されるプロトコル群２００のブロック図を示す。プロトコル群２００は、３つの層に分割され、表１に要約するように、以下のプロトコルを含む。
【００７１】
表１：プロトコル群２００の要約
0006500289.tif 000002
0006500289.tif 000003
【００７２】
プロトコル群２００におけるプロトコルの各々の機能及び動作の説明は以下の通りである。
【００７３】
トランスポート層
トランスポート層は、オープンシステム相互接続（ＯＳＩ）モデルの層４に対応し、ノード間の信頼できるデータ転送サービスを、クラスタサポート層、データ同期層、及びアプリケーション層に提供する役割を担う。システム１００におけるトランスポート層は、ＵＤＰ２０２及びＴＣＰ／ＨＴＴＰ２０４プロトコルを含む。
【００７４】
クラスタサポート層
クラスタサポート層は、ノードを発見する、ノードの存在を検証する、ノードの活動度をチェックする、ノードがクラスタ１０８のうちの１つのクラスタのメンバであるかどうかを判定する、及びノード間のデータをルーティングする方法を決定するのに使用されるプロトコルを含む。
【００７５】
発見プロトコル２０６
発見プロトコル２０６は、構造化情報標準促進協会（ＯＡＳＩＳ）によって公開されたＷＳ発見プロトコルのバージョン１．１に基づいており、当該プロトコルの全体は、本明細書に引用により組み入れられる。図示の実施形態において、公開された規格において使用されるＸＭＬフォーマッティングは、Ｇｏｏｇｌｅ（商標）Ｐｒｏｔｏｂｕｆ符号化に置き換えられる。
【００７６】
発見プロトコル２０６により、システム１００における何れかのノードが、プローブメッセージを他のノードにマルチキャストして他のノードが応答するのを待機することによって、システム１００における他のノードを識別することが可能となる。ノードは、代替として、システム１００に加入する時にハローメッセージをブロードキャストして、他のノードが最初にプローブメッセージをマルチキャストする必要もなく、他のノードにその存在を警告することができる。プローブとハローメッセージの両方がＯＡＳＩＳによって公開されたＷＳ発見プロトコルでモデル化される。
【００７７】
ゴシッププロトコル２０８
ゴシッププロトコル２０８は、クラスタ１０８におけるノードのペア間でデータ交換をランダムに実行することによって、当該クラスタ１０８のノードのうちの１つからノードの全てにデータを配布するエピデミックプロトコルである。ゴシッププロトコル２０８は、各ノードに対するハートビートカウントの形式で「ハートビート状態」データを交換することによって活動度を伝達し、これにより、ノードは、クラスタ１０８におけるノードの１つが予想外に（例えば、サーバクラッシュに起因して）離れたタイミングを決定することが可能になる。ゴシッププロトコル２０８は、一貫性プロトコル２１６によって使用されるトップレベルハッシュのような「アプリケーション状態」データ及びステータスプロトコル２１８によって使用されるステータスエンティティ識別子及びこれらのバージョン番号を伝達して、以下で詳細に説明されるように、ノード間のデータを同期するタイミングを決定する。ゴシッププロトコル２０８を使用して拡散されるデータは、最終的には、定期的ノード対ノード交換を介して、クラスタ１０８におけるノードの全てに拡散する。
【００７８】
ゴシッププロトコル２０８を使用したクラスタ１０８の何れか２つのノード間のデータ交換は、以下のように、同じクラスタ１０８における第１ノード（「ノードＡ」）から第２ノード（「ノードＢ」）への２つの遠隔手続き呼び出し（ＲＰＣ）を実行することを含む。
１．ノードＡは、ノードＡが認識するクラスタ１０８におけるノード全てに対するダイジェストのリストを含む、グリーティング要求メッセージをノードＢに送信する。各ノードでは、ダイジェストは、当該ノードのハートビート状態又はアプリケーション状態の何れかが変化する度に増分される一意のノード識別子及びバージョン情報を含む。バージョン情報は、例えば、１次元バージョン番号又は多次元バージョンベクトルとすることができる。バージョンベクトルを使用することで、ダイジェストは、ノードが受けた状態変化の履歴を要約することが可能となる。
２．ノードＢは、以下を含むグリーティング応答メッセージをノードＡに送信する。
（ａ）ノードＢがノードＡから情報の受信を望み、ノードＢがグリーティング要求メッセージにおいて送信されたバージョン情報から決定するノードのダイジェストのリスト；
（ｂ）クラスタ１０８の一部を形成することをノードＡが認識していないノードのダイジェストのリスト；
（ｃ）期限が切れた情報を有するノードに対してノードＡを最新にするハートビート及びアプリケーション状態の１つ又は両方のリスト；及び、
（ｄ）ノードＡはクラスタ１０８の一部を形成すると信頼されるが、ノードＢがクラスタ１０８から取り除かれていることを認識しているノードのリスト。
３．ノードＡは、クロージャ要求メッセージをノードＢに送信し、ここでノードＡは以下を送信する。
（ａ）ノードＡがノードＢからのより多くの情報を受信することを望むノードのダイジェストのリスト（例えば、ノードＡは、ノードＢがグリーティング応答メッセージをノードＡに送信するまで、ノードＡが認識しないノードについての情報を要求することができる）；
（ｂ）期限が切れた情報を有するノードに対してノードＢを最新にする状態のリスト；及び
（ｃ）ノードＢはクラスタ１０８の一部を形成すると信頼されるが、ノードＡがクラスタ１０８から取り除かれていることを認識しているノードのリスト。
４．次に、ノードＢは、クロージャ応答メッセージをノードＡに送信し、ここでノードＢは以下を送信する。
（ａ）クロージャ要求におけるノードＡの要求に応答して、期限が切れたノードに対してノードＡを最新にする状態のリスト；及び
（ｂ）グリーティング応答以降にクラスタ１０８から取り除かれたノードのリスト。
【００７９】
ノードＡ及びＢがＲＰＣを交換した後、ノードＡ及びＢは、同一のアクティブノードリストを有し、これらリストは、ＲＰＣの前について認知しており且つクラスタ１０８から取り除かれていないクラスタ１０８におけるノード全てについてハートビート状態及びアプリケーション状態の最新バージョンを含む。
【００８０】
ノードプロトコル２１０
ノードプロトコル２１０は、システム１００における何れかの他のノードとの通信を許可するネットワークマップを各ノードに提供する、各ノードに対するシステム１００のネットワークトポロジーのビューを生成する役割を担う。幾つかの実施形態において、ネットワークマップは、ルーティングテーブルである。ネットワークマップは、アドレス（ＩＰ／ＦＱＤＮ）、ポート番号、及びプロトコルである通信エンドポイントを参照して、これによってノードを接続するＩＰネットワークを通じてノードに到達することができる。
【００８１】
ノードプロトコル２１０は以下の３つの方法でこれを行う。
１．以下に説明するような「ポーク交換」を介して。
２．ノードがシステム１００に加入又は離脱した時にノードプロトコル２１０に通知する発見プロトコル２０６を介して。ノードがシステム１００に加入した時に、「ポーク交換」が当該ノードによって実行される。
３．ユーザ入力に応答してマニュアルで。
【００８２】
ポーク交換は、ノードについてのネットワークマップを生成する目的で、以下のＲＰＣを定期的に実行することを含む。
１．ポーク要求、ここではノードＡが、ノードＡセルフビュー及びノードＡによってビューされるノードＡに既知の他のノードのリストをノードＢに送信し、これに続いて、ノードＢが、この情報に照らしてノードＢのネットワークマップを更新する。
２．ポーク応答、ここではノードＢが、ノードＢセルフビュー及びノードＢによってビューされるノードＢに既知の他のノードのリストをノードＡに送信し、これに続いて、ノードＡが、この情報に照らしてノードＡのネットワークマップを更新する。
【００８３】
ＲＰＣは、ＴＣＰ／ＨＴＴＰプロトコル２０４上で実行される。
【００８４】
帯域幅使用量を低減するために、ノード情報は、最後に交換されて以降に変更された場合にだけ、ノードＡとＢの間で交換される。
【００８５】
発見プロトコル２０６は、ノードの通信エンドポイントをアドバタイズするが、ノードが通信エンドポイントを使用して到達可能であることを保証しないので、ポーク交換は、ノードがシステム１００に加入したことをノードプロトコル２１０に通知した後に実行される。例えば、エンドポイントは、ファイヤウォールに起因して使用できない可能性がある。発見プロトコル２０６を使用して識別されたノードに対してポーク交換を実行することで、通信エンドポイントが実際に使用可能であるかどうかが確認される。
【００８６】
ノードプロトコル２１０はまた、アドバタイズされたＵＤＰ通信エンドポイントが到達可能であるかどうかを確認することもできるが、但し、図示の実施形態におけるノードプロトコル２１０は、ＵＤＰプロトコル２０２上でポーク交換を実施するものではない。
【００８７】
クラスタ１０８における何れかの所与のノードでは、ネットワークマップは、ノード識別子を、同じクラスタ１０８におけるノードの各々に対する通信エンドポイントに関係付ける。従って、ノードプロトコル２１０と通信するプロトコルスタック２００における他のプロトコルは、当該ノードのノード識別子を使用することによってクラスタ１０８の何れかの他のノードにもメッセージを配信することができる。
【００８８】
メンバーシッププロトコル２１２
メンバーシッププロトコル２１２は、クラスタ１０８の各ノードが、クラスタ１０８におけるノード全てのクラスタメンバーシップ情報を維持するのを保証する役割を担い、ノードがＲＰＣを介してクラスタ１０８に加入及び離脱するのを可能にする。クラスタメンバーシップ情報は、ステータスプロトコル２１８を使用してクラスタ１０８のノード間で共有される。クラスタ１０８における各ノードは、クラスタメンバーシップ情報の固有のバージョンを維持し、ステータスプロトコル２１８からクラスタ１０８における他のノードによって保持されるクラスタメンバーシップ情報を学習する。以下で詳細に説明するように、１つのノード上に格納されて最近更新されたクラスタメンバーシップ情報のバージョンは、クラスタ１０８の他のメンバと未だ同期していない可能性があるので、２つの異なるノードによって保持されるクラスタメンバーシップ情報のバージョンが一致しないことがある。
【００８９】
各ノードでは、クラスタメンバーシップ情報は以下を含む。
１．クラスタ１０８のノード全てのメンバーシップリスト、ここではノードの各々が以下によって表される。
（ａ）システム１００におけるノード全ての間で一意であるノード識別子；
（ｂ）ノードの状態、以下のうちの何れか１つ：
（ｉ）発見：ノードはクラスタ１０８のメンバであるが、ブートされて以降にクラスタ１０８の他のメンバと同期されていない；
（ｉｉ）加入：ノードはクラスタ１０８への加入処理中である；
（ｉｉｉ）同期：ノードは、同期、一貫性、及びステータスプロトコル２１４、２１６、２１８を使用して加入したクラスタ１０８とデータを同期する処理中である；
（ｉｖ）有効：ノードは、クラスタメンバーシップ情報の同期を完了しており、クラスタ１０８の有効ノードである；及び
（ｖ）タイムアウト：ノードが応答しなくなり、もはやクラスタ１０８のアクティブメンバではない（ノードは、ユーザによって取り除かれるまでクラスタ１０８のメンバのままである）；
（ｃ）セッショントークン；
（ｄ）ノードがクラスタ１０８に加入した時のクラスタメンバーシップ情報のバージョン番号；及び
（ｅ）最後に変更された時のクラスタメンバーシップ情報のバージョン番号。
２．クラスタ１０８から取り除かれているノード全てを列挙するグレーブストーンリスト、ここでは各取り除かれたノードは、以下により表される：
（ａ）ノードのノード識別子；及び
（ｂ）ノードが取り除かれた時の当該ノードのクラスタメンバーシップ情報のバージョン。
【００９０】
図示の実施形態において、ノードは常に、少なくとも自己を含むクラスタ１０８のメンバであり、１つのノードのクラスタ１０８は、「シングルトンクラスタ」と呼ばれる。更に、図示の実施形態において、メンバーシップ情報は、上述したようにメンバーシップリスト及びグレーブストーンリストを含み、代替の実施形態（図示せず）では、メンバーシップ情報を異なるように構成することができ、例えば、１つのこのような代替の実施形態において、メンバーシップ情報にはグレーブストーンリストが無く、別のこのような実施形態において、ノードの状態を上述したものとは異なるように記述することができる。
【００９１】
ノードＡが新しいサーバノードとして動作する必要があり、ノードＢを含むクラスタ１０８に加入する必要がある時には、ノードＡはノードＢと通信して以下のことを行う。
１．ノードＡは、ノードＢにクラスタシークレットを送信し、ここで図示の実施形態において、このクラスタシークレットは、ノードＢが別のノードをクラスタ１０８に加入させる前に要求するキーである。クライアント１０２の１つは、クラスタシークレットをノードＡに提供する。ノードＢがクラスタ１０８へのノードＡのアクセスを制御すると、ノードＢは「メンバーシップ制御ノード」として機能する。
２．ノードＡ及びＢはそれぞれのメンバーシップ情報を交換する。ノードＡ及びノードＢのメンバーシップ情報のバージョンは、ノードＡのノード識別子と、ノードＡが加入しているクラスタ１０８のノード全てのノード識別子とを含むよう更新される。
３．ノードＡの状態は、ノードＡがクラスタに加入した時に「加入」に変更される。
４．加入時には、ノードＡの状態は、データがノードＡと今加入したクラスタ１０８との間で交換される時に「同期」に変わる。ノードＢはまた、ステータスプロトコル２１８を使用してクラスタ１０８の他のノード全てに格納されたメンバーシップ情報のバージョンを更新する。ノードＡとノードＡが加入しているクラスタ１０８のメンバの全てに格納されたメンバーシップ情報のバージョンを更新する処理は、これらのノードの全てに格納されたメンバーシップ情報のバージョンの「同期」と呼ばれる。
５．同期が完了した後、ノードＡの状態は有効に変わる。
【００９２】
データ同期層
データ同期層は、異なる順序付け保証及び性能トレードオフによってクラスタにおけるノード間にデータを送信できるようにするプロトコルを含む。データ同期層におけるプロトコルは、トランスポート層及びクラスタサポート層におけるプロトコルを直接使用する。
【００９３】
同期プロトコル２１４
同期プロトコル２１４は、ノードＡがメッセージを送信する順序など、ノードＡが制御することができる順序でメッセージがノードＢに届くように、システム１００においてノードＡからノードＢにメッセージ形式でデータを送信するのに使用される。同期プロトコル２１４を使用してデータを転送するサービスは、専用の高優先順位Ｉ／Ｏサービススレッド上で実行される。
【００９４】
図示の実施形態において、同期プロトコル２１４は、その全てが引用により本明細書に組み入れられる、Ａｇａｒｗａｌ  ＤＡ、ＭｏｓｅｒＬＥ、Ｍｅｌｌｉａｒ−Ｓｍｉｔｈ  ＰＭ、Ｂｕｄｈｉａ  ＲＫ、「トーテムマルチリング順序付け及びトポロジーメンテナンスプロトコル（Ｔｈｅ  Ｔｏｔｅｍ  Ｍｕｌｔｉｐｌｅ−Ｒｉｎｇ  Ｏｒｄｅｒｉｎｇ  ａｎｄ  Ｔｏｐｏｌｏｇｙ  Ｍａｉｎｔｅｎａｎｃｅ  Ｐｒｏｔｏｃｏｌ）」、コンピュータシステムでのＡＣＭトランザクション、９３〜１３２ページ、１９９８年において記載されるように、トーテムプロトコルとして知られる仮想同期の実施構成に基づいている。同期プロトコル２１４では、ノードは、以下の本明細書において「同期リング」と呼ばれるグループにグループ化され、何れかの同期リング上のノードは、全体的に順序付けられたメッセージを同じリング上の他のノードに送信することができる。同期プロトコル２１４は、以下のようにトーテムプロトコルを修正する。
１．同期プロトコル２１４は、サービス識別子とリング識別子の両方を使用して、同期リングを識別する。サービス識別子は、所与の同期リングの全インスタンスを識別するが、リング識別子は、所与の同期リングの特定のインスタンスを識別する。例えば、ノードが同期リングに加入又は離脱する度に、当該リングのリング識別子が変わることになるが、そのサービス識別子は変わらない。サービス識別子は、ノードが、同じサービス識別子を共有するノードのグループ（すなわち、同じ同期リングに属するノードのグループ）に全体的に順序付けられたメッセージをマルチキャストするのを可能にする。
２．トーテムプロトコルでは、ノードがメッセージを送信していない場合には、ノードによって見出される同期リングは、ノードがメッセージングを開始した時点で収束する最終リング構成を反映していない。同期プロトコル２１４は、ノードが互いにプローブメッセージを送信して、非プローブメッセージの送信の前に同期リングを収束させるようにすることができる。
３．トーテムプロトコルだけにより、順序付けられたメッセージを同期リングの一部を形成する全てのノードに送信することができる。対照的に、同期プロトコル２１４は、システム１００における全ての到達可能なノードにブロードキャストし、宛先ノード識別子のリストを使用してシステム１００において複数のノードの各々にユニキャストし、また、当該ノード識別子を使用してシステム１００において単一ノードにユニキャストするためのインタフェースを提供することによって、同期プロトコル２１４からネットワーク層を取り出すディスパッチモジュールを使用する。ディスパッチモジュールはまた、サービス識別子によるメッセージフィルタリング及びルーティングを使用して、同じＩＰポート上でサービスの多重化に対応する。ノードからの発信メッセージは、マルチキャストでない限り同じサービス識別子を有するノードのサブセットに送信される。
４．同期プロトコル２１４は、フラグメントメッセージ及びユーザペイロードチャンキング及びコアレシングを使用して、約１，５００バイトの最大送信ユニットサイズから発生する問題に対処する。
５．同期プロトコル２１４は、同期リングに加入するためにトーテムプロトコルで使用されるメッセージノードである加入メッセージをノードが使用する方法を修正する。
（ａ）同期リングにおいて動作ノードの現在のセットにおいてノードが最低ノード識別子を有する場合にのみ、加入メッセージがノードによって送信される。
（ｂ）動作セットにおいて最低ノード識別子を持たないノードは、動作セットにおける最低ノード識別子を有するノードに加入メッセージをユニキャストする。
（ｃ）加入メッセージは、サービス識別子を含み、対応する同期リングの一部ではないノードは応答しない。
トーテムプロトコルに対して、これらの修正は、同期リングに加入するためにノードによって使用される集約帯域幅を低減するのを助ける。
６．同期プロトコル２１４は、幾つかの種類のネットワーク間違い設定に起因して、同期リングに加入できないノードを検出しブラックリストに載せる。例えば、他のノードにメッセージを送信できるがメッセージを受信できないノードは、本実施形態における他の全てのメッセージが要請されることに起因して、他のノードにはプローブメッセージしか送信しないように見え、従って、ブラックリストに載せられる。
７．同期プロトコル２１４は、メッセージのペイロード暗号化及び認証確認を実行する。
８．同期プロトコル２１４は、各ノードがトーテムプロトコルで使用されるトークンを保持できる時間を制限し、図示の実施形態において、各ノードは、１５ｍｓの間トークンを保持することができる。
９．同期プロトコル２１４は、ＴＣＰフレンドリー輻輳回避アルゴリズムを実施する。
【００９５】
以下に更に詳細に説明するように、システム１００は、共有ビュー及び協調アプリケーション２２２並びに共有事象及び警報アプリケーション２２４に対する同期プロトコルを使用し、これらのアプリケーション２２２におけるクラスタ１０８のメンバ間で共有されるデータは、非永続的であり、有利には迅速且つ既知の順序で共有される。
【００９６】
一貫性プロトコル２１６
一貫性プロトコル２１６は、クラスタ１０８のノード全てにわたって自動的且つ定期的にデータを共有するのに使用され、一貫性プロトコル２１６を使用して共有されるデータが、最終的にはクラスタ１０８におけるノード全てで同期されるようにする。一貫性プロトコル２１６を使用して共有されるデータの種類は、以下の共有設定アプリケーション２２６及び共有ユーザオブジェクトアプリケーション２２８を説明する段落において詳細に説明する。一貫性プロトコル２１６によって共有されるデータは、ノードの各々のデータベース内に格納され、データベースにおける各エントリは、キーが一意に値を識別し、該キーが互いに独立しているキー値ペアを含む。一貫性プロトコル２１６は、異なるノードが異なるデータベースで実行できる並行修正を解決する間に、ノード全体にわたってデータを同期する。以下で詳細に説明するように、一貫性プロトコル２１６は、最初にデータベースが同期されていないことを通知され、次にどの特定のデータベースエントリが同期されていないかを発見して、第３に、最新で同期され、更に維持されているエントリのバージョンが何であるかを発見することによって、これを達成する。
【００９７】
データベースに対して変更された時点を決定する並行修正を解決するために、クラスタ１０８に加入する各ノードには、当該ノードがデータに対して変更を行った時間を記録して、クラスタ１０８における他のノードによって同じデータに変更が行われる前又は後に変更が行われたかどうかを判定するのに使用されるカジュアリティバージョニング機構が割り当てられる。本実施形態において、ノードの各々は、カジュアリティバージョニング機構としてインターバルツリークロック（ＩＴＣ）を使用する。しかしながら、他の実施形態において、ベクトルクロック及びバージョンベクトルのような他のバージョニング機構を使用することができる。システム１００はまた、ネットワーク時間プロトコルを使用して異なるノード間で同期されるユニバーサル時間クロック（ＵＴＣ）を実装し、２又はそれ以上のノードのＩＴＣが同一である時に変更が行われる順序を決定する。ＩＴＣは、２００８年のＰｒｉｎｃｉ．Ｄｉｓｔｒｉ．Ｓｙｓ．，Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐ．Ｓｃｉ．，ｖｏｌ．５４０１、２５９−２７４ページのＰ．Ａｌｍｅｉｄａ、Ｃ．Ｂａｑｕｅｒｏ、及びＶ．Ｆｏｎｔｅの「インターバルツリークロック：動的システムのための論理的クロック」において詳細に記載されており、この全体が引用により本明細書に組み入れられる。
【００９８】
一貫性プロトコル２１６がノード間で同期するディレクトリは、ブランチに分割され、ブランチの各々は、事象一貫性ドメイン（ＥＣＤ）と呼ばれる。一貫性プロトコル２１６は、他のＥＣＤとは関係なくＥＣＤの各々を同期する。ＥＣＤ内の各データベースエントリは、事象一貫性エントリ（ＥＣＥ）と呼ばれる。各ＥＣＥは、キー、ＥＣＥが修正される時は常に両方が更新されるＩＴＣ及びＵＴＣからのタイムスタンプ、例えばＭｕｒｍｕｒｈａｓｈ関数を使用して生成するＥＣＥのハッシュ値、データ自体、並びにＥＣＥが削除された場合及び削除された時に追加されるグレーブストーンを含む。
【００９９】
ハッシュ値は、２つの異なるノードが同一であるかどうかを判定するために２つの異なるノードでの対応するＥＣＤ及びＥＣＥを比較するのに使用される。２つの対応するＥＣＤが比較された時、これらのＥＣＤに対する「トップレベル」ハッシュが比較される。所与のノードでのＥＣＤに対するトップレベルハッシュは、当該ＥＣＤ内のＥＣＥの全てをハッシュすることによって生成される。トップレベルハッシュが一致した場合、ＥＣＤは同一であるが、一致しなかった場合、一貫性プロトコル２１６は、ＥＣＤが異なるものと判定する。ＥＣＤのどの特定のＥＣＥが異なるかを判定するために、ノードの両方でのＥＣＥの連続して減少する範囲からハッシュが取られる。ハッシュが取られる間隔は、最終的には、２つのノード間で異なるＥＣＥが分離及び識別されるのに十分な程度に小さくなる。例えば、ＥＣＤ間隔のハッシュ値を決定し比較するために、双方向スキップリストを使用することができる。
【０１００】
一貫性プロトコル２１６を使用して通信する２つのノードは、以下のＲＰＣを使用することができる。
１．エントリ設定：エントリ設定は、新しい又は更新されたＥＣＥをノードに送信し、これを適切なＥＣＤに挿入する。
２．エントリ取得：エントリ取得は、キー又はキーの範囲をノードに送信し、これら１又はそれ以上のキーに対応するＥＣＥを戻す。
３．エントリ同期：エントリ同期は、キー又はキーの範囲をノードに送信し、次いで、２つのノードがＥＣＥの連続して減少する範囲のハッシュを比較して、上述したように、どのＥＣＥが２つのノード間で異なるかを判定する。ＥＣＥが異なる場合、ノードはこれらのＥＣＥを統合して、ＩＴＣタイムスタンプを比較することによって同じＥＣＥがノードに格納され、ＩＴＣタイムスタンプが一致した場合には、ノードが、ＥＣＥに関連付けられるＵＴＣタイムスタンプを比較する。これらのタイムスタンプは、ＥＣＥのバージョン情報によって示される最新の修正されたＥＣＥを２つのノードが採用可能にするバージョン情報として機能する。
【０１０１】
ノードがＥＣＥを変更する時には、当該ノードは通常、同期エントリを呼び出して、ＥＣＥが変更されたことをクラスタ１０８における他のノードに通知する。クラスタ１０８におけるノードの幾つかが利用できない（例えば、これらがオフラインである）場合には、同期エントリの代わりにゴシッププロトコル２０８が使用され、オンラインに戻った時に利用できないノードに対してトップレベルハッシュを伝達する。上記のクラスタ１０８におけるゴシッププロトコル２０８を説明する段落において示唆されるように、ノードの各々は、ゴシッププロトコル２０８を使用して、ノード識別子、バージョン情報、及びハートビート状態と共に他のノードに拡散されるトップレベルハッシュを保持する。別のノードがこのハッシュを受信すると、当該別のノードは、受信したトップレベルハッシュをノード固有のトップレベルハッシュと比較する。トップレベルハッシュが同一である場合には、両方のノードのＥＣＥが一致しており、同一でない場合には、ＥＣＥは異なっている。
【０１０２】
ＥＣＥが異なる場合、このことが同期エントリを使用して、又はゴシッププロトコル２０８を使用して判定されるかに関わらず、同期エントリを実行するノード又はトップレベルハッシュを受信するノードは、ＥＣＥを同期する。
【０１０３】
ステータスプロトコル２１８
上述したように、ゴシッププロトコル２０８は、クラスタ１０８全体にわたって、クラスタ１０８におけるノードに対するステータスエンティティ識別子とそれらのバージョン番号（「ステータスエンティティペア」）を共有する。例示的なステータスエンティティ識別子は、例えば、ノードがどのくらいのストレージを利用できるか、どのデバイス（非ノードカメラ１１４など）が当該ノードに接続されているか、どのクライアント１０２が当該ノードに接続されているか、及びクラスタメンバーシップ情報のような、ステータスエントリの形式のステータスデータの異なる種類を表す。ノードの１つが、ゴシッププロトコル２０８を介してこのデータを受信すると、このノードは、ステータスエンティティペアのバージョン番号を、ローカルに格納している対応するステータスエントリのバージョン番号と比較する。バージョン番号が異なる場合、ステータスプロトコル２１８は、ステータスエンティティペアが発生するノードとのＲＰＣ（「同期ＲＰＣ」）を開始して、対応するステータスエントリを更新する。
【０１０４】
ステータスプロトコル２１８を使用して同期されたステータスエントリは、経路及びノード識別子の双方によって一意的に識別される。一貫性プロトコル２１６を使用して同期されるデータとは異なり、ステータスエントリが記述するノードは、ステータスエントリ又はステータスエンティティペアを修正することが許された唯一のノードである。従って、一貫性プロトコル２１６を使用して同期されるＥＣＤ及びＥＣＥとは異なり、ノードＡにローカルに格納されたノードＡのステータスエントリのバージョンは常に、当該ステータスエントリの最新バージョンである。
【０１０５】
ノードＡが複数のステータスエントリを同時に修正する場合、ステータスプロトコル２１８は、ノードＢが同期ＲＰＣを呼び出したときに、修正されたステータスエントリの全てを同時にノードＢに同期する。従って、同時に変更されたエントリは、分析のためにノードＢに同時に送信されることになるので、互いに依存する可能性がある。対照的に、一貫性プロトコル２１６を使用して同期されたＥＣＥの各々は、他のＥＣＥとは独立して同期され、よって、ノードＢが何れかの特定の順序でエントリを受信することに頼ることができないので、ＥＣＥは、互いに依存することはできない。
【０１０６】
適用
システム１００におけるノードの各々は、上述したプロトコル群２００を実装したサービスを実行する。図示の実施形態では、１つのサービスがプロトコル２０２−２１８の各々に使用されており、他の実施形態（図示せず）では、より多い又はより少ないサービスを用いてプロトコル群２００を実装することができる。ノードの各々は、プロトコル群２００自体を実装し、この結果、システム１００は分散され、何れかの単一のノードの故障に対して脆弱ではなくなり、このことは、中央サーバを使用する従来の物理的なセキュリティシステムとは対照的である。例えば、ノードの１つがシステム１００において故障した場合（「故障ノード」）、残りのノードの各々ではステータスプロトコル２１８を実行するサービス（「ステータスサービス」）は、故障ノードのハートビート状態を監視することによって故障ノードがオフラインであることを判定して、他のノードの各々でノード及びメンバーシッププロトコル２１０、２１２を実行するサービス（「ノードサービス」及び「メンバーシップサービス」それぞれ）にこの故障を伝達する。同期及び一貫性プロトコル２１４、２１６（「同期サービス」及び「一貫性サービス」それぞれ）を実装する各ノードのサービスは、その後、故障ノードがオンラインに戻りそのクラスタ１０８に再加入するまで、故障ノードとのデータの共有を停止する。
【０１０７】
以下は、システム１００が実施することができる様々なアプリケーション２２０〜２３０について説明している。アプリケーション２２０〜２３０は、図８に示したデータを共有するための例示的な方法８００の様々な実施形態として実施することができる。方法８００は、ブロック８０２で始まり、ブロック８０４に進んで、ここでシステム１００における第１ノードが、システム１００における別のノードを識別するノード識別子にアクセスする。第１及び第２ノードの双方は、同じサーバクラスタ１０８のメンバである。第１ノードがアクセスするノード識別子は、クラスタ１０８のメンバの全てを識別するクラスタメンバーシップ情報の一部である。クラスタメンバーシップ情報は、クラスタ１０８のメンバ全てによってアクセス可能である。図示の実施形態において、クラスタ１０８のメンバの各々は、固有のバージョンのクラスタメンバーシップ情報を永続的且つローカルに格納するが、他の実施形態（図示せず）では、クラスタメンバーシップ情報は、ノードからリモート及び中央拠点の一方又は両方で格納することができる。第２ノードに対するノード識別子にアクセスした後、ブロック８０６において、第１ノードがデータを第２ノードに送信し、続いてブロック８０８において、方法８００が終了する。例えば、上述のノードサービスを使用した時に、第１ノード上で実行される同期及び一貫性サービスは、第２ノードのノード識別子を使用することによって、及び第２ノードの通信エンドポイントを当該ノード識別子に関連付ける責務をノードサービスに委ねることによって、データを第２ノードに送信することができる。ブロック８０６において第１ノードからのデータを第２ノードに送信するステップは、データがゴシッププロトコル２０８に従って交換される時のような双方向データ交換の一部を含むことができる。
【０１０８】
共有設定アプリケーション２２６及び共有ユーザオブジェクトアプリケーション２２８
システム１００の動作中、永続的に格納される情報は、クラスタ１０８のノード間で転送される。共有設定及び共有ユーザオブジェクトアプリケーション２２６、２２８がノード間で共有するこのリアルタイム情報の実施例は、起動警報のようなシステム事象に応じて実施される規則のような共有設定、及びユーザ名、パスワード、及びテーマのようなユーザオブジェクトである。この種類のデータ（「一貫性データ」）は、一貫性プロトコル２１６を使用してノード間で共有され、一般的には、一貫性データは、リアルタイムで又は全順序付けで共有する必要はなく、ノードの各々によって永続的に格納されるデータである。しかしながら、代替の実施形態（図示せず）では、一貫性データは非永続的に格納することができる。
【０１０９】
図３は、ユーザ設定の形式の一貫性データが第１ユーザ３０２ａ及び第２ユーザ３０２ｂ（総称して「ユーザ３０２」）の間で共有されるＵＭＬシーケンス図３００を示す。ユーザ３０２、第１及び第２クライアント１０２ａ、ｂ、並びに第１及び第２サーバ１０４ａ、ｂ（この実施例では、第１及び第２ノードである）は、図３００におけるオブジェクトである。サーバ１０４ａ、ｂは同じクラスタ１０８ａの一部を形成する。クライアント１０２ａ、ｂが通信する相手となるサーバ１０４ａ、ｂが、互いに直接接続されていないので、２つのサーバ１０４ａ、ｂ間及びひいては２つのユーザ３０２間でデータを転送するために、一貫性プロトコル２１６を使用する。図示の実施形態は、共有設定を記載しているが、代替の実施形態（図示せず）では、ユーザ３０２は、同様にユーザオブジェクトを共有することができる。
【０１１０】
図３００は、２つのフレーム３３２ａ、ｂを有する。第１フレーム３３２ａでは、第１ユーザ３０２ａは、設定パネルを開く（メッセージ３０４）よう第１クライアント１０２ａに命令し、続いて、クライアント１０２ａが設定オープンビュー（）手順を実行して（メッセージ３０６）、設定を第１サーバ１０４ａに転送する。同時に、第２ユーザ３０２ｂは、同様に第２クライアント１０２ｂに命令する（メッセージ３０８及び３１０）。第２フレーム３３２ｂでは、ユーザ３０２は、これらの設定を同時に編集する。第１ユーザ３０２ａは、第１クライアント１０２ａにＵＩ編集設定（）（メッセージ３１２）を実行させることによってその設定を編集し、これに次いで、第１クライアント１０２ａが、第１サーバ１０４ａに設定更新ビュー（）（メッセージ３１４）を実行させることによって第１サーバ１０４ａ上に格納された設定を更新する。次に、第１サーバ１０４ａは、一貫性設定エントリ（）を実行して（メッセージ３１６）、設定エントリ手順を実行し、第１ユーザ３０２ａによって入力された設定を第２サーバ１０４ｂに転送する。次いで、第２サーバ１０４ｂは、設定通知ビュー更新（）を呼び出す（メッセージ３１８）ことによって第２クライアント１０２ｂに転送された設定を送信し、続いて、第２クライアント１０２ｂが第２ユーザ３０２ｂを更新する（メッセージ３２０）。同時に、第２ユーザ３０２ｂは、同様に設定を修正して、一貫性プロトコル２１６を使用してこれらの設定を第１サーバ１０４ａに送信する（メッセージ３２２、３２４、３２６、３２８、及び３３０）。サーバ１０４ａ、ｂの各々は、サーバ１０４ａ、ｂの何れかがリブートした場合にサーバ１０４ａ、ｂ間でユーザ設定を再同期する必要がないように、ユーザ設定を永続的に格納する。
【０１１１】
共有事象及び警報アプリケーション２２４
システム１００の動作中、ランタイム中に生成されたリアルタイム情報は、クラスタ１０８のノード間で転送される。共有事象及び警報アプリケーション２２４がノード間で共有するこのリアルタイム情報の実施例は、警報状態（すなわち、警報がシステム２００のどこかで起動されているかどうか）、検出されている動き、デバイス（ノードカメラ１０６のうちの１つなど）がデジタルデータをシステム１００の残りの部分に送信しているかどうか、デバイス（動き検出器など）がシステム１００に接続されているかどうか、デバイスが現在記録中であるかどうか、警報が発生したか又はユーザ３０２によって肯定応答されているかどうか、ユーザ３０２の１人がシステム１００に対して監査を実行しているかどうか、サーバ１０４の１つがエラーを生じているかどうか、システムに接続されたデバイスがエラーを生じているかどうか、販売時点情報管理テキストトランザクションが発生したかどうかのようなシステム事象、及び設定／データが変更されたかどうか、現在の記録状態、タイムラインが更新されているかどうか、及びデータベース問い合わせ結果などのサーバノードからクライアントへの通知である。本実施形態において、同期プロトコル２１４を使用してノード間で転送されたデータは、「同期データ」と呼ばれ、ランタイムで生成され、ノードによって永続的にセーブされない。
【０１１２】
図４は、警報通知が同期プロトコル２１４を使用してサーバ１０４間で共有されるＵＭＬシーケンス図４００を示す。図４００におけるオブジェクトは、非ノードカメラ１１４の１つ、第１クラスタ１０８ａにおける３つのサーバ１０４、及び第１クラスタ１０８ａにおけるサーバの１つ１０４ｃに接続されている第２クライアント１０２ｂである。
【０１１３】
図４００の最初の３つのフレーム４０２にて、サーバ１０４の各々は、「サーバ状態」と名付けられた同期リングに加入して、サーバ１０４の何れか１つの状態を他のサーバ１０４の何れかに伝達することができ、図示の実施形態では、伝達されることになる状態は「警報状態起動」であり、これは、サーバ１０８の１つに関する警報が、非ノードカメラ１１４が検出した事象によって起動されたことを意味する。フレーム４０４において、第２サーバ１０４ｂは、警報アプリケーションに対する「マスタ」に選ばれ、これは、非ノードカメラ１１４からの入力が警報状態起動状態への遷移条件を満足するかどうかを判定し、また、警報状態起動状態への遷移のためのメッセージもまた同期リングにおける他のサーバ１０４ａ、ｃに送信するのが第２サーバ１０４ｂであることを意味する。
【０１１４】
第２ユーザ３０２ｂは、サーバ１０４がサーバ状態同期リングに加入した後に、第３サーバ１０４ｃにログインする（メッセージ４０６）。ユーザ３０２ｂがログインした後、第３サーバ１０４ｃは、「クライアント通知」と名付けられた別の同期リングに加入し、以下で更に詳細に説明するように、このリングを使用して、ユーザ３０２ｂにシステム状態を伝達し、他方、サーバ１０４間でのみ通信するのにサーバ状態同期リングを使用する。非ノードカメラ１１４は、ドア又は窓が開いているという通知などのデジタル入力を第１サーバ１０４ａに送信し（メッセージ４１０）、続いて、第１サーバ１０４ａは、このデジタル入力がシステム１００において警報を起動するかどうかを判定するのに使用される規則セットを満足たすかどうかを確認する（メッセージ４１２）。図示の実施形態において、第１サーバ１０４ａが、警報を起動すべきであると判定し、これに応じて警報起動（）を呼び出して（メッセージ４１４）、状態を変更するよう第２サーバ１０４ｂに警告する。次いで、第２サーバ１０４は、状態を警報状態起動に遷移して（メッセージ４１６）、状態を警報状態起動（フレーム４１８）に変更するよう他の２つのサーバ１０４ａ、ｃに対して命令するメッセージをサーバ状態同期リングに送信する。他のサーバ１０４ａ、ｃに命令した後、第２サーバ１０４ｂは、警報起動通知（）を実行して（メッセージ４２０）、これにより第２サーバ１０４ｂがまた、クライアント通知同期リング（フレーム４２２）に加入し、メッセージをクライアント状態同期リングに送って、クライアント状態同期リングの他のサーバである第３サーバ１０４ｃが「警報起動通知」状態に遷移するようにする（フレーム４２４）。第３サーバ１０４ｃがこの状態に変わると、第３サーバ１０４ｃは、警報が起動されたことを第２クライアント１０２ｂに直接通知して、このメッセージを第２ユーザ３０２ｂに中継し、第２ユーザ３０２ｂが警報を肯定応答するのを待機する（メッセージ４２６）。第２ユーザ３０２ｂが警報を肯定応答すると、第２サーバ１０４ｂは、これに応じて状態を「警報状態肯定応答」に変更し（メッセージ４２８）、次いで、メッセージをサーバ状態同期リングに送信して、他の２つのサーバ１０４ａ、ｃがこれに応じて同様に状態を変更する（フレーム４３０）ようになる。続いて、第２サーバ１０４ｂは、状態を「警報肯定応答済み通知」に変更し（メッセージ４３２）、メッセージをクライアント通知同期リングを介して第３サーバ１０４ｃに送信し、これに応じて状態を変更させるようにする（フレーム４３４）。次に、第３サーバ１０４ｃは、システム１００が警報に肯定応答したことをクライアント１０２ｃに通知して（メッセージ４３６）、このメッセージを第２ユーザ３０２ｂに中継する（メッセージ４３８）。
【０１１５】
第２サーバ１０４ｂが障害を起こし、同期リングのマスタとして動作できない代替の実施形態（図示せず）では、システム１００が、サーバ１０４から別のサーバを自動的に選んで、リングのマスタとして動作させる。同期リングのマスタは、同期リングがノード間で警報通知を共有するのに使用される時にリング上の他のノードの全てに状態を変更させることが可能な唯一のサーバ１０４である。
【０１１６】
図７は、図４の概略図４００に従って警報状態を肯定応答する時にユーザ３０２に提示される例示的な図７００を示している。図７００は、非ノードカメラ１１４からのリアルタイムストリーミングビデオを示すビデオパネル７０２ａ−ｃ（総称して「パネル７０２」）と、非ノードカメラ１１４が記録しているものの結果として警報が起動されたことを示す警報７０４と、起動された警報を肯定応答するために第２ユーザ３０２ｂがクリックする肯定応答ボタン７０６と、を含む。
【０１１７】
共有ビュー及び協調アプリケーション２２２
システム１００のユーザ３０２はまた、互いのビュー７００を共有し、ビュー７００を共有している間、システム１００上で互いにメッセージを送信し互いと通信を行うことなどによって協調する必要がある可能性がある。従って、この共有ビュー及び協調アプリケーション２２２は、ユーザ３０２が、ユーザメッセージ及び共有要求など、ビュー状態及びサーバとクライアント間の通知のようなデータを共有することを可能にする。この種類のデータは、リアルタイムで共有される同期データである。
【０１１８】
図５は、同期プロトコル２１４を使用してビュー７００がユーザ３０２間で共有されるＵＭＬシーケンス図５００を示す。図５００は、６つのオブジェクト、すなわち、第１及び第２ユーザ３０２ａ、ｂ、第１及び第２ユーザ３０２ａ、ｂがそれぞれに接続される第１及び第２クライアント１０２ａ、ｂ、並びに第１及び第２クライアント１０２ａ、ｂがそれぞれ接続される第１及び第２サーバ１０４ａ、ｂを含む。
【０１１９】
第１ユーザ３０２ａは、第１クライアント１０２ａを介して第１サーバ１０４ａにログインして（メッセージ５０２）、続いて第１サーバ１０４ａがクライアント通知同期リングに加入する（フレーム５０４）。同様に、第２ユーザ３０２ｂが第２クライアント１０２ｂを介して第２サーバ１０４ｂにログインし（メッセージ５０６）、続いて第２サーバ１０４ｂもクライアント通知同期リングに加入する（フレーム５０８）。
【０１２０】
次いで、第１ユーザ３０２ａは、第１ユーザ３０２ａがビュー７００を共有したい旨を第１クライアント１０２ａに知らせる。第１ユーザ３０２ａは、共有ボタンをクリックすることによってこれを行い（メッセージ５１０）、これにより第１クライアント１０２ａが、第１サーバ１０４ａ上で共有されるビュー７００（「共有ビュー７００」）を開くようにする（メッセージ５１２）。第１サーバ１０４ａは、共有ビューセッションを作成し（メッセージ５１４）、次に、セッション識別子を第１クライアント１０２ａに送信する（メッセージ５１６）。
【０１２１】
１つのフレーム５１８にて、クライアント１０２の各々は、共有ビュー７００を共有するのを可能にする同期リングに加入する。第１サーバ１０４ａは、フレーム５２０にて共有ビュー１同期リングに加入する。同時に、第１クライアント１０６ａは、第１サーバ１０４ａにユーザリスト及びセッション識別子を送ることによって第１ユーザ３０２ａのビュー７００を共有できることを同期プロトコル２１４を介して他のサーバ１０４ｂに知らせるように、第１サーバ１０４ａに命令する（メッセージ５２２）。第１サーバ１０４ａは、メッセージをクライアント通知同期リングを介して第２サーバ１０４ｂに送信することによってこれを行い、第２サーバ１０４を通知ビューセッション状態に変更させる（フレーム５２４）ようにする。通知ビューセッション状態では、第２サーバ１０４ｂにより、第２クライアント１６ｂが第１ユーザ３０２ａのビュー７００を共有するよう第２ユーザ３０２ｂに指示（メッセージ５２６及び５２８）し、第２ユーザ３０２ｂの肯定応答が第２サーバ１０４に中継される（メッセージ５３０及び５３２）。続いて、第２サーバ１０４ｂは、第１ユーザ３０２ａのビュー７００を共有するのに使用される共有ビュー１同期リングに加入する（フレーム５３４）。
【０１２２】
第２フレーム５１９において、ユーザ１０６は各々、共有ビュー７００を更新し、この更新が、互いに自動的に共有される。第１ユーザ３０２ａは、共有ビュー７００の第１パネル７０２ａにズームインして（メッセージ５３６）、第１クライアント１０２ａは、第１ユーザ３０２ａが第１パネル７０２ａにどのようにズームインしたかを第１サーバ１０４ａに中継する（メッセージ５３８）。第１サーバ１０４ａは、共有ビュー１同期リングに沿ってズーム詳細事項を送ることにより、このズーム詳細事項を第２サーバ１０４ｂと共有する（フレーム５４０）。これに応じて、第２サーバ１０４ｂは、第２クライアント１０６ｂ上に表示される共有ビュー７００を更新して（メッセージ５４２）、更新された共有ビュー７００が、第２ユーザ３０２ｂに表示される（メッセージ５４４）。同時に、第２ユーザ３０２ｂは、共有ビュー７００において第２パネル７０２ｂをパンして（メッセージ５４６）、第２クライアント１０２ｂは、第２ユーザ３０２ｂがこのパネル７０２ｂをどのようにパンしたかを第２サーバ１０４ｂに中継する（メッセージ５４８）。次に、第２サーバ１０４ｂは、共有ビュー１同期リングを使用してパン詳細事項を送ることによって、このパン詳細事項を第１サーバ１０４ａと共有する（フレーム５５０）。これに応じて、第１サーバ１０４ａは、第１クライアント１０６ｂ上に表示される共有ビュー７００を更新して（メッセージ５５２）、次いで、更新された共有ビュー７００が第１ユーザ３０２ａに表示される（メッセージ５５６）。
【０１２３】
第２フレーム５１９の後、第１ユーザ３０２ａは、そのビュー７００を閉じて（メッセージ５５６）、第１サーバ１０４ａに中継される（メッセージ５５８）。この結果、第１サーバ１０４ａは、共有ビュー１同期リングをから離れる（メッセージ及びフレーム５６０）。第２ユーザ３０２ｂは、同様に、そのビュー７００を閉じて、これにより第２サーバ１０４ｂが共有ビュー１同期リングから離れるようになる（メッセージ５６２及び５６４、及びメッセージ及びフレーム５６６）。
【０１２４】
図５の実施例では、ユーザ３０２が共有ビュー７００をパン及びズームする。代替の実施形態（図示せず）では、ユーザ３０２は、他の方法で共有ビュー７００を修正することができる。例えば、ユーザ３０２は各々、パネル７０２のレイアウトを変更すること、ビデオが生で又は再生モード（この場合、ユーザ３０２はまた、ビデオを一時停止、再生、又は進めることができる）で表示されるかどうかを選択すること、及び改訂履歴のようなユーザオブジェクトに関する情報と共に、マップ又はウェブページのようなユーザオブジェクトを表示することができる。これらの代替の実施形態において、同期リングを使用して同期される追加の状態情報の実施例は、ビデオが、再生、一時停止、又は進められているかどうか、並びにユーザオブジェクトの改訂履歴を含む。
【０１２５】
上記の説明は、図１のピアツーピア物理的セキュリティシステム１００における共有ビュー及び協調アプリケーション２２２の実施構成に焦点を当てたが、より一般的には、このアプリケーション２２２は、中央ゲートウェイサーバを含む連合システムのような複数のサーバ１０４を有する物理的セキュリティシステムにおいて実施することができる。このより一般的な実施形態の実施例が図１２に示され、複数のサーバノードを含む物理的セキュリティシステムを使用してビューを共有するための例示的な方法１２００を示している。方法１２００は、ブロック１２０２で始まってブロック１２０４に進み、ここで、第１クライアント（第１クライアント１０２ａなど）によって表示されたビュー（共有されることになるビューである）を表すビュー状態データが、第１クライアントから第１サーバノード（メッセージ５３８を介して送信される第１サーバ１０４ａ及びビュー状態データなど）に送信される。ブロック１２０６において、ビュー状態データが第１サーバノードから第２クライアント（第２クライアント１０２ｂなど）に第２サーバノード（第２サーバ１０４ｂ及びフレーム５４０及びメッセージ５４２を介して送信されるビュー状態データなど）を介して中継される。次いで、ブロック１２０８において、第２クライアントは、ビュー状態データを使用してディスプレイを更新して、共有ビューを（メッセージ５４４などを介して）表示する。第２クライアントにてユーザとの対話から生じる変更など、第２クライアントでの共有ビューの変更に応答して（メッセージ５４６などを介して）、ブロック１２１０において、更新されたビュー状態データが第２クライアントから第２サーバノードに（メッセージ５４８などを介して）送信される。更新されたビュー状態データは、第２クライアントによって表示された共有ビューを表す。ブロック１２１２において、更新されたビュー状態データは、第２サーバノードから第１クライアントに第１サーバノードを介して送信され（フレーム５５０及びメッセージ５５２などを介して）、次いで、ブロック１２１４において、第１クライアントのディスプレイが更新され、更新されたビュー状態データを使用して第２クライアントにて修正された共有ビューを表示する（メッセージ５５４などを介して）。ブロック１２１６にて、方法１２００は終了する。中央ゲートウェイサーバを使用する連合システムに対応する時のような代替の実施形態において、ビュー状態データの全ては、当該中央サーバを介してルーティングすることができる。
【０１２６】
無人ビュー共有アプリケーション２２５
システム１００のユーザ３０２はまた、ユーザ３０２が直接制御しない（すなわち、ユーザ３０２が他のサーバ１０４を介して制御する）サーバ１０４の１つに直接又は間接的に接続されたディスプレイ上でビューを閲覧し制御できる必要がある（このディスプレイは、「無人ディスプレイ」であり、無人ディスプレイ上のビューは「無人ビュー」である）。例えば、無人ディスプレイは、ユーザ３０２の前方の壁に据え付けて、クラスタ１０８におけるサーバ１０４の１つを介してサーバクラスタ１０８に接続することができ、ユーザ３０２は、クラスタ１０８における他のサーバ１０４を介してサーバクラスタ１０８に接続することができる。図１０に関して以下に説明するように、無人ビュー共有アプリケーション２２５は、ユーザ３０２の誰も無人ビューを制御するサーバ１０４に直接接続されていないにも関わらず、ユーザ３０２が無人ビューを閲覧及び制御するのを可能にする。この機能を可能にするために、サーバ１０４間で交換されるビューデータは、リアルタイムで共有される同期データである。
【０１２７】
図１０は、同期プロトコル２１４を使用して無人ビューが第１ユーザ３０２ａと共有されるＵＭＬシーケンス図１０００を示す。図１０００は、６つのオブジェクト、すなわち、第１ユーザ３０２ａ、第１ユーザ３０２ａが接続され第１ユーザ３０２ａが対話するディスプレイ（「クライアントディスプレイ」）を含む第１クライアント１０２ａ、第１及び第２サーバ１０４ａ、ｂ、第２サーバ１０４ｂ及び無人ディスプレイの双方に接続されたクライアント１０２の無人ディスプレイのようなハードウェア上で実行される監視インスタンス１００４、及び監視インスタンス１００４をセットアップするアドミニストレータ１００２を含む。他の実施形態（図示せず）では、無人ディスプレイは、第２サーバ１０４ｂに直接接続することができ、監視インスタンス１００４は、第２サーバ１０４ｂ上で実行することができる。
【０１２８】
図１０において、アドミニストレータ１００２が監視インスタンス１００４を作成し（メッセージ１００６）、次いで、監視インスタンス１００４が、第２サーバ１０４ｂに自動的にログインする（メッセージ１００８及び１０１０）。監視インスタンス１００４は、第２サーバ１０４上で共有ビューオープン（ビュー状態）を呼び出すことによって、無人ビューを第２サーバ１０４ｂが利用できるようにし、ここでビュー状態は、無人ビューを示すビュー状態データである（メッセージ１０１２）。これに続いて、第２サーバ１０４ｂが共有ビューセッション作成（）を実行することによって、共有ビューセッションを作成し（メッセージ１０１４）、対応するセッション識別子を監視インスタンスに送信する（メッセージ１０１６）。セッション識別子を受信した後、監視インスタンス１００４は、共有ビュー１同期リングに加入し（フレーム１０１８）、この共有ビュー１同期リングを用いて、共有ビュー１同期リングのメンバでもあるクラスタ１０８における他のサーバ１０４との間でビュー状態データを送信する。
【０１２９】
共有ビュー１同期リングに加入した後で、監視インスタンス１０２０は、無人ビューを閲覧及び制御できるという通知をクラスタ１０８における他のサーバ１０４に公開する。監視インスタンス１０２０は、第２サーバ１０４ｂ上でレジスタモニタ（セッションＩＤ）を呼び出すことによってこれを行い（メッセージ１０１８）、これにより、無人ビューに関係するセッション識別子をビューディレクトリに登録させる（フレーム１０２２）。ビューディレクトリは、一貫性プロトコル２１６を使用してクラスタ１０８における他のサーバ１０４と共有される。
【０１３０】
ビューディレクトリがクラスタ１０８における他のサーバ１０４に配布されると、他のサーバ１０４は、ビューディレクトリにアクセスして、どの無人ビューが閲覧及び制御できるかを判定することができる。第１サーバ１０４ａがビューディレクトリを受信した後に、第１ユーザ３０２ａは、第１クライアント１０２ａを介して第１サーバ１０４ａにログインして、これによりクラスタ１０８へのアクセス（メッセージ１０２４）及びビューディレクトリを取得する。第１ユーザ１０２ａは、ＵＩディスプレイモニタ（セッションＩＤ）を呼び出すことによって無人ビューを表示するよう第１クライアント１０２ａに命令し（メッセージ１０２６）、これにより第１クライアント１０２ａは、無人ビューを開くための命令と共に無人ビューのセッション識別子を第１サーバ１０４ａに送信する（メッセージ１０２８）。第１サーバ１０４ａは、第１クライアント１０２ａの命令を肯定応答して（メッセージ１０３０）、次いで、共有ビュー１同期リングに加入（フレーム１０３２）し、無人ディスプレイの現在のビューを記述するビュー状態データを自動的に受信し（メッセージ１０３４）、無人ビューに対する何らかの後続の変更に関して自動的に通知を受けるようにする。
【０１３１】
続いて、第１ユーザ３０２ａは、クライアントディスプレイ上に表示された無人ビューのパネルの１つをパンして（メッセージ１０３６）、第１クライアント１０２ａは、共有ビュー更新（動作＝パン、パネルＩＤ＝２）を呼び出すことによって、パン動作及びパンされる特定のパネルのアイデンティティを第１サーバ１０４ａに中継する（メッセージ１０３８）。第１サーバ１０４ａは、更新されたビュー状態データを、共有ビュー１同期リングのメンバであるサーバ１０４全てに送信して（フレーム１０４０）、サーバ１０４の全てが無人ビューの更新されたバージョンを再生できるようにする。第２サーバ１０４ｂは、この更新されたビュー状態データを受信して、通知共有ビュー更新（動作＝パン、パラメータ、パネルＩＤ＝２）を呼び出すことによってこれを監視インスタンス１００４に中継する（メッセージ１０４２）。監視インスタンス１００４は、無人ディスプレイを更新して、第１ユーザ３０２ａによって修正された無人ビューを表示する（メッセージ１０４４）。
【０１３２】
図１０の実施例では、第１ユーザ３０２ａが、無人ビューのパネルの１つをパンする。代替の実施形態（図示せず）では、第１ユーザ３０２ａは、他の方法で無人ビューを修正することができる。例えば、第１ユーザ３０２ａは、無人ビューのパネルの何れか１つ又はそれ以上のパネルのレイアウトを変更すること、ビデオが生で又は再生モード（この場合、第１ユーザ３０２ａはまた、ビデオを一時停止、再生、又は進めることができる）で表示されるかどうかを選択すること、及び改訂履歴のようなユーザオブジェクトに関する情報と共にマップ又はウェブページのようなユーザオブジェクトを表示することができる。これらの代替の実施形態において、同期リングを使用して同期される付加的な状態情報の実施例は、ビデオが、再生、停止、又は進められているかどうか、並びにユーザオブジェクトの改訂履歴を含む。
【０１３３】
別の代替の実施形態（図示せず）では、無人ビュー共有アプリケーション２２５を使用して、ｎ×ｍの無人ディスプレイのマトリクス配列を含む集約ディスプレイを作成することができる。例えば、ｎ＝ｍ＝２であり、結果として４つの無人ディスプレイが存在する場合、第１ユーザ３０２ａは、無人ディスプレイの４つ全てを同時に制御して、１つの大きな仮想ディスプレイを作成することができる。無人ビューの各々がビデオの１つの四分円になるように単一のビデオを拡大することができ、これによってビデオを４つの無人ディスプレイにわたって拡大及び表示することができる。この実施形態において、無人ディスプレイのための監視インスタンス１００４は、１から４つのサーバ１０４の何れかを介してサーバクラスタ１０８と通信することができる。
【０１３４】
図１０は、第１ユーザ３０２ａだけを示しているが、代替の実施形態（図示せず）では、ユーザ３０２のうちの１よりも多くが、共有ビュー１同期リングに加入することによって無人ビューを閲覧及び制御することができる。無人ディスプレイのｎ×ｍマトリクス配列を含む集約ディスプレイの上記の実施例では、集約ディスプレイは、ユーザ３０２の複数人が同時に見るように部屋に設置することができ、ユーザ３０２の各々は、無人ビューの各々を制御する能力を有している。
【０１３５】
上記の説明は、図１のピアツーピア物理的セキュリティシステム１００における無人ビュー共有アプリケーション２２５の実施構成に焦点を当てているが、より一般的には、このアプリケーション２２５は、中央ゲートウェイサーバを含む連合システムのような複数のサーバ１０４を有する物理的セキュリティシステムにおいて実施することができる。このより一般的な実施形態の実施例が図１１に示されており、図１１は、複数のサーバノードを含む物理的セキュリティシステムにおいて無人ディスプレイと対話するための例示的な方法１１００を示している。本方法は、ブロック１１０２で始まってブロック１１０４に進み、ここで無人ディスプレイと通信する第２サーバノード（第２サーバ１０４ｂなど）が、第１サーバノード（第１サーバ１０４ａなど）に無人ビューを示すビュー状態データを（図１０のフレーム１０２０及び１０３２の同期リングなどを介して）送信する。方法１１００はブロック１１０６に進み、無人ビューの少なくとも一部分が、クライアントディスプレイに表示され（図１０のメッセージ１０３４から生じたクライアントディスプレイの更新など）、これに続いて、方法１１００はブロック１１０８で終了する。中央ゲートウェイサーバを使用する連合システムに対応する時のような代替の実施形態において、ビュー状態データの全ては、当該中央サーバを介してルーティングすることができる。
【０１３６】
クラスタストリームアプリケーション２２０
ユーザ３０２とそのカメラ１０６、１１４の間のポイントツーポイント接続が利用できない場合には、ユーザ３０２の１人はまた、カメラ１０６、１１４のうちの１つからビデオをストリーミングする必要がある可能性があり、クラスタストリームアプリケーション２２０によってこの機能が可能となる。図６は、ビデオが、第１及び第２サーバ１０４ａ、ｂ及び第１クライアント１０２ａを介して非ノードカメラ１１４から第１ユーザ３０２ａにストリーミングされるＵＭＬシーケンス図５００を示す。ＵＭＬ図は、５つのオブジェクト、すなわち、第１ユーザ３０２ａ、第１クライアント１０２ａ、第１及び第２サーバ１０４ａ、ｂ、及び非ノードカメラ１１４を有する。第１クライアント１０２ａは、第１サーバ１０４ａと直接通信できるが、第２サーバ１０４ｂとは直接通信することはできない。しかしながら、第１及び第２サーバ１０４ａ、ｂは、互いに直接通信することができる。加えて、第２サーバ１０４ｂ及び非ノードカメラ１１４は、互いに直接通信でき、第１サーバ１０４ａ及び非ノードカメラ１１４は直接通信できない。
【０１３７】
第２サーバ１０４ｂは、最初に、ビデオが非ノードカメラ１１４から第２サーバ１０４ｂにストリーミングされるように非ノードカメラ１１４とのセッションを確立する。第２サーバ１０４ｂは、最初に、非ノードカメラ１１４とのリアルタイムストリーミングプロトコル（ＲＴＳＰ）セッションをセットアップして（メッセージ６０２及び６０４）、ビデオを送信するよう非ノードカメラ１１４に対し命令する（メッセージ６０６及び６０８）。非ノードカメラ１１４は、続いて、ストリーミングを開始する（メッセージ６１０）。
【０１３８】
第１ユーザ３０２ａは、第１クライアント１０２ａとの接続を確立して（メッセージ６１２）、ストリーミングビデオを表示するウィンドウを開くよう、第１クライアント１０２ａに命令する（メッセージ６１４）。次いで、第１クライアント１０２ａは、ルックアップルート（）を呼び出して、どのサーバ１０４に接続するかを決定し（メッセージ６１６）、第１クライアント１０２ａは第２サーバ１０４ｂに直接接続できないので、第１サーバ１０４ａとのＲＴＳＰ接続をセットアップする（メッセージ６１８）。次に、第１サーバ１０４ｂは、ルックアップルート（）を呼び出して、リアルタイムビデオにアクセスするためにどのノードに接続するかを決定して、第２サーバ１０４ｂと接続すべきであるとを判定する（メッセージ６２０）。次いで、第１サーバ１０４ａは、第２サーバ１０４ｂとのＲＴＳＰ接続をセットアップして（メッセージ６２２）、第２サーバ１０４ｂは、セッション識別子を第１サーバ１０４ａに戻す（メッセージ６２４）。第１サーバ１０４ａは、セッション識別子を第１クライアント１０２ａに中継する（メッセージ６２６）。このセッション識別子を使用して、第１クライアント１０２ａは、ＲＴＳＰビデオの再生を開始するよう第２サーバ１０４ｂに命令し（メッセージ６２８から６３４）、続いて、第２サーバ１０４ｂは、第２サーバ１０４ｂを介して第１ユーザ３０２ａに、次いで第１サーバ１０４ａに、次に第１クライアント１０２ａにビデオをストリーミングする（メッセージ６３６から６４０）。
【０１３９】
図６では、クラスタ１０８におけるサーバ１０４の１つに接続された非ノードカメラ１１４の１つから、同じクラスタ１０８における他のサーバ１０４にビデオをルーティングしているが、代替の実施形態（図示せず）では、クラスタ１０８におけるノードカメラ１０６の１つから同じクラスタ１０８における他のノードカメラ１０６を介してビデオをルーティングすることもできる。
【０１４０】
リブート
本実施形態において、クラスタメンバーシップ情報は、ノードの各々に永続的にローカルに格納される。ノードの１つがリブートした時には、リブートの前にメンバであったクラスタ１０８に自動的に再加入する。これは、図９に示した例示的な方法９００において示されている。ブロック８０６を実行した後、クラスタ１０８におけるノードの１つがリブートする（ブロック９０２）。リブートすると、このノードは、リブートの前にメンバだったクラスタ１０８を識別する永続的に格納されたクラスタメンバーシップ情報にアクセスして（ブロック９０４）、その後、このクラスタ１０８に再加入する（ブロック９０６）した後、ブロック８０８に戻る。リブートに続いて、クラスタ１０８にノードを自動的に再加入することは、サーバの何れか１つ又はそれ以上の再始動に続くシステム１００の回復を助ける点で有利である。ノードの各々が一貫性情報を永続的に格納するので、クラスタ１０８への再加入時には、ノードが最後にクラスタ１０８から離れて以降に変更された一貫性情報だけが再同期され、これによって帯域幅が節減される。
【０１４１】
特定の例示的な実施形態が図示されたが、図示していない代替の実施形態も実施可能である。例えば、図示の実施形態では、ノードカメラ１０６及び非ノードカメラ１１４は互いに区別されるが、代替の実施形態（図示せず）では、単一のカメラをノードカメラ及び非ノードカメラに同時にすることができる。例えば、図１では、第１カメラ１０６ａが、第３クラスタ１０８ｃのメンバであるノードであるが、第１カメラ１０６ａが第５サーバ１０４ａに直接結合されているが、第３クラスタ１０８ｃのクラスタメンバーシップ情報だけを保有する場合、第１カメラ１０６ａは、第５サーバ１０４ｅの観点から非ノードカメラ１１４として同時に動作している間、第３クラスタ１０８ｃのメンバのままになる。
【０１４２】
前述の実施形態において使用されるプロセッサは、例えば、マイクロプロセッサ、マイクロコントローラ、プログラマブル論理コントローラ、フィールドプログラマブルゲートアレイ、又は特定用途向け集積回路とすることができる。コンピュータ可読媒体の実施例は、非一時的であり、ＣＤ−ＲＯＭ及びＤＶＤのようなディスクベースの媒体、ハードドライブ及び他の形式の磁気ディスク記憶装置のような磁気媒体、フラッシュ媒体のような半導体ベースの媒体、ランダムアクセスメモリ、及び読出し専用メモリを含む。
【０１４３】
本明細書で記載される何れかの態様又は実施形態の何れかの部分は、本明細書で記載される何れかの他の態様又は実施形態の何れかの部分と共に実施又は結合できることが意図される。
【０１４４】
便宜上、上記の例示的な実施形態は、様々な相互接続された機能的ブロックとして説明している。しかしながら、これは必須ではなく、これらの機能的ブロックが、曖昧な境界で単一の論理デバイス、プログラム又は動作に等価に集約される場合もある。何れにしても、機能的ブロックは、単独で、又はハードウェア又はソフトウェアの他の要素と組み合わせて実施することができる。
【０１４５】
上記では、特定の実施形態を説明してきたが、代替の実施形態が可能であり本明細書に含まれるものとする点を理解されたい。図示していない前述の実施形態の修正及び調整が可能であることは、当業者には明らかであろう。
【符号の説明】
【０１４６】
１００  監視システム
１０２ａ  １０２ｂ  １０２ｃ  クライアント
１０４ａ  １０４ｂ  １０４ｃ  １０４ｄ  １０４ｅ  １０４ｆ  サーバ
１０６ａ  １０６ｂ  １０６ｃ  ノードカメラ
１０８ａ  １０８ｂ  １０８ｃ  クラスタ
１１０  プロセッサ
１１２  メモリ
１１４  非ノードカメラ
【図１】
0006500289.tif 000004
【図２】
0006500289.tif 000005
【図３】
0006500289.tif 000006
【図４】
0006500289.tif 000007
【図５】
0006500289.tif 000008
【図６】
0006500289.tif 000009
【図７】
0006500289.tif 000010
【図８】
0006500289.tif 000011
【図９】
0006500289.tif 000012
【図１０】
0006500289.tif 000013
【図１１】
0006500289.tif 000014
【図１２】
0006500289.tif 000015