本発明並びにその特徴及び利点のより完全な理解のために、添付の図面とともに、以下の記載を参照されたい。
図1は、分散型コンピュータシステム100の実施例である。一実施形態において、分散型コンピュータシステム100は、1以上のインタラクティブ型クライアント−サーバ・アプリケーションの並列クローリングのためのサービスを提供するよう構成されてよい。一実施形態において、そのようなインタラクティブ型クライアント−サーバ・アプリケーションは、ウェブアプリケーション104を有してよい。かかるウェブアプリケーション104は、動的ウェブアプリケーションを有してよい。ウェブアプリケーション104は、それらの動作及び範囲を決定するようクロールされると、その後に試験されてよい。
分散型コンピュータシステム100は、複数のネットワーク・コンピュータリソースを含む何らかの分散コンピュータ環境106を有してよい。そのようなコンピュータリソースは異機種環境にあってよい。様々な実施形態において、コンピュータリソースの接続トポロジは未知であっても、又は変則的であってもよく、そのため、分散型コンピュータシステム100で実施されるサービスは、間近で計算タスクを実行するために特定のトポロジを利用することができない。
一実施形態において、分散型コンピュータシステム100は、クラウドコンピュータフレームワーク又は環境において実施されてよい。分散型コンピュータシステム100は、1又はそれ以上のコンピュータノードによって実施されてよい。そのようなコンピュータノードの1つは、マスタノード110として指定されてよく、他のコンピュータノードは、ワーカノード112として指定されてよい。ワーカノード112及び/又はマスタノード110は、如何なる適切な電子装置(サーバ、コンピュータ、又は、それらのあらゆる集合体を含むがこれに限定されるものではない。)においても実施されてよい。ワーカノード112及びマスタノード110は、メモリに結合されているプロセッサと、命令とを含んでよい。命令は、プロセッサによる実行のためにメモリにおいて読み込まれる場合に、ここで記載される機能を実行してよい。ワーカノード112及びマスタノード110は、例えばネットワーク配置を通じて、互いに通信上結合されてよい。ネットワーク配置は、異機種又は同機種環境にあってよく、且つ、分散コンピュータ環境106によって提供されてよい。如何なる適切なネットワーク配置も、ワーカノード112及びマスタノード110を通信上結合するために使用されてよい。分散型コンピュータシステム100のワーカノード112及びマスタノード110は、ワイドエリアネットワーク、ローカルエリアネットワーク、インターネット、イントラネット、又はそれらの何らかの組み合わせ等の如何なる適切なネットワークにおいてもネットワーク接続されてよい。
ワーカノード112及びマスタノード110は、並列に遂行されるべきタスクに付随する計算負荷を共有するよう構成されてよい。例えば、ワーカノード112は、1又はそれ以上のウェブアプリケーション104を試験するよう並列に動作してよい。そのようなウェブアプリケーションは、1又はそれ以上のウェブサイトにおいて動作しているか、あるいは、1又はそれ以上のウェブサイトによってホスティングされてよい。そのような試験を成し遂げるよう、ワーカノード112及び/又はマスタノード110は、ウェブアプリケーション104へ通信上結合されてよい。マスタノード110は、ウェブアプリケーション104へ通信上結合され、ウェブアプリケーション104を試験するように他のワーカノード112の動作を体系付けるよう構成されてよい。
1又はそれ以上の動的ウェブアプリケーション104を試験する部分として、ワーカノード112及びマスタノード110は、ウェブアプリケーションクローリングサービスを稼動してよい。例えば、ウェブアプリケーション104の開発者は、ウェブアプリケーション104を試験下に置くことがあり、分散型コンピュータシステム100のワーカノード112及び/又はマスタノード110は、動的ウェブアプリケーション104を試験して、かかる試験において使用されうるそれらの有効範囲及び動作を決定してよい。そのようなウェブアプリケーションには、AJAX、Flash、又は豊かで、動的で且つインタラクティブなユーザ経験を提供するよう構成される他の技術等の技術を用いるウェブ2.0アプリケーションがある。そのような動的ウェブアプリケーションは、無限数の動的に生成される画面のステートフルな挙動及び可能性を有しうる。かかる挙動は、所与の生成される画面又はウェブページが、コンテンツ又は動作において、画面又はウェブページの読込、操作、又は生成をもたらした特定の動作に依存しうる点で、ステートフルである。
分散型コンピュータシステム100は、ワーカノード112及びマスタノード110の夫々で実行されるミドルウェアを有してよい。かかるミドルウェアは、マスタノード110をワーカノード112の夫々とインターフェース接続するソフトウェアとして実施されてよい。ミドルウェアは、計算タスクの並列化を可能にするよう構成されてよい。ワーカノード112とマスタノード110との間の通信は、時間又はネットワーク又は処理リソースに関して、非常に高価でありうる。従って、分散型コンピュータシステム100のミドルウェアは、ワーカノード112とマスタノード110との間の通信を最小限に抑える可能性がある。
分散型コンピュータシステム100の計算リソースは、動的ウェブアプリケーション104のクローリングによって活用されるよう構成されてよい。分散型コンピュータシステム100は、複数の計算ノードに対するクローリングを並列化し且つ分配するよう構成されてよい。結果として、クローリングは並列化を引き起こすべきである。分散型コンピュータシステム100は、技術又はアーキテクチャから独立した態様においてクローリングの並列化を行うよう構成されてよい。幾つかの実施形態では、分散型コンピュータシステム100のノードは任意の接続技術を有してよく、この接続技術は、動的ウェブアプリケーション104の並列クローリングのためにワーカノード112及び/又はマスタノード110を体系付けるアプリケーションから隠されてよい。分散型コンピュータシステム100は、計算ノードが物理的に互いから離れており、通信費用が高額となる場合に、計算ノード110、112の間の通信を最小限とするよう構成されてよい。ワーカノード112は、状態、遷移、及び新たなジョブを含むクローリングの結果を返すよう構成されてよい。分散型コンピュータシステム100は、メインコンピュータノード110の動作を通じてクラウド又は分散型コンピュータシステム100において様々なワーカノード112からのクローリングの結果を再統合するよう構成されてよい。
図2は、マスタノード110及び1以上のワーカノード112を有する、インタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングのためのアーキテクチャの実施例である。マスタノード110は、ワーカノード112へ通信上結合されてよく、且つ、夫々、1又はそれ以上のウェブアプリケーション104を動的にクロールするようウェブアプリケーション104へ通信上結合されてよい。更なるワーカノードがマスタノード110及びウェブアプリケーション104へ結合されてよいが、図示されない。ワーカノード112及びマスタノード110は、ネットワーク230を通じて通信上結合されてよい。ネットワーク230は、図1の分散コンピュータ環境106のネットワーク又はクラウドにおいて具現されてよい。ワーカノード112は、マスタノード110からの指示の下で他のワーカノードと並列にウェブアプリケーション104をクロールするよう構成されてよい。
マスタノード110は、メモリ206へ結合されているプロセッサ208を有してよい。マスタノード110は、マスタクローラアプリケーション220を有してよい。マスタクローラアプリケーション220は、プロセッサ208によって実行され、且つ、メモリ206内にあるよう構成されてよい。マスタノード110は、マスタクローラアプリケーション220を通じてウェブアプリケーション104及びワーカノード112へ通信上結合されてよい。
マスタノード110は、クロールされるべき係属中のジョブを表すジョブキュー232を有してよい。ジョブは、クロールされるべきウェブアプリケーション104の部分の記述を含んでよい。マスタノード110は、クロールジョブ割当を割り当てられるよう利用可能であるワーカノード112を示すリソースキュー234を有してよい。リソースキュー234及びジョブキュー232の各母集団については以下で論じる。クロールジョブは、ワーカノード112によって調査されるべきウェブアプリケーション104の部分のインジケーションを含んでよい。また、マスタノード110は、マスタ状態グラフ236のコピーを保持してよい。このコピーは、ウェブアプリケーション104の画面遷移グラフモデルのマスタコピーであってよく、且つ、ウェブアプリケーション104のクローリングの結果を含んでよい。
ワーカノード112は、メモリ210へ結合されているプロセッサ212を有してよい。ワーカノード112は、ワーカクローラアプリケーション218を有してよい。ワーカクローラアプリケーション218は、プロセッサ212によって実行され、且つ、メモリ210内にあるよう構成されてよい。ワーカノード112は、ワーカクローラアプリケーション218を通じてウェブアプリケーション104及びマスタクローラアプリケーション220へ通信上結合されてよい。
ノードのプロセッサ208、212は、例えば、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、あるいは、プログラム命令及び/又は処理データを解釈及び/又は実行するよう構成されるその他のデジタル又はアナログ回路を有してよい。プロセッサ208、212は、ワーカノード112及び/又はマスタノード110の夫々のメモリ206、210に記憶されているプログラム命令及び/又は処理データを解釈及び/又は実行してよい。メモリ206、210は、一時期にプログラム命令及び/又はデータを保持するよう構成される如何なるシステム、デバイス、又は装置(例えば、コンピュータ可読媒体)を有してもよい。
マスタノード110及びワーカノード112は、ウェブアプリケーション104をクロールするよう構成されてよい。ウェブアプリケーション104の一部又は全部が、マスタノード110及びワーカノード112によって見られ、実行され又は解析されてよい。夫々のノード218、220は、ウェブアプリケーション104の一部に関連するデータ222、224を有してよい。そのようなデータ222、224は、ウェブアプリケーション104との通信又はウェブアプリケーション104の使用を可能にする情報を含んでよい。例えば、データ222、224は、文書オブジェクトモデル、リソース情報、又はウェブアプリケーションのバージョンを含んでよい。かかるアプリケーションは、ブラウザアプリケーション226、228を有してよく、且つ、ワーカクローラアプリケーション218又はマスタクローラアプリケーション220の一部として実施されてよい。ブラウザアプリケーション226、228は、ウェブアプリケーション104からコンテンツを読み込むための如何なる適切なアプリケーションおいても実施されてよい。ブラウザアプリケーション226、228は、ウェブクライアントとして実施されてよい。代替的に、ブラウザアプリケーション226、228は、ブラウザアプリケーション226がクローラアプリケーション218、220において実施されない場合に、それらと協働するよう構成されてよい。一実施形態において、クローラアプリケーション218、220は、FLA−Spiderを有してよい。クローラアプリケーション218、220は、Java(登録商標)言語において実施されてよい。クローラアプリケーション218、220は、ブラウザアプリケーション226、228と協働してよい。クローラアプリケーション218、220は、ウェブアプリケーション104をナビゲートし、且つ、クリック、マウスオーバー、データ入力、あるいは、ウェブアプリケーション104のユーザの動作をシミュレーション又は再現するその他の操作等の様々な操作をプログラムで実行するよう構成されてよい。クローラアプリケーション218、220は、異なるユーザ入力がウェブアプリケーション104に加えられる場合に、ウェブアプリケーション104の起こり得る動作を調査するよう構成されてよい。
各ノードで実行されるクローラアプリケーション218、220は、ウェブアプリケーション104がクロールされ、試験され且つ使用される場合に、ウェブアプリケーション104の挙動をモデル化する画面遷移グラフを生成するよう構成されてよい。画面遷移モデルの一例は図5に示されている。これについては、以下で更に詳細に論じられる。そのような画面遷移グラフにおいて、ドット又はノードが、ブラウザにおいて観測される画面を表す状態を表現するために使用されてよい。このように、画面遷移グラフは、インタラクティブ型クライアント−サーバ・アプリケーションの状態グラフであってよい。状態間の遷移は、様々な起こり得るユーザ動作を表してよい。例えば、ボタンのクリックは、1つの状態にあるウェブアプリケーションを異なった状態にジャンプさせることができ、このとき、ウェブアプリケーションのために利用可能な操作は変化している。かかる画面遷移モデルを仮定すると、バリデーション・チェックは、所望の動作又は他の診断動作を確認するために、その後に当該モデルに対して実行されてよい。
クローリングアプリケーションによって使用されるクローリング情報は、ワーカクローラアプリケーション218のようなクローリングアプリケーションの各インスタンスへ与えられてよく、それにより、分散型コンピュータシステム100は、試験下のウェブアプリケーション104の並列クローリングを提供することができる。例えば、クロール仕様及び/又はクロールデータは、クローリングアプリケーション218へ与えられてよい。クロール仕様は、ウェブアプリケーション104の形式、ウェブアプリケーション104の期待される挙動、又はウェブアプリケーション104の使用に関するその他の適切な情報を示してよい。クロールデータは、ブラウザ226によって行われる動作、入力されるデータ222、又は行われる動作を示すその他の情報を含んでよい。例えば、クロール仕様によって定義される所与のページに関し、クロールデータは、任意数のマウスオーバーがウェブアプリケーション104の様々な特定の要素に対して行われるべきことを示してよい。
マスタクローラアプリケーション220は、分散型コンピュータシステム100においてワーカノード112及び他のワーカノード112のクローリングを協調させるよう構成されてよい。マスタクローラアプリケーション220は、ワーカクローラアプリケーション218の様々なインスタンスとともに、分散型コンピュータシステム100の上記ミドルウェアとして働くよう構成されてよい。マスタクローラアプリケーション220は、ウェブアプリケーション104のクローリングに関連するマスタノード110の機能の一部又は全てを実行するよう構成されてよい。ワーカクローラアプリケーション218は、ウェブアプリケーション104のクローリングに関連するワーカノード112の機能の一部又は全てを実行するよう構成されてよい。様々な実施形態において、マスタクローラアプリケーション220及びワーカクローラアプリケーション218の機能は、ウェブアプリケーション104のクローリングの要件に依存して様々に分けられてよい。
図3は、分散型コンピュータシステム100内の様々なノードの動作の一例を示す。図3は、インタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングのためのアーキテクチャの動作の実施例を表す。分散型コンピュータシステム100は、ここで記載されるタスクに利用可能であるだけの数のワーカノード112を有してよい。マスタノード110は、ワーカノード112へコマンドを発行してよく、次いで、ワーカノード112は、状態情報を結果とともにマスタノード110へ与えてよい。
マスタノード110は、クロールジョブ割当等のコマンドをワーカノード112へ発行してよく、このとき、リソースキュー234の中の特定のワーカノード112が、ジョブキュー232に由来する特定のジョブを割り当てられる。ワーカノード112は、自身の状態をクローリングの結果とともにマスタノード110へ返送してよい。かかる情報は、ワーカノード112へ割り当てられた様々なクロールジョブの完了状態を含んでよい。また、この情報は、そのようなクロールジョブからの部分的な結果を含んでよい。また、かかる情報は、ワーカノード112によって発見された新たなクロールジョブを含んでよい。ワーカノード112は、ウェブアプリケーション104の状態において未使用の動作を決定することによって、新たなジョブを発見するよう構成されてよい。そのような動作は、代替の動作が代わりに選択されたために、未使用である可能性がある。新たなクロールジョブは、ウェブアプリケーションのクローリングのための開始位置を含んでよく、このとき、クローリングは、以前に使用されていない動作を利用してよい。マスタノード110は、ワーカノード112から受け取った結果をマスタ状態グラフ236にマージするよう構成されてよい。
上述されたように、各ワーカノード112は、クローラアプリケーション及びクロール設定情報の一部又は全てのコピーを有してよい。ワーカノード112は、割り当てられているクローリングタスクを実行し、クローリングの間に発見される新たなクローリングジョブを生成し、クローリング結果及び生成されたジョブをマスタノード110へ返してよい。新たなクローリングジョブは、調査されるべき動的ウェブアプリケーション104の更なる部分又はオプションを含んでよく、ワーカノード112がクローリング活動を行っている最中に発見される。
分散型コンピュータシステム100は、動的ウェブアプリケーションの分散型並列クローリングのための同期スキームを利用するよう構成されてよい。そのようなスキームは、マスタノード110とワーカノード112との間で、マスタ状態グラフ236のような、ウェブアプリケーション104のクローリングの結果に関する情報の同期を可能にする。そのようなスキームの一部として、マスタノード110及びワーカノード112は、マスタ状態グラフ236のような情報を同期させるために、それらのエンティティの間の通信オーバーヘッドを減らすよう構成されてよい。ワーカノード112は、動的ウェブアプリケーションのそれらの部分を独立してクロールし続けるよう構成されてよい。ワーカノード112は、ワーカノード112の観点から見た状態グラフに関する情報を周期的にマスタノード110へ与えるよう構成されてよい。かかる情報は、部分的な状態グラフを含んでよい。各ワーカノード112は、マスタノード110が見た完全なマスタ状態グラフ110を有さなくてもよい。代わりに、各ワーカノード112は、ワーカノード112がウェブアプリケーション104のクローリングの間に発見したウェブアプリケーション104の新たな部分に加えて、ワーカノード112が開始したウェブアプリケーション104の部分を反映する部分的な状態グラフを有してよい。そのような部分的な状態グラフは、新たに発見された状態、遷移、又はジョブ等の情報を含んでよい。部分的な状態グラフは、前の同期が行われて以来発見された情報を含んでよい。ワーカノード112は、周期的に部分的な状態グラフ及び/又は新たに発見されたジョブを送信すること、クローリングジョブの完了時に部分的な状態グラフ及び/又は新たに発見されたジョブを送信すること、あるいは、それらが発見されたときに部分的な状態グラフ及び/又は新たに発見されたジョブを送信することの中から選択してよい。そのような選択は、マスタノード110によって与えられる動作パラメータに基づき行われてよい。更に、ワーカノード112は、かかる状態の組をマスタノード110へ送信する前に、それらを圧縮するよう構成されてよい。
マスタノード110は、異なったワーカノード112の間で観測される作業のあらゆる重複をパージすることに関与してよい。そのような重複は、マスタノード110がワーカノード112から受け取った結果を比較することで、観測されてよく、このとき、その結果には、部分的な状態グラフが含まれてよい。マスタノード110は、様々なワーカノード112から受け取ったデータをマージしながら、ウェブアプリケーション104の動作を示す重複した状態又はトレースを除くよう構成されてよい。マスタノード110は、ジョブキュー232において重複ジョブをパージするよう構成されてよく、このとき、かかるジョブは、既にクロールされた動的ウェブアプリケーション104の部分を表す。また、マスタノード110は、パージ信号をワーカノード112へ送信するよう構成されてよく、このとき、ワーカノード112は、重複としてマスタノード110によって決定されたジョブに対する操作を停止するよう命じられる。かかる重複ジョブは、そのジョブを目下実行中であると思われる他のワーカノード112へ予め割りあてられていたり、あるいは、既に終了していたりすることがある。かかるパージ信号は、ジョブがどのワーカノード112へ割り当てられたかに関してマスタノード110によって保持される記録とともに、そのジョブの有効範囲のインジケーションに基づいてよい。
マスタノード110は、ジョブキュー232の中のジョブをリソースキュー234内のワーカノード112に対してスケジューリングするよう構成されてよい。マスタノード110は、何らかの適切な基準に基づきそのようなスケジューリングを行うよう構成されてよい。一実施形態において、マスタノード110は、先入れ先出しに基づきジョブキュー232の中のジョブをリソースキュー234内のワーカノード112に対してスケジューリングするよう構成されてよい。他の実施形態では、マスタノード110は、ジョブキュー232の中のジョブ及びリソースキュー234内のワーカノード112を、ジョブ又はリソースの間の最良の適合性を決定することによって、選択してよい。そのような実施形態では、適合性は、最良優先に基づき決定されてよい。
最良優先探索を用いると、マスタノード110は、スケジューリングする最良の候補ジョブをジョブキュー232から選択し、それをスケジューリングする最良のリソースをリソースキュー234内の利用可能なリソースの中から選択してよい。最良の候補ジョブの選択は、何らかの適切な要因にも基づいてよい。一実施形態において、ジョブのタイムスタンプは、最良の候補ジョブを選択する際における因子として使用されてよい。そのような実施形態では、先にタイムスタンプを付されたジョブは、より高い優先度を得てよい。他の実施形態では、ジョブの初期化トレースの長さは、最良の候補ジョブを選択する際における因子として使用されてよい。そのような実施形態では、より小さい初期化トレースを有するジョブは、利用可能なリソースに依存して、より低い初期化費用を有し、従って、優先される。
リソースキュー234からの最良の候補リソースの選択は、如何なる適切な要因に基づいてもよい。一実施形態において、リソースの挿入タイムスタンプは、最良の候補リソースを選択する際における因子として使用されてよい。そのような実施形態では、先にタイムスタンプを付されたリソースは、リソースの利用を最小限とするように、より高い優先度を得てよい。他の実施形態では、リソースの計算力が、最良の候補リソースを選択する際における因子として使用されてよい。そのような実施形態では、リソースの計算力は、それを適切な大きさのジョブに適合させるために使用されてよい。更なる他の実施形態では、リソースの通信オーバーヘッドは、最良の候補リソースを選択する際における因子として使用されてよい。そのような実施形態では、情報は、マスタノード110に対するリソースの接続トポロジに関して知られている場合に、マスタノード110とのより効率的な、より短い、又はより速い通信を有するリソースを優先するために使用されてよい。かかる情報は、タスクを完了するワーカノード112の統計結果によって決定されてよい。
最良の候補リソース又は最良の候補ジョブを決定するよう、関数、例えば、上記因子の加重和が、最良の候補を決定するために用いられてよい。そのような加重和は、最良の候補を選択するための費用関数として使用されてよい。そのような場合において、ジョブ及びリソースのタイムスタンプが、ジョブ及びリソースを選択するための唯一の基準として使用される場合に、スキームは、基本キューデータ構造に特有の先入れ先出しメカニズムになり始める。
マスタノード110は、ワーカノード112から受け取ったトレース及び状態をマスタ状態グラフに組み込むよう構成されてよい。ワーカノード112は、完了又はクロールされたウェブアプリケーションの挙動のサブツリー又はトレースを表す完結した計算を提供してよい。また、マスタノード110は、1又はそれ以上のワーカノード112によって決定される新たな計算のインジケーションを受け取ってよい。ワーカノード112からトレース及び状態を受け取ると、マスタノード110は、マスタ状態グラフにおいて既に決定されている情報と比較して、又は他のワーカノード112へ割り当てられているジョブにおける状態と比較して、受け取った状態又はトレースの中に重複があるかどうかを決定するよう確認するよう構成されてよい。そのような重複が削除される場合に、マスタノード110は、ジョブキュー232から重複ジョブをパージするよう構成されてよい。また、マスタノード110は、パージコマンドを発行することによって、ワーカノード112において現在実行されている重複したクロールをパージするよう構成されてよい。また、マスタノード110は、受け取った情報をマスタ状態グラフ内の情報とマージして、重複を除くよう構成されてよい。
図4は、遷移グラフモデル402により、例となるワーカノード112の動作の結果を表す。上述されたように、ワーカノード112は、クローリングアプリケーションのコピーを実行するよう構成されてよい。また、ワーカノード112は、ウェブアプリケーション104が試験されるための適切なクローリング設定を含んでよい。ワーカノード112は、マスタノード110によって提供される部分トレース404によりその動作を初期化するよう構成されてよい。そのような部分トレース404は、ワーカノード112が、マスタ状態グラフ236の完全なコピーによりその動作を初期化することに代わるものであってよい。なお、マスタ状態グラフ236による初期化は、ワーカノード112とマスタノード110との間の通信に関して、より費用がかかる。かかる部分トレース404は、マスタ状態グラフ内の特定の状態(例えば、S0)に達するために、ウェブアプリケーション開始ページ406(例えば、index.jsp)から取られるべき動作の記述を含んでよい。このとき、特定の状態は、マスタノード110によってワーカノード112へ割り当てられたジョブの部分として、ワーカノード112によってクロールされるべきである。ワーカノード112は、異なるブランチ及び動作を試験して他の情報を新たなジョブとして記憶することによって、S0及びその子状態(例えば、S1)からのクローリングを続けるよう構成されてよい。ワーカノード112は、たとえジョブが完了していないとしても、トレースのクローリングが終了するジョブのクローリングにおける点に達してよい。そのような場合について以下に論じる。
他の例では、ワーカノード112がクロールすべき動的ウェブアプリケーション内の特定のページを与えられ、そのようなページで選択されるべきメニュー項目の選択肢を与えられた場合に、ワーカノード112は、メニューにおける最初の選択肢を選択して、動的ウェブアプリケーションのその後の動作を調査し、且つ、残りの選択されていないメニュー選択肢を表す状態又は動作を将来のジョブとして記憶するよう構成されてよい。ワーカノード112は、自身に割り当てられた動的ウェブアプリケーションの部分をクローリングする場合に、遭遇した状態と、そのような状態に達するために取られた動作とを表す局所状態グラフを生成してよい。ワーカノード112は、以前に遭った状態に達した場合にクローリングを終了するよう構成されてよい。そのような状態は、局所状態グラフに存在する状態を含みうる。ワーカノード112は、クローリングが、クローリング仕様によって設定される深さ制限又は時間制限に到った場合にクローリングを終了するよう構成されてよい。例えば、特定の深さに沿って、ワーカノード112が10個の続いて起こる動作の深さに至る場合にワーカノード112はそのクローリングを終了してよい。更に、ワーカノード112は、マスタノード110からパージコマンドを受け取った場合にクローリングを終了するよう構成されてよい。
ワーカノード112は、新たな状態、ウェブアプリケーションにおいて取られる決定経路を表す新たなトレース、及び新たなジョブに関する情報を含む情報をマスタノード110へ周期的に送信するよう構成されてよい。このような送信の周期性は、分散型コンピュータシステム100によって決定される通信及び計算のトレードオフに基づき静的に又は動的に設定されてよい。所与の分散型コンピュータシステムの特定の周期性は、分散型コンピュータシステムのリソース、試験される動的ウェブアプリケーションの性質、他の予期しない要因に依存しうる。特定の又は最適な値の周期性は経験上決定されてよい。終了時に、ワーカノード112は、マスタノード110において利用可能なリソースキュー234に自身を登録するよう構成されてよい。
分散型コンピュータシステム100は、動的ウェブアプリケーションのステートレスな分散型並列クローリングのための技術を利用するよう構成されてよい。一実施形態において、分散型コンピュータシステム100は、クローリングのステートレスな並列化又はステートフルな並列化のいずれかを選択するよう構成されてよい。クローリングのステートフルな並列化は、状態が、マスタ状態グラフと比較される場合に、ワーカノード112から返された結果の中から重複を探すようマスタノード110において比較されるところの、ここで記載されるステップを含んでよい。クローリングのステートレスな並列化は、マスタノード110に、そのような重複を削除させないようにしてよく、結果として得られるマスタ状態グラフは、実行ツリーの下の方で現れる状態が上位で現れる状態の複製でもあることを示さなくてよい。ステートフルな並列化スキームは、基礎を成す状態グラフが有意な状態共有、状態再転換及びサイクルを有する場合に、より有用でありうる。分散型コンピュータシステム100は、所与の動的ウェブアプリケーションの状態グラフにおいてほとんど再転換が存在しない場合に、例えば、状態グラフが概してツリー構造を有する場合に、ステートレスな並列化を使用するよう構成されてよい。ステートレスな並列化が分散型コンピュータシステム100によって用いられる場合に、マスタノード110及びワーカノード112は状態比較を省略してよい。状態比較のそのような省略は、状態グラフのマージを達するのに必要なリソースがより少なくて済むため、マスタノード110の動作を高速化することができる。マスタノード110の必要とされるパージ動作は、ステートレスな並列化の状態に依存して、削除されてよい。同様に、それは、ワーカノード112でのクローリング動作を高速化することができる。更に、ワーカノード112は、ステートレスな並列化を用いる場合に、計算の終わりに1度だけ結果を送信するよう構成されてよい。なお、結果として得られるマスタ状態グラフは、複数の立場で現れる状態を含んでよい。
ワーカノード112は、何らかの適切な手段により自身の動作の状態を新たに発見されたジョブの状態と比較するよう構成されてよい。一実施形態において、ワーカノード112は、動的ウェブアプリケーションの一連のページが前の状態から僅かだが異なる状態を表す場合に、そのような状態比較を用いるよう構成されてよい。例えば、AJAXによるウェブアプリケーションの所与の画面での所与のユーザ動作は、現在の画面のごく一部のみに対する変更又は更新をもたらしうる。従って、このように得られた新たな画面は、前の画面からほんの僅かに、そのコンテンツにおいて異なっている。このように、ワーカノード112は、動的ウェブアプリケーションの一連の状態の文書オブジェクトモデル間の差違のみを記憶するよう構成されてよく、次いで、一連の状態は、マスタノード110へ送信され、夫々の状態の完全な表現を得るようマスタノードによって復元され得る。状態圧縮は、一連の状態間の差違が所与の閾値よりも低い場合に、有効にされてよい。そのような閾値は、動的ウェブアプリケーションの一連の状態の間の相対的又は絶対的な差に関して設定されてよい。ワーカノード112は、目下クロールされている特定の動的ウェブアプリケーションに依存して、状態圧縮を有効及び無効にするよう構成されてよい。
分散型コンピュータシステム100は、如何なる適切な動的ウェブアプリケーションもクロールするよう構成されてよい。図5は、分散型コンピュータシステム100によってクロールされる例となる動的ウェブアプリケーション500の画面遷移グラフである。画面遷移グラフは状態グラフを含んでよい。動的ウェブアプリケーション500は、2つのボタン、すなわち、ボタン1及びボタン2を表示するよう構成されてよい。ボタン1及びボタン2の出現及び該出現に関連する機能は、ユーザからの様々な事前の動作に依存してよい。動的ウェブアプリケーション500が存在する異なった状態は、S1、S2、S3及びS4によって表される。図5の画面遷移グラフは、動的ウェブアプリケーション500の起こり得る状態を完全に表しうる。このように、図5の状態遷移グラフは、動的ウェブアプリケーション500の動的なクローリングの完全な結果であってよい。
動的ウェブアプリケーション500のためのコードは、次のように具現されてよい:
このように、動的ウェブアプリケーション500は、ボタン1の出現を変更するよう構成されてよく、このとき、ボタン1は、最初に“Click Me!”を表示し、クリックされると“I’m Clicked.”を表示するよう設定されてよい。ボタン1は、その後のクリックの際に、それらの値の間で表示を切り替えるよう構成されてよい。ボタン2は、最初に“Click Me Too!”を表示し、クリックされると無効になるよう構成されてよい。これは、図5では、S1によって表されている状態において動作を開始するように表され得る。ボタン1がクリックされた場合には、動的ウェブアプリケーション500は、S2によって表される状態へ遷移してよい。そこでもう一度ボタン1がクリックされた場合には、動的ウェブアプリケーション500はS1へ戻ってよい。代わりにボタン2がクリックされた場合には、動的ウェブアプリケーション500は、代わりに、S3によって表される状態へ遷移してよい。同様に、S1からボタン2をクリックすることは、動的ウェブアプリケーション500を、S4によって表される状態へ遷移させてよい。動的ウェブアプリケーション500は、ボタン1がクリックされた場合に、S3とS4との間で遷移してよい。
分散型コンピュータシステム100によってクロールされるインタラクティブ型クライアント−サーバ・アプリケーションは、取られた事前の動作に依存して様々に動作するよう構成されてよく、これらは異なった状態として表されることがある。動的ウェブアプリケーション500の例において、ボタン2をクリックする能力は、ボタン2が以前にクリックされたかどうかに依存する。そのような動作は、元の状態に戻る手段が存在しないために、繰り返し可能でない。状態S3及びS4は、1度入ると、動的ウェブアプリケーション500を、状態S1及びS2に戻ることができないようにする。他方で、ボタン1の状態は、現在の状態にも依存する一方で、切り替えられてよい。そのようなサイクルは、S1とS2との間の動作において、又はS3とS4との間の動作において存在する。
動作において、図3に戻ると、分散型コンピュータシステム100は、動的ウェブアプリケーションを含むインタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングを協調させるための技術を利用してよい。
マスタノード110は、動的ウェブアプリケーションのクローリングを協調させるのに必要な如何なる適切な動作も取ってよい。一実施形態において、マスタノード110は、係属中のジョブを、そのようなジョブを実行するのを待っているリソースに対してスケジューリングしてよい。他の実施形態では、マスタノード110は、ワーカノード112から受け取った結果をマージしてよい。そのような実施形態では、マスタノード110は、かかる結果を、他のワーカノード112から以前に受け取った結果によりマージしてよい。
一実施形態において、マスタノード110のタスクは、次の擬似コードの一部又は全てを用いて実施されてよい:
上記の擬似コードにおいて、masterSTGは、クロールされるアプリケーションのマスタ画面遷移グラフモデルを表してよい。例えば、図5は、動的ウェブアプリケーション500の完全なマスタ画面遷移グラフを表してよい。そのようなマスタ画面遷移グラフは、マスタ状態グラフ236に記憶されてよい。jobQは、試験下のウェブアプリケーションをクロールする部分として処理されるべき係属中のジョブのキューを表してよい。一実施形態において、jobQは、先入れ先出し(FIFO)キューとして実施されてよい。resourceQは、ジョブを割り当てられるべきワーカノード112のような係属中のリソースのキューを表してよい。一実施形態において、resourceQは、FIFOキューとして動作してよい。
マスタノード110は、クロールされるべき動的ウェブアプリケーションの部分のような係属中のジョブを、ワーカノード112のような待機中のリソースへスケジューリングしてよい。上述されたように、マスタノード110は、エントリがjobQ及びresourceQの両方に存在する間、ジョブキュー232の一番上から第1のジョブを得、resourceQから第1のリソースを得、そして、そのリソースによって行われるようジョブをスケジューリングする。如何なる適切な方法も、jobQ中のジョブ又はresourceQの中のリソースを得るために使用されてよい。
マスタノード110は、ワーカノード112から返されたワーカ結果を、既に生成されたトレースとマージしてよい。マスタノード110と同期する各ワーカノード112は、如何なる適切な情報もマスタノード110へ送信してよい。実施形態において、そのようなワーカノード112は、少なくとも2つのデータ項目、すなわち、ワーカノード112が動的ウェブアプリケーションの一部をクロールしていた間に出くわした新たな組のジョブ(例えば、newJobs)及び圧縮されたトレース(例えば、compTrace)をマスタノード110へ送信してよい。マスタノード110は、それらの情報を、マスタノード110で保持されている情報(例えば、jobQ、resourceQ、及びmasterSTG)にマージしてよい。
係属中のジョブをスケジューリングするのと並行して、マスタノード110は、ワーカノード112が出くわした新たなトレースに関して受け取った情報を、マスタ画面遷移図にマージしてよい。一実施形態において、マスタノード110は、ワーカノード112が出くわした返されたトレースを復元してよい。トレースは、状態及び状態間の遷移を含んでよい。マスタノード110は、返されたトレースで見つけられる状態ごとに、そのような状態がマスタ状態図に存在するかどうかを判断してよい。そのような状態が存在しない場合には、その状態はマスタ状態図に加えられる。返されたトレースにおける遷移ごとに、マスタノード110は、そのような遷移がマスタ状態図に存在するかどうかを判断してよい。そのような遷移が存在しない場合には、その遷移はマスタ状態図に加えられる。新しい状態を最初に決定し、その後に新しい遷移を決定することが有利でありうる。
マスタノード110は、ワーカノード112が出くわした又は生成した新たなジョブに関する情報をジョブキュー232にマージしてよい。マスタノード110は、如何なる適切な方法においても、かかる情報をマージしてよい。一実施形態において、マスタノード110は、マスタノード110へ返されたnewJobsにおけるジョブごとに、そのジョブが既にjobQに存在するかどうかを判断してよい。ジョブがjobQに存在しない場合には、そのジョブはjobQに加えられてよい。
図6a〜6cは、どのようにマスタノード110がワーカノード112からの情報を加えてマスタ画面遷移グラフを生成するのかの例を表す。図6aは、中身のない画面遷移グラフがワーカノード112から返されたトレースと結合される場合を表す。返されたトレースにおいて、ワーカノード112は、第2の状態S2へ進むようボタン1をクリックすることによって第1の状態S1からクロールし、そして、再びボタン1をクリックすることによって第1の状態S1に戻っている。マスタ画面遷移グラフには状態又は遷移が予め存在していないので、返されたトレースが結合により得られる。選択されなかった選択肢(例えば、状態S2においてボタン2をクリックすること)は、完了されるべき将来のジョブを表し、これは、ワーカノード112によって返されて、ジョブキュー232に加えられてよい。
図6bは、どのようにマスタノード110が他のワーカノード112の結果を、前の図から得られる既存のマスタ画面遷移グラフに加えるのかを表す。図6bにおける返されたトレースは、第1の状態S1から始まって、ボタン2をクリックすることによって状態S4へクロールするワーカノード112の結果であってよい。次いで、ワーカノード112は、ボタン1をクリックすることによって状態S3へクロールし、二度目にボタン1をクリックすることによって状態S4へ戻ってよい。この返されたトレースを既存のマスタ画面遷移グラフに加えることは、マスタノード110に、返されたトレースのインスタンスS1を削らせるが、さもなければ、両方の状態及び遷移のための2つのグラフの結合を意味する。ワーカノード112は、図6aのトレースを返したものと同じ又は異なるワーカノード112であってよい。
図6cは、どのようにマスタノード110が更なる他のワーカノード112の結果を、前の図から得られる既存のマスタ画面遷移グラフに加えるのかを表す。図6cにおける返されたトレースは、S1からクロールし、S2へ遷移するようボタン1をクリックし、次いで、S3へ遷移するようボタン2をクリックするワーカノード112の結果であってよい。S3において1度、ワーカノード112はボタン1をクリックしてS4へクロールし、そして、それを再びクリックしてS3に戻ってよい。この返されたトレースを既存のマスタ画面遷移グラフに加えることは、返されたトレースの残りの部分は予めマスタ画面遷移グラフに存在するので、マスタノード110にS2からS3への遷移をマスタ画面遷移グラフに加えさせる。ワーカノード112は、図6a及び図6bのトレースを返したものと同じ又は異なるワーカノード112であってよい。ワーカノード112は、マスタノード110から開始状態としてS2を受け取っていてよい。そのような命令は、ジョブキュー232に加えられる以前に識別されたジョブ(例えば、ワーカノード112がS2において利用可能な幾つかの動作を事前に調査するが、ボタン2を選択しないこと)から発生してよい。
図3に戻ると、分散型コンピュータシステム100は、並列な分散環境において動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの有効な並列クローリングのための技術を利用してよい。分散型コンピュータシステム100におけるワーカノード112は、動的ウェブアプリケーションの部分をクロールし、結果として得られる発見されたトレースをマスタノード110へ報告してよい。ワーカノード112は、如何なる適切な方法においても動的ウェブアプリケーションをクロールしてよい。
一実施形態において、ワーカノード112のタスクは、次の擬似コードの一部又は全てを用いて実施されてよい:
マスタノード110は、将来のクローリングタスクのためにワーカノード112を準備するために、設定configに従ってワーカノード112(例えば、w1)におけるワーカクローラアプリケーション218を初期化するようLoadConfig(config)のような関数を使用してよい。一実施形態において、ワーカノード112自体が、ワーカノード112にあるワーカクローラアプリケーション218を初期化してよい。configは、ワーカノード112を初期化するよう如何なる適切な情報も含んでよい。一実施形態において、configは、クロールされる動的ウェブアプリケーションのurl等のアドレスを含んでよい。他の実施形態では、configは、どのように動的ウェブアプリケーションをクロールすべきかに関するワーカノード112のための指令を含んでよい。そのような指令は、目的の文書オブジェクトモデル(DOM)要素、例えば、html”<a>”タグに関する指令を含んでよい。また、そのような指令は、動的ウェブアプリケーションで実行すべきユーザ動作、例えば、特定の又は断定的な項目のクリック、及び/又はクローリングの間の適切な段階で入力すべき特定のユーザデータ(例えば、ログインページにおける認証データ)を含んでよい。
一実施形態において、この初期化プロセスは、ワーカノード112で事前に利用可能な予め構成されたクローラアプリケーションへのパラメータの組(例えば、文字列)のパスを利用してよい。そのような予め構成されたクローラアプリケーションは、ワーカクローラアプリケーション218において実施されてよい。他の実施形態では、この初期化プロセスは、configに含まれる指令に基づき新たなソースコードを生成してよく、次いで、それはコンパイルされて、w1でクローラアプリケーションを駆動するために使用されてよい。そのようなクローラアプリケーションは、ワーカクローラアプリケーション218において動作してよい。新たなソースコードの生成又はコンパイルは、マスタクローラアプリケーション220のようなアプリケーションにおいて、マスタノード110で実行されてよい。新たなソースコードの生成又はコンパイルは、ワーカノード112で行われてよい。
ワーカノード112は、指定の開始位置から始まって動的ウェブアプリケーションをクロールしてよい。指定の開始位置は、事前に決定された状態及び遷移を含む既存の既知のトレースにおいて実施されてよい。一実施形態において、ワーカノード112は、上述された関数手続きWorkerCrawlTrace(seedTrace)を利用してよい。seedTraceは、マスタノード110からワーカノード112へ送られた開始トレースであってよい。
動的ウェブアプリケーションをクロールする前に、ワーカノード112は、localStateGraphのような局所状態グラフを生成して、それを空に設定してよい。ワーカノード112は、クローリングの間に発見される新たなジョブを含むためにnewJobsのような構造を生成して、それを空に設定してよい。ワーカノード112は、初期画面を読み込んでよい。ワーカノード112は、そのようにするために、アドレスに対応するウェブアプリケーションをクロールするのに備えて自身のワーカクローラアプリケーション218にinitScreenのような開始アドレスを読み込むことによって、上記のLoadPage(url)のような関数を使用してよい。一実施形態において、アドレスは、クロールされるウェブアプリケーションの初期ページ又はホームページである。開始アドレスをウェブクローラアプリケーションに読み込んだ結果は、currentStateのような構造に格納されてよい。
次いで、ワーカノード112は、所望の状態に達するようプログラムでトレースを実行してよい。かかる実行は、関数ExecuteTrace(SeedTrace)を使用してよいExecuteTraceは、seedTraceにおける一連の動作を実行するようExecuteAction(Action)のような関数を順に呼び出してよい。Actionは、特定のページでのワーカノード112の即時動作を指示するよう1又はそれ以上のパラメータを含んでよい。一実施形態において、actionは、一対のパラメータ{t,u}を含んでよい。tは、ブラウザにおける現在のページでボタン又はリンク等の目的のDOM要素を含んでよい。uは、tで実行されるボタンクロック又はフォームデータ入力等のユーザ動作を含んでよい。ExecuteActionは、現在の画面又は状態において{t,u}によって指定される動作をプログラムで実行してよい。一実施形態において、ExecuteActionは、目的の要素tが現在のブラウザ画面又は状態で利用可能であるとして、動作してよい。
このように、ワーカノード112は、seedTraceによって定義される動的ウェブアプリケーション、又はマスタノード110によって定義されるその他の初期トレースを通じて最初のクロールを行ってよい。かかる最初のクロールは、他のワーカノード112によってそもそも取られたステップを繰り返すことを含むことがある。ワーカノード112は、currentStateのようなクロールの現在の状態を格納する構造に対して結果を割り当ててよい。
ワーカノード112は、状態グラフを実行し続けるべきか否かを判断してよい。実行し続ける場合には、ワーカノード112は、動的ウェブアプリケーションにおける動作を実行し、関連するブックキーピングタスクを実行し続ける。そうでない場合には、ワーカノード112は、動的ウェブアプリケーションのその部分のクローリングを終了させ、状態グラフ及び何らかの新たに生成されたジョブをマスタノード110と同期させる。
ワーカノード112は、現在の状態が訪れたことがあるかどうかと、現在の局所状態グラフが定義されているソース境界内で動作しているかどうかとを判断してよい。そのような基準が真である間、ワーカノード112は、動的ウェブアプリケーションの一部をクロールするよう一連のイベントを行ってよい。そのような基準が真であるかどうかを判断するよう、状態が以前に訪れたことがあるかどうかに関する判断は、NotVisited(state)関数を使用することによって行われてよい。ワーカノード112は、状態がlocalStateGraph内に存在するかどうかを確認するよう、localStateGraphにおいてその状態を探してよい。状態が既にlocalStateGraph内に存在する場合には、ワーカノード112は、その状態が以前に訪れたことがあると決定してよい。状態が以前に訪れたことがある場合には、NotVisited関数は偽を返し、そうでない場合には真を返してよい。何らかの適切な方法により割り当てられたアプリケーションの境界内でワーカノード112が動作しているかどうかに関する決定は、関数WithinResourceBound(localStateGraph)を用いてよい。そのような例において、ワーカノード112は、場合により関数LoadConfigを用いて、localStateGraphのトレースが、ノードが初期化されたconfigにおいて指定されるリソース境界内にあるかどうかを判断してよい。かかる境界は、如何なる適切なメトリックによっても定義されてよい。一実施形態において、localStateGraphを構成するトレースにおける状態の数は、最大閾値と比較されてよい。他の実施形態では、localStateGraphを構成するトレースにおいてクローリングが行われた深さは、閾値と比較されてよい。更なる他の実施形態では、現在のクローリングタスクの開始から経過した時間は、最大閾値と比較されてよい。様々な実施形態において、1よりも多いそのような基準は、configで指定されるリソース境界に一体化されてよい。
そのようなシーケンスは、次のステップの1又はそれ以上を含んでよい。ワーカノード112は、localStateGraphのような局所状態グラフがマスタノード110と同期する準備ができているかどうかを判断し、準備ができている場合には、生成された何らかの新たなジョブ(例えば、構造newJobsに含まれるもの)とともにlocalStateGraphを同期させてよい。ワーカノード112は、如何なる適切な方法によっても、例えば、関数IsReadyToSynchronize(localStateGraph)を用いて、そのような判断を行ってよい。このような場合において、ワーカノード112は、十分なクローリングが実行されたかどうかを判断してよい。そのような判断は、例えば、クロールされた状態の数、クローリングが行われた深さ、又はワーカノード112によって引き起こされた最後の同期イベントから経過した時間を測定することによって、行われてよい。関数IsReadyToSynchronizeの使用は、localStateGraphが特定の基準に従って同期する準備ができている場合に、真を返してよい。
currentStateによって表される動的ウェブアプリケーションの現在の状態から、ワーカノード112は、利用可能な動作を取り出し、それらをactionListのような構造に格納してよい。ワーカノード112は、動的ウェブアプリケーションの画面又は状態を分析して、その画面又は状態で取られる可能性がある動作を決定してよい。ワーカノード112は、如何なる適切な方法によっても、そのような分析を行ってよい。一実施形態において、ワーカノード112は、関数ExtractActions(screen)を用いてそのような分析を行ってよい。通常、分析されるべき画面又は状態は、currentState、すなわち、ブラウザにおける現在の画面である。ワーカノード112は、候補動作要素のリストを取り出すよう、クローラが初期化されたconfigにおいて指定される指令に基づき分析を行ってよい。ワーカノード112は、取られる可能性がある動作を決定し、それらをデータ構造(例えば、リスト)内に置いてよい。
画面において取られる可能性がある動作を決定した後、ワーカノード112は、可能性のある動作のリストから動作を取り出してよい。ワーカノード112は、このタスクを達成するよう関数GetFirstAction(actionList)を用いてよい。このとき、actionListは、画面において取られる可能性がある動作の順序付けられた集まりである。ワーカノード112は、取り出された動作を、現在の状態又は画面における利用可能な動作から削除してよい。ワーカノード112は、その動作をfirstActionのような構造に格納してよい。ワーカノード112は、取り出された動作を実行し、実行結果を現在の状態又は画面のための構造に格納してよい。ワーカノード112は、newJobsのような構造に含まれる、クローリングの間に出くわした新たなジョブのリストを、現在の状態又は画面から決定される動作と結合してよい。一実施形態において、ワーカノード112は、何らかの指令を一組とするふた組のジョブの結合を決定してよい。ワーカノード112は、新たなジョブのリストのための構造に結果を格納してよい。
クローリングが続くべきでない場合には、ワーカノード112はマスタノードと同期してよい。ワーカノード112は、この時点で又はその他の適切な時点で、そのような同期を行ってよい。一実施形態において、ワーカノード112は、そのような同期を行うために、関数SyncWithMaster(localStateGraph,newJobs)を用いてよい。ワーカノード112は、リソースの記録をデータ変換して、クローリング結果をマスタノード110へ送信してよい。マスタノード110との同期は、局所状態グラフ及びクローリングの間に発見された新たなジョブ等の情報を使用してよい。
ワーカノード112は、局所状態グラフを圧縮してよい。ワーカノード112は、如何なる適切な方法によっても、局所状態グラフを圧縮してよい。一実施形態において、ワーカノード112は、CompressGraph(localStateGraph)関数を用いてよい。ワーカノード112は、状態グラフにおける各状態を表すよう状態圧縮アルゴリズムを用いてよい。そのような圧縮アルゴリズムは、状態グラフを増加的に表し、グラフのサイズを低減することができる。ワーカノード112は、圧縮された状態グラフを、そのような圧縮の結果として生成してよい。
ワーカノード112は、情報をマスタノード110へ送信してよい。かかる情報は、局所状態グラフ、すなわち、その圧縮された又は変更されたバージョンと、動的ウェブアプリケーションのクローリングの間に出くわした新たなジョブのリストとを含んでよい。ワーカノード112は、如何なる適切な方法によっても、そのような情報を送信する。一実施形態において、ワーカノード112は、そのようなタスクを達成するために関数SendToMaster(deltaTrace,newJobs)を使用してよい。ワーカノード112は、最後の同期イベント以来現在のワーカノードにおいて計算された結果をマスタノード110へ送ってよい。
次いで、ワーカノード112は、マスタノード110と同期する局所状態グラフの部分にマークを付してよい。ワーカノード112は、如何なる適切な方法によっても、そのようなタスクを実行してよい。一実施形態において、ワーカノード112は、関数MarkSentStates(localStateGraph)を使用してよい。ワーカノード112は、将来の同期イベントにおいて再送信されないように、localStateGraphのようなグラフのその部分に注釈を付してよい。そのようなマーキングは、状態グラフの特定の部分がマスタノード110へ再送信される必要がないと決定するために、CompressGraph又はSendToMasterのような関数によって使用されてよい。
状態が以前に訪れたことがあった場合、又は局所状態グラフのクローリングが定められたリソース境界を越えた場合に、ワーカノード112は、マスタノード110と同期してよい。一実施形態で、ワーカノード112は、このノードでの最後の同期イベント以来生成されたグラフの部分を表すlocalStateGraphと、クローリングの間に生成され、ワーカノード112によって将来部分的に実行されるべき係属中のクローリングジョブのリストを含むnewJobsとを用いて、マスタノード110と同期してよい。localStateGraphは圧縮されて、deltaTraceのような構造に格納されてよい。deltaTraceは、ワーカノードの観点からマスタノード110に含まれない動的ウェブアプリケーションのトレースの部分を含んでよい。既存の局所状態グラフ、例えば、localStateGraphは、マスタノード110と同期をとられたとマークされてよい。ワーカノード112は、マスタノード110と同期するよう、新たなジョブを含む構造をリセットするか、又は空にしてよい。
分散型コンピュータシステム100は、動的ウェブアプリケーションを含むインタラクティブ型クライアント−サーバ・アプリケーションのクローリングにおいて状態情報の圧縮技術を利用してよい。上述されたように、ワーカノード112は、同期の間にマスタノード110へ送信される情報を低減するよう状態グラフを圧縮してよく、マスタノード110は、新たに発見された情報を再構成するよう状態グラフを復元してよい。
一実施形態において、ワーカノード112は、前の画面のほんの小さい変更を含む、動的ウェブアプリケーションにおいてあった一連の状態又は画面を圧縮することによって、状態グラフを最適化してよい。そのような実施形態では、2つの連続する画面は、それらの基礎を成すDOMの大半を共有する。例えば、図6の画面遷移グラフに関し、上記の初期状態S1の基礎を成すDOM表現は、ボタン1に割り当てられる値を“Click Me!”と示し、ボタン2に割り当てられる値を“Click Me Too!”と示す。ボタン1がこの画面においてクリックされた場合に、状態S2へ遷移が起こり、基礎を成すDOMにおける唯一の変化は、“Click Me!”から“I’m cliked.”への要素/HTML[1]/BODY[1]/INPUT[1]の値属性の変化である。このように、状態S2は、以下によって、完全な表現に代えて、表されてよい:
このように、一実施形態において、ワーカノード112は、現在の画面が前の画面又は基準画面(上記の例では、S1)と相違する動的ウェブアプリケーションの現在の画面(上記例では、S2)の部分のみをマークし表してよい。ワーカノード112は、如何なる適切な方法においても、前の画面と相違する現在の画面の部分のみをマークし表してよい。一実施形態において、ワーカノード112は、次の擬似コードの全て又は一部により、それらのタスクを達成してよい:
ワーカノード112は、refScrnのような基準画面と、newScrnのような目標画面との間の状態又は画面を圧縮してよい。目標画面は、圧縮された表現が必要とされる画面であってよい。基準画面は、如何なる適切な画面であってもよい。基準画面は、目標画面と同様に基づいて選択されてよい。このように、目標画面を訪れる直前に訪れた画面、又は他の先行画面は選択されてよい。基準画面は、圧縮が実行される基準を提供してよい。ワーカノード112は、主として、後述される2つの相、すなわち、マーキング相及び抽出相において、状態グラフに含まれる所与の状態を圧縮してよい。
ワーカノード112は、目標画面において各ノードを初期化し、次いでマーキング相に入り、次いで抽出相に入って、マーキング相の結果が取り出されて、圧縮相として返されるようにしてよい。
初期化の間、ワーカノード112は、最初に目標画面内の全てのノードを初期化することによって、refScrnのような基準画面を参照するnewScrnのような新たにクロールされる目標画面の状態を圧縮してよい。ワーカノード112は、ノードにおける変化を表し且つ子ノードにおける変化を表すマーカを偽と設定してよい。ワーカノード112は、所与の画面又は問題となっている画面のDOMにおいて各ノードに付されるべき2つのマーカを設定してよい。第1のマーカは、基準画面と目標画面との間で現在のノードに対してなされた変更を表してよい。第1のマーカは、changeと示されてよい。様々な実施形態において、changeは、3つの異なる値、すなわち、“false”、“attrs”又は“tag”を有してよい。“false”値は、ノードが目標画面及び基準画面において同じであることを表してよい。そのような明示的意味は、タグ名、属性、又はその他の適切な特性に関してなされてよい。“attrs”値は、ノードが目標画面においても基準画面と同じタグ名を有するが、属性の1又はそれ以上は値が異なることを表してよい。“tag”値は、このノードが両方の画面において構造上異なった表現を有することを表してよい。例えば、そのような構造上異なった表現は、2つの画面のその位置で異なったタグを有するノード、あるいは、ノードが基準画面のその位置に存在しない場合、あるいは、より多くの子ノードを有するノードが基準画面のその位置に存在する場合を含んでよい。第2のマーカは、ノードの子孫の1又はそれ以上が非偽値に設定された変更マーカを有することを表してよく、従って、ノードは、変更があった子孫への経路を提供するよう、圧縮された表現で存在する必要がある。第2のマーカは、childDiffと表されてよい。childDiffは、真又は偽値に対応してよく、このとき、真値は、変更がノードの子孫に対して起こったことを示す。
次に、マーキング相において、ワーカノード112は、目標画面のどの部分が基準画面と異なっているのかを特定し、それらに然るべくマークを付すために、目標画面を基準画面と比較してよい。ワーカノード112は、如何なる適切な方法によっても、このタスクを達成してよい。一実施形態において、ワーカノード112は、基準画面及び新しい画面を比較するために関数MarkChangeを使用してよい。ワーカノード112は、基準画面に関して変化した目標画面の部分にマークを付してよい。ワーカノード112は、目標画面の根本においてそのようなマーキングを開始してよい。
目標画面と基準画面との間の差異にマークを付す際に、ワーカノード112は、目標画面の根本に対応する開始ノード(例えば、node)から開始してよい。ワーカノード112は、ノードが基準画面におけるその等価なものと異なっているかどうかを判断してよい。異なっている場合には、ワーカノード112は、基準画面と目標画面との間に変化があったと決定してよい。ワーカノード112は、nodeが基準画面に存在するかどうかを確認し、基準画面におけるnodeの対を得、nodeの子の数を基準画面におけるnodeの対の子の数と比較することによって、そのような決定を行ってよい。
nodeが基準画面に存在するかどうかを確認する際に、ワーカノード112は、ノードが特定のDOM要素(例えば、node)と同じx経路位置及び同じタグ名を有して目標画面において存在するかどうかを判断してよい。ワーカノード112は、如何なる適切な方法によっても、そのような判断を行ってよい。一実施形態において、ワーカノード112は、上記のExists(node,refScrn)を使用することによって、判断を確かめてよい。その関数は、newScrnにおいてDOM要素nodeと同じx経路位置及び同じタグ名でrefScrnにノードが存在するときかつそのときに限り、真を返してよい。
nodeの対を得る際に、ワーカノード112は、基準画面において特定の指定されたノードを見つけて返してよい。ワーカノード112は、如何なる適切な方法によっても、そのような発見を行ってよい。一実施形態において、ワーカノード112は、上記のGetTwin(node,refScrn)を使用することによって、そのような決定を行ってよい。ワーカノード112は、上記のExists()によって用いられるx経路一致基準を用いて、refScrnに存在するnodeに対応するノードを返してよい。
nodeの子の数をnodeの対の子の数と比較する際に、ワーカノード112は、画面又は状態のDOMツリーにおいて所与のノードの子ノードの数を決定してよい。ワーカノード112は、如何なる適切な方法によっても、そのような決定を行ってよい。一実施形態において、ワーカノード112は、上記のNumChild(node)関数を使用することによって、そのような決定を行ってよい。
nodeの対の一方が基準画面に存在する場合及びそれがnodeと同じかそれより少ない数の子を有する場合に、ワーカノード112は、nodeの対がnodeと同じ属性を厳密に有するかどうかを判断し、同じ属性を有さない場合には、“attrs”であるようnodeのchangedマーカを割り当てることによってそのような状況を反映するとともに、nodeの親を得て、その親のchildDiffを“true”であるよう変更するよう、node及びその親のマーカを変更してよい。
nodeの親を得る際に、ワーカノード112は、DOMツリーにおいて特定のノードの親ノードを決定してよい。ワーカノード112は、如何なる適切な方法によっても、そのような決定を行ってよい。一実施形態において、ワーカノード112は、上記のGetParent(node)関数を使用することによって、そのような決定を行ってよい。その関数は、DOMツリーにおけるnodeの親ノードを返すことができる。
対の一方であるノードの属性がnodeと同じである場合に、ワーカノード112は、nodeが変更されていないことを示してよい。更に、Exists(node,refScrn)&NumChild(node)≧NumChild(GetTwin(node,refScrn))が真を返す場合には、nodeの子ごとに、ワーカノード112は、上記のマーキングスキームを用いて再帰的に子を処理してよい。一実施形態において、かかるマーキングは、nodeに関して見つけられた夫々の子についてMarkChangeを呼び出すことによって、達成されてよい。
nodeの子を決定する際に、ワーカノード112は、DOMツリーにおいて特定のノードの子ノードを決定してよい。ワーカノード112は、如何なる適切な方法によっても、そのような決定を行ってよい。一実施形態において、ワーカノード112は、上記のChildNodes(node)関数を使用することによって、そのような決定を行ってよい。その関数は、DOMツリーにおける特定のノード(例えば、node)の子ノードの順序付けられたリストを返すことができる。
そうではなければ、基準画面と目標画面との間に変化があった場合、nodeに関して、場合により、Exists(node;refScrn)&NumChild(node)≧NumChild(GetTwin(node;refScrn))を呼び出し、偽(false)の戻り値を得ることによって、次いで、ワーカノード112は、nodeが変更されたことを示してよい。一実施形態において、ワーカノード112は、nodeのchangedタグを“tag”に設定することによって、そのような意味を表してよい。更に、ワーカノード112は、変化した子を親が有することを示すようnodeの親のタグを設定してよい。これは、GetParent(node)を呼び出して、結果のchildDiffパラメータを“true”に設定することによって、達成されてよい。
最後に、ワーカノード112は、nodeが変化した子ノードを有するかどうかを判断し、そのような子ノードを有する場合には、nodeの親が変化した子を有することを示すようnodeの親のタグを設定してよい。これは、nodeのchildDiffパラメータを確認して、GetParent(node)を呼び出し、結果のchildDiffパラメータを“true”に設定することによって、達成されてよい。
抽出相において、ワーカノード112は、基準画面に対して目標画面の圧縮表現を取り出すよう、目標画面と基準画面との間の差異のマーキングを使用してよい。ワーカノード112は、如何なる適切な方法によっても、このタスクを達成してよい。一実施形態において、ワーカノード112は、目標画面の圧縮表現を取り出すために関数ExtractDeltaを使用してよい。ワーカノード112は、目標画面と基準画面との間のマークされている差違を取り出し、結果をdeltaScrnのような構造に格納してよい。ワーカノード112は、圧縮された目標画面を含む、結果として得られるdeltaScrnを返してよい。かかる目標画面は、マスタノード110へ返されるべき圧縮された状態として使用されてよい。
図7は、少なくとも部分的にクロールされた動的ウェブアプリケーションの画面のDOMツリーのマークを付されたものの一例である。図7は、refScrnのような基準画面を参照してnewScrnのような目標画面にマークを付す効果を表す。そのようなマーキングは、関数ExtractDeltaを手段として、deltaScrnのような圧縮表現を生成するために抽出相においてワーカノード112によって使用されてよい。保持又は廃棄されたマーク付きDOMの部分は、生成された圧縮表現の一例を示す。例えば、図7は、図5に示されるように、状態S1に対する状態S2の圧縮を表す。そのような例において、DOMツリーのHTMLノード702、HTMLノード属性703、HEADノード704、HEADノード属性706、BODYノード708、BODYノード属性710、INPUTノード712、INPUTノード712に関連するDOMサブツリー714、並びに、様々な他のノード及びサブツリー716に対応するDOMツリーのセクションが存在してよい。状態S1からS2へ進む動作は、INPUTノード712、その属性等のDOMノードにおける、及びその子孫ノード714のサブツリーにおける変化として反映してよい。更に、もっぱらHEADノード704の属性706に対する変化が存在してよい。これは、“Click Me!”ボタンをクリックした結果であってよく、このとき、スクリプトの部分がアクティブにされ、ボタン値に対する変更がなされる。マーク付きDOMモデルのそれらの部分は、変化したとマークされて、返されるべきDOMモデルの圧縮されたものに含まれてよい。その一方で、DOMモデルの多くの他の部分716、718は、2つの状態S1及びS2の間で変化しないままであってよい。このように、それらの部分は、変化なしとマークされて、返されるべきDOMモデルの圧縮されたものから除かれてよい。HTMLノード702、HEADノード704、及びBODYノード708等の幾つかのセクションは、2つの状態S1及びS2の間で変化しないままであるが、変化した子を有することがある。このように、それらのセクションは、変化した部分への経路を提供するように、返されるべきDOMモデルの圧縮されたものにおいて保持されてよい。
このように、ワーカノード112は、deltaScrnのような圧縮表現として保持されるとマークされた図7の部分を返してよい。そのような圧縮表現は、deltaScrn及びrefScrnから原の表現newScrnを一意的に且つ完全に再構成するのに十分な情報を有してよい。
図8a及び8bは、動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの分散型並列クローリングを協調させる方法800の実施例である。分散型コンピュータシステム100の動作において上述された擬似コードは、方法800の一部又は全てを実施してよい。
ステップ805において、ウェブアプリケーションは、クローリングのために初期化されてよい。そのような初期化は、ウェブアプリケーションのクローリングのための開始位置又は初期トレースを表す1又はそれ以上の初期ジョブを決定することを含んでよい。一実施形態において、生成される初期ジョブの数は、そのようなジョブを並列に実行するのに利用可能なリソースの数よりも多くてよい。ステップ810において、あらゆる、そのような決定されたジョブが、ジョブキューに加えられてよい。
方法800の2又はそれ以上のブランチは、並列に実行してよい。1つのブランチはステップ815から始まってよい。他のブランチはステップ850から始まってよい。各ブランチは、当該方法が終了するまで実行してよい。方法が終了されるべきかどうかの判断は、いずれかのブランチにおいて、又は方法800の実行の他のブランチにおいて、起こってよい。一実施形態において、そのような判断は、ステップ815から始まるブランチにおいて行われてよい。
ステップ815において、ジョブキュー及びリソースキューはエントリを含むかどうかが判断されてよい。ステップ815は、ポーリングスキーム、イベントハンドラ、又はその他の適切なメカニズムにおいて実施されてよい。ジョブキュー及びリソースキューがエントリを含む場合には、ステップ820において、ジョブがジョブキューから選択されてよい。ジョブを選択する如何なる適切な方法も使用されてよい。一実施形態において、ジョブは、先入れ先出しに基づいて選択されてよい。ステップ825において、リソースがリソースキューから選択されてよい。リソースを選択する如何なる適切な方法も使用されてよい。一実施形態において、リソースは、先入れ先出しに基づいて選択されてよい。ステップ830において、ジョブは、リソースによって実行されるよう割り当てられてよい。そのような割り当ては、ジョブによって指定されるウェブアプリケーションの一部をクロールするリソースを含んでよい。ステップ835において、リソースが、ジョブの実行のために初期化されてよい。次に、方法800は、ステップ815へ戻ってよい。
ジョブキュー及びリソースキューの一方がエントリを含まない場合には、方法が終了されるべきかどうかが判断されてよい。ステップ840において、ジョブキューが空であるかどうか、及び全てのジョブが実行されたかどうかが判断されてよい。ジョブキューが空であって且つ全てのジョブが実行されていた場合には、ステップ845において、そのような場合は、ウェブアプリケーションが完全にクロールされたことを反映しており、方法は終了してよい。そうでない場合には、方法は、ステップ815へ戻ってよい。
ステップ850において、以前にリソースへ割り当てられたいずれかのジョブから結果が受け取られたかどうかが判断されてよい。ステップ850は、ポーリングスキーム、イベントハンドラ、又はその他の適切なメカニズムにおいて実施されてよい。結果が受け取られていない場合には、方法800は、ステップ850へ戻ってよい。結果が受け取られている場合には、ステップ855において、結果の一部として受け取られた如何なる状態グラフも復元されてよい。受け取られた状態グラフにおける夫々の状態について、ステップ860において、その状態がマスタ状態グラフにあるかどうかが判断されてよい。状態がマスタ状態グラフにない場合には、ステップ865において、その状態はマスタ状態グラフに格納されてよく、方法800はステップ870へ進んでよい。状態がマスタ状態グラフにある場合にも、方法800はステップ870へ進んでよい。受け取られた状態グラフにおける夫々の遷移について、ステップ870において、その遷移がマスタ状態グラフにあるかどうかが判断されてよい。遷移がマスタ状態グラフにない場合には、ステップ875において、その遷移はマスタ状態グラフに加えられてよく、方法800はステップ880へ進んでよい。遷移がマスタ状態グラフにある場合にも、方法800はステップ880へ進んでよい。受け取られた結果における夫々のジョブについて、ジョブがジョブキューにあるかどうか、又は現在リソースにおいて実行中であるかどうかが判断されてよい。ジョブがジョブキューになく、且つ現在リソースにおいて実行中でもない場合には、ステップ885において、ジョブはジョブキューに加えられてよく、方法800はステップ850へ戻ってよい。ジョブがジョブキューにあるか、又は現在リソースにおいて実行中である場合にも、方法800はステップ850へ戻ってよい。
図9は、並列分散環境における動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションの有効な並列クローリングのための方法900の実施例である。分散型コンピュータシステム100の動作において上述された擬似コードは、方法900の一部又は全てを実施してよい。
ステップ905において、ジョブの実行は初期化されてよい。ジョブは、クロールされるウェブアプリケーションの部分を表してよい。そのような初期化は、中身のない状態グラフを生成することを含んでよく、このとき、状態グラフは、ウェブアプリケーションのクローリングの結果を含んでよい。ウェブアプリケーションのクローリングの間に発見された新たなジョブを含むための記録は、初期化されてよい。初期トレースは、ウェブアプリケーションにおける指定された開始場所に到達するよう実行されてよい。そのような指定された場所でのウェブアプリケーションの画面は、読み込まれてよい。ステップ910において、そのような画面は、現在の状態として指定されてよい。
ステップ915において、現在の状態が以前に訪れたかどうかが、局所グラフに従って判断されてよい。以前に訪れたことがある場合には、ジョブのクローリングは終了されてよく、方法900はステップ975へ進んでよい。以前に訪れたことがない場合には、ステップ920において、ジョブの実行が定められた境界内にあるかどうかが判断されてよい。ジョブの実行が定められた境界内にあるかどうかを判断する如何なる適切な方法も使用されてよい。境界内にない場合には、ジョブのクローリングは終了されてよく、方法900はステップ975へ進んでよい。境界内にある場合には、ステップ930において、状態グラフは同期する準備ができているかどうかが判断されてよい。そのような判断は、周期的に状態グラフを同期させることができる。準備ができている場合には、ステップ932において、状態グラフはマスタ状態グラフと同期してよく、方法はステップ935へ進んでよい。準備ができていない場合にも、方法はステップ935へ進んでよい。
ステップ935において、ウェブアプリケーションのクローリングは、現在の状態において利用可能な起こり得る動作を最初に決定することによって、起こってよい。一実施形態において、そのような動作は、状態のDOM内に含まれる情報に基づいてよい。ステップ940において、起こり得る動作は、実行されていない動作のリストに加えられてよい。ステップ945において、実行されるべき動作が、実行されていない動作のリストから選択されてよい。如何なる適切な基本的なクローリング技術又は検索方法も、どの動作が実行されるべきかを選択するために使用されてよい。選択された動作は、ステップ950において、実行されていない動作のリストから削除され、ステップ955において、実行されてよい。ステップ960において、ステップ955を実行した結果が、新しい現在の状態として指定されてよい。ステップ965において、1又はそれ以上のジョブが、実行されていない動作のリストから生成されてよく、ステップ970において、新たなジョブが、新しいジョブのリストへ加えられてよい。そのような新しいジョブのリストは、リソースによる将来の実行のためにジョブキューへ同期中に送信されてよい。次いで、方法900は、ステップ915へ戻ってよい。
ステップ975において、状態グラフは、マスタ状態グラフと同期してよい。このステップは、ステップ932と同じようにして実施されてよい。ジョブの実行に関する他の情報が、マスタノード110へ送信されてよい。ステップ980において、現在のワーカノード112の利用可能性のインジケーションは、リソースキューにおいて登録されてよい。
図10は、インタラクティブ型クライアント−サーバ・アプリケーションの一部のクローリングにより生成される状態グラフをアプリケーションのマスタ状態グラフと同期させる方法1000の実施例である。幾つかの実施形態では、方法1000は、図9のステップ932及び975の一部又は全てを実施してよい。分散型コンピュータシステム100の動作において上述された擬似コードは、方法1000の一部又は全てを実施してよい。
ステップ1005において、マスタ状態グラフと同期すべき状態グラフは圧縮されてよい。グラフ内の夫々の状態は、ここで論じられるものを含む如何なる適切な方法によっても圧縮されてよい。状態グラフは、ジョブの実行による情報を含んでよく、ジョブは、クロールされるウェブアプリケーションの部分を示す。ステップ1010において、そのような圧縮の結果が記憶されてよい。結果は、状態グラフと、既に同期した前の状態グラフとの間の差を表してよい。ステップ1015において、圧縮された状態グラフ及び/又は新しいジョブのリストは、マスタノードへ送信されてよい。マスタノードは、マスタ状態グラフを制御してよく、且つ、それらの2つをマージするよう構成されてよい。ステップ1020において、状態グラフは、マスタノードと同期したとマークされてよい。そのようなマーキングは、ステップ1010の間の方法1000の将来のインスタンスによって使用されてよい。ステップ1025において、新しいジョブのリストはクリアされてよい。
図11は、動的ウェブアプリケーションのようなインタラクティブ型クライアント−サーバ・アプリケーションのクローリングにおける状態情報の圧縮のための方法1100の実施例である。分散型コンピュータシステム100の動作において上述された擬似コードは、方法1100の一部又は全てを実施してよい。
ステップ1105において、アプリケーションは、状態グラフを生成するようクロールされてよい。状態グラフは、アプリケーションの動作を表してよい。代替的に、状態グラフは、受け取られ、あるいは、別なふうに決定されてよい。状態グラフにおける夫々の状態について、ステップ1115〜1145が行われてよい。
ステップ1115において、所与の状態に関連する画面が決定されてよい。以降のステップは、そのような画面を圧縮しようと試みてよい。ステップ1120において、画面のモデルが決定されてよい。一実施形態において、そのようなモデルはDOMモデルを含んでよい。ステップ1125において、その画面のための基準画面が決定されてよい。そのような基準画面は、所与の画面をもたらした動作が取られた前の画面を含んでよい。
所与の画面は、そのモデルの一部として1又はそれ以上ノードを有してよい。そのようなノードの夫々について、ステップ1130において、ノードは初期化されてよい。そのような初期化は、ノードが変化しないとのインジケーションを設定することを含んでよい。基準画面と比較してノードの変化が見つかると、かかるインジケーションは、その後に変更されてよい。
ステップ1135において、所与の画面と基準画面との間の差異がマークされてよい。かかる差違は、所与の画面の根本ノードから始まってマークされてよい。
ステップ1140において、所与の画面と基準画面との間のそのようなマークされた変化は取り出されてよい。取り出されたマーク付きの変化は、所与の状態の圧縮されたものとして記憶されてよい。ステップ1145において、圧縮された状態が返されてよい。
図12は、画面と基準画面との間の変化にマークを付すための方法1200の実施例である。分散型コンピュータシステム100の動作において上述された擬似コードは、方法1200の一部又は全てを実施してよい。幾つかの実施形態では、図11のステップ1135の一部又は全てが、方法1200によって実施されてよい。
ステップ1205において、マークを付される画面のモデルにおける開始ノードが決定されてよい。そのような開始ノードは、マークを付される画面の根本ノード、又は方法1200を呼び出すエンティティによって指定される他のノードであってよい。同様に、ステップ1210において、基準画面が決定されてよい。そのような基準画面は、方法1200を呼び出すエンティティによって指定されてよい。
ステップ1215において、ノードが基準画面に存在するかどうかが判断されてよい。存在する場合には、ノードの子が、子と基準画面との間の如何なる変化も決定するよう調査されてよい。存在しない場合には、ノードの子が、子と基準画面との間の如何なる変化も決定するよう調査されなくてよい。
ノードが基準画面に存在する場合に、ステップ1220において、基準画面におけるノードの対が取得されてよい。ステップ1225において、対のノードの子の数が決定されてよく、同じように、ステップ1230において、現在のノードの子の数が決定されてよい。
ステップ1235において、現在のノードが対のノードと同数以上の子を有するかどうかが判断されてよい。同数以上の子を有する場合には、ステップ1240において、ノード及び対のノードの属性が等しいか否かが判断されてよい。かかる属性は、DOMモデルの一部であってよい。属性が等しくない場合には、ステップ1245において、ノードは、変化したとマークされてよい。一実施形態において、ノード属性に関するインジケータは、変化したとマークされてよい。ステップ1247において、ノードの親が決定されてよく、その親ノードに関するインジケータは、親が変化した子ノードを有することを示すようマークされてよい。ステップ1250において、親ノードの子の夫々について、方法1200は再帰的に呼び出されてよい。ノード及び対のノードの属性が等しい場合には、方法1200は同様にステップ1250へ進んでよい。子ノードに対する再帰的な呼び出しが成された後、方法1200はステップ1265へ進んでよい。
現在のノードが対のノードと同数以上の子を有さない場合には、方法1200はステップ1255へ進んでよい。ステップ1255において、ノードは変化したとマークされてよい。ステップ1260において、ノードの親が決定されてよく、その親ノードのインジケータは、親が変化した子ノードを有することを示すようマークされてよい。ステップ1260及び1247は、同じようにして実施されてよい。次いで、方法1200はステップ1265へ進んでよい。
ステップ1265において、ノードが何らかの変化した子ノードを有するかどうかが判断されてよい。そのような判断は、その旨の意味表示のためのノードのインジケーションを調べることによって、行われてよい。ノードは、そのようなものとして、ノードの子のための方法1200の再帰的な呼び出しによりマークを付されており、ノードは、方法1200の動作の間、変化した子を有するとしてマークを付されたノードを有してよい。ノードが何らかの変化した子ノードを有する場合には、ステップ1270において、ノードの親が決定されてよく、その親ノードに関するインジケータは、親が変化した子ノードを有することを示すようマークを付されてよい。ステップ1270、1260及び1247は、同じようにして実施されてよい。次いで、方法1200はステップ1275へ進んでよく、ステップ1275において、方法1200は終了してよい。
図8〜12は、例となる方法800、900、1000、1100及び1200に対して取られるべき特定の数のステップを開示するが、方法800、900、1000、1100及び1200は、図8〜12で表されているよりも多い又は少ないステップを有して実行されてよい。更に、図8〜12は、方法800、900、1000、1100及び1200に対して取られるべき特定の順序のステップを開示するが、方法800、900、1000、1100及び1200を有するステップは、如何なる適切な順序においても完了することができる。
方法800、900、1000、1100及び1200は、図1〜7のシステム、又は方法800、900、1000、1100及び1200を実施するよう動作可能なその他のシステム、ネットワーク若しくは装置を用いて実施されてよい。ある実施形態では、方法800、900、1000、1100及び1200は、コンピュータ可読媒体において具現されるソフトウェアにおいて部分的に又は完全に実施されてよい。
本開示のために、コンピュータ可読媒体は、一時期にデータ及び/又は命令を保持する如何なる手段又は手段の集合も含んでよい。コンピュータ可読媒体は、制限なしに、直接アクセス記憶装置(例えば、ハードディスクドライブ又はフロッピーディスク(登録商標))、連続アクセス記憶装置(例えば、テープディスクドライブ)、コンパクトディスク、CD−ROM、DVD、ランダムアクセスメモリ(RAM)、読出専用メモリ(ROM)、電気的消去可能プログラマブル読出専用メモリ(EEPROM)、及び/又はフラッシュメモリ、並びに、配線、光ファイバ、及び他の有形な持続性媒体、更には、それらの組み合わせ等の記憶媒体を含んでよい。
本開示は詳細に記載されてきたが、当然に、様々な変更、置換及び代替が、本開示の精神及び適用範囲から逸脱することなく、上記の実施形態に対して行われてよい。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
インタラクティブ型クライアント−サーバ・アプリケーションの第1部分がクロールされることを示す第1ジョブを実行するよう構成される第1ワーカノードと、
前記インタラクティブ型クライアント−サーバ・アプリケーションの第2部分がクロールされることを示す第2ジョブを実行するよう構成される第2ワーカノードと、
メモリへ結合されるプロセッサを有するマスタノードと
を有し、
前記第1ワーカノード及び前記第2ワーカノードは、各自のジョブを並列に実行するよう構成され、
前記マスタノードは、
前記第1ジョブを前記第1ワーカノードへ割り当て、
前記第2ジョブを前記第2ワーカノードへ割り当て、
前記第1ワーカノード及び前記第2ワーカノードからの結果を前記アプリケーションの動作の記録に組み込む
よう構成される、分散型コンピュータシステム。
(付記2)
クロールされるべき前記アプリケーションは、クロールされるべき動的ウェブアプリケーションを有する、
付記1に記載の分散型コンピュータシステム。
(付記3)
前記メモリは、複数のジョブのインジケーションを含むジョブデータ構造を有し、
前記マスタノードは、前記ジョブデータ構造から前記第1ジョブ及び前記第2ジョブを選択するよう構成される、
付記1に記載の分散型コンピュータシステム。
(付記4)
ジョブを実行するために利用可能な複数のワーカノードのインジケーション含むリソースデータ構造を更に有し、
前記マスタノードは、前記リソースデータ構造から前記第1ワーカノード及び前記第2ワーカノードを選択するよう構成される、
付記1に記載の分散型コンピュータシステム。
(付記5)
前記第1ワーカノードから返される結果は、前記ジョブをクロールしている間に発見される新たなジョブを含み、
前記マスタノードは、前記第1ワーカノードから返された前記新たなジョブを前記ジョブデータ構造に組み込むよう構成される、
付記3に記載の分散型コンピュータシステム。
(付記6)
前記マスタノードは、重複ジョブをパージするよう構成され、
前記重複ジョブは、結果が受け取られたジョブ、又はワーカノードで実行されているジョブを有する、
付記1に記載の分散型コンピュータシステム。
(付記7)
前記重複ジョブは、第3ワーカノードからパージされる、
付記6に記載の分散型コンピュータシステム。
(付記8)
前記メモリは、複数のジョブのインジケーションを含むジョブデータ構造を有し、
前記重複ジョブは、前記ジョブデータ構造からパージされる、
付記6に記載の分散型コンピュータシステム。
(付記9)
前記第1ワーカノード及び前記第2ワーカノードは、前記アプリケーションの動作の記録の部分表現を有する、
付記1に記載の分散型コンピュータシステム。
(付記10)
インタラクティブ型クライアント−サーバ・アプリケーションをベリファイする方法であって、
インタラクティブ型クライアント−サーバ・アプリケーションの第1部分がクロールされることを示す第1ジョブを選択し割り当て、
前記アプリケーションの第2部分がクロールされることを示す第2ジョブを選択し割り当て、
並列に前記第1ジョブを実行し且つ前記第2ジョブを実行し、
前記第1ジョブ及び前記第2ジョブからの部分的な結果を前記インタラクティブ型クライアント−サーバ・アプリケーションの動作の記録に組み込む、
方法。
(付記11)
クロールされるべき前記アプリケーションは、クロールされるべき動的ウェブアプリケーションを有する、
付記10に記載の方法。
(付記12)
前記第1ジョブ及び前記第2ジョブは、前記インタラクティブ型クライアント−サーバ・アプリケーションをクロールするよう実行されるべき複数のジョブのインジケーションを含むジョブデータ構造からを選択される、
付記10に記載の方法。
(付記13)
前記第1ジョブをクロールしている間に発見される新たなジョブを返し、
前記新たなジョブを前記ジョブデータ構造に組み込む、
付記12に記載の方法。
(付記14)
重複ジョブはパージされ、
前記重複ジョブは、結果が受け取られたジョブ、又はワーカノードで実行されているジョブを有する、
付記10に記載の方法。
(付記15)
前記第1ジョブ及び前記第2ジョブの実行は、前記インタラクティブ型クライアント−サーバ・アプリケーションの動作の記録の部分表現を有して行われる、
付記10に記載の方法。
(付記16)
コンピュータ可読媒体と、
前記コンピュータ可読媒体に坦持されるコンピュータ実行可能な命令と
を有し、
前記命令は、プロセッサによって読出可能であり、読み出されて実行される場合に、前記プロセッサに、
インタラクティブ型クライアント−サーバ・アプリケーションの第1部分がクロールされることを示す第1ジョブを選択させて割り当てさせ、
前記インタラクティブ型クライアント−サーバ・アプリケーションの第2部分がクロールされることを示す第2ジョブを選択させて割り当てさせ、
並列に前記第1ジョブを実行させ且つ前記第2ジョブを実行させ、
前記第1ジョブ及び前記第2ジョブからの部分的な結果を前記アプリケーションの動作の記録に組み込ませる、製品。
(付記17)
クロールされるべき前記インタラクティブ型クライアント−サーバ・アプリケーションは、クロールされるべき動的ウェブアプリケーションを有する、
付記16に記載の製品。
(付記18)
前記プロセッサは、更に、前記アプリケーションをクロールするよう実行されるべき複数のジョブのインジケーションを含むジョブデータ構造から前記第1ジョブ及び前記第2ジョブを選択する、
付記16に記載の製品。
(付記19)
前記プロセッサは、更に、
前記第1ジョブをクロールしている間に発見される新たなジョブを返し、
前記新たなジョブを前記ジョブデータ構造に組み込む、
付記18に記載の製品。
(付記20)
前記プロセッサは、更に、重複ジョブをパージし、
前記重複ジョブは、結果が受け取られたジョブ、又はワーカノードで実行されているジョブを有する、
付記16に記載の製品。
(付記21)
前記第1ジョブ及び前記第2ジョブの実行は、前記インタラクティブ型クライアント−サーバ・アプリケーションの動作の記録の部分表現を有して行われる、
付記16に記載の製品。