図1は、分散式コンピューティング・システム100の例示的な実施形態である。ある実施形態では、分散式コンピューティング・システム100は、一つまたは複数の対話的クライアント‐サーバー・アプリケーションの並列クロールのためのサービスを提供する。ある実施形態では、そのような対話的クライアント‐サーバー・アプリケーションはウェブ・アプリケーション104を含んでいてもよい。そのようなウェブ・アプリケーション104は動的ウェブ・アプリケーションを含んでいてもよい。ひとたびその動作およびスコープを決定するようクロールされてから、ウェブ・アプリケーション104はその後試験されてもよい。
分散式コンピューティング・システム100は、複数のネットワーク接続されたコンピューティング資源を含むいかなる分散式コンピューティング環境106を含んでいてもよい。そのようなコンピューティング資源は異なる種類のものを含んでいてもよい。さまざまな実施形態において、コンピューティング資源の接続トポロジーは未知または不規則であってもよく、分散式コンピューティング・システム100において実装されるサービスが当座の計算タスクを実行するために特定のトポロジーを利用できなくてもよい。
ある実施形態では、分散式コンピューティング・システム100はクラウド・コンピューティングのフレームワークまたは環境において実装されてもよい。分散式コンピューティング・システム100は一つまたは複数のコンピューティング・ノードによって実装されてもよい。一つのそのようなコンピューティング・ノードは、マスター・ノード110として指定されてもよく、他のコンピューティング・ノードは作業者ノード112として指定されてもよい。作業者ノード112および/またはマスター・ノード110は、これに限られないが、サーバー、コンピュータまたはその任意の集合を含むいかなる好適な電子装置において実装されてもよい。作業者ノード112およびマスター・ノード110は、メモリに結合されたプロセッサおよび命令を含んでいてもよい。該命令は、前記プロセッサによる実行のために前記メモリにロードされるとき、本稿に記載される機能を実行しうる。作業者ノード112およびマスター・ノード110は、ネットワーク構成を通じるなどして、通信上互いに結合されていてもよい。ネットワーク構成は、異なる種類のものを含んでいても均質なものであってもよく、分散式コンピューティング環境106によって提供されてもよい。作業者ノード112とマスター・ノード110を通信上結合するためにいかなる好適なネットワーク構成が使用されてもよい。分散式コンピューティング・システム100の作業者ノード112およびマスター・ノード110は、広域ネットワーク、ローカル・エリア・ネットワーク、イントラネット、インターネットまたはこれらの要素の任意の結合といった、いかなる好適なネットワークでネットワーク接続されてもよい。
作業者ノード112および/またはマスター・ノード110は、並列な仕方で達成されるべきタスクに関連付けられた計算負荷を共有するよう構成されていてもよい。たとえば、作業者ノード112は一つまたは複数のウェブ・アプリケーション104を試験するために並列に動作してもよい。そのようなウェブ・アプリケーションは一つまたは複数のウェブ・サイト上で動作したり、あるいは一つまたは複数のウェブ・サイトによってホストされたりしてもよい。そのような試験を達成するために、作業者ノード112および/またはマスター・ノード110は通信上ウェブ・アプリケーション104に結合されていてもよい。マスター・ノード110はウェブ・アプリケーション104に通信上結合され、ウェブ・アプリケーション104を試験するために他の作業者ノード112の動作を整理するよう構成されていてもよい。
一つまたは複数の動的ウェブ・アプリケーション104を試験する一環として、作業者ノード112およびマスター・ノード110はウェブ・アプリケーション・クロール・サービスを動作させてもよい。たとえば、ウェブ・アプリケーション104の開発者はそのようなウェブ・アプリケーション104を試験にかけてもよく、ここで、分散式コンピューティング・システム100の作業者ノード112および/またはマスター・ノード110はそのような動的ウェブ・アプリケーション104をクロールしてそのスコープおよび動作を判別してもよく、判別されたスコープおよび動作がそのような試験で使われてもよい。そのようなウェブ・アプリケーションは、AJAX、フラッシュまたは豊かで動的で対話的なユーザー経験を提供するよう構成された他の技術といった技術を使うウェブ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および一つまたは複数の作業者ノード112を含む、対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールのためのアーキテクチャの例示的実施形態である。マスター・ノード110は通信上作業者ノード112に結合されていてもよく、それぞれ、ウェブ・アプリケーション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の中身の入れ方(population)の例はのちに論ずる。クロール・ジョブは、作業者ノード112によって探査されるべきウェブ・アプリケーション104の部分の指示を含んでいてもよい。マスター・ノード110はマスター状態グラフ236のコピーを保持してもよい。マスター状態グラフ236はウェブ・アプリケーション104の画面遷移グラフ・モデルのマスター・コピーであってもよく、ウェブ・アプリケーション104をクロールした結果を含んでいてもよい。
作業者ノード112は、メモリ210に結合されたプロセッサ212を含んでいてもよい。作業者ノード112は作業者クローラー・アプリケーション218を含んでいてもよい。作業者クローラー・アプリケーション218は、プロセッサ212によって実行されるよう構成されていてもよく、メモリ210に存在してもよい。作業者ノード112は、作業者クローラー・アプリケーション218を通じてウェブ・アプリケーション104およびマスター・クローラー・アプリケーション220と通信上結合されていてもよい。
ノードのプロセッサ208、212はたとえばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP: digital signal processor)、特定用途向け集積回路(ASIC: application specific integrated circuit)またはプログラム命令を解釈および/または実行するおよび/またはデータを処理するよう構成された他の任意のデジタルまたはアナログ回路であってもよい。プロセッサ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は、ウェブ・アプリケーションからコンテンツをロードするためのいかなる好適なアプリケーションにおいて実装されてもよい。ブラウザー・アプリケーション226、228はウェブ・クライアントとして実装されてもよい。ブラウザー・アプリケーション226、228は代替的に、ブラウザー226、228がクローラー・アプリケーション内に実装されるのでない場合、クローラー・アプリケーション218、220と協調して機能するよう構成されてもよい。ある実施形態では、クローラー・アプリケーション218、220はジャバ言語で実装されてもよい。クローラー・アプリケーション218、220はブラウザー・アプリケーション226、228と協調して動作してもよい。クローラー・アプリケーション218、220はウェブ・アプリケーション104をナビゲートするよう構成されてもよく、クリック、マウスオーバー、データ入力またはウェブ・アプリケーション104のユーザーのアクションをシミュレートまたは再現しうる他の任意の操作といったさまざまな動作をプログラム的に実行してもよい。クローラー・アプリケーション218、220は、ウェブ・アプリケーション104に適用される種々のユーザー入力を与えられたときのウェブ・アプリケーション104の可能な動作を探査するよう構成されてもよい。
各ノード上で走るクローラー・アプリケーション218、220は、ウェブ・アプリケーション104がクロールされ、試験され、使用される際のウェブ・アプリケーション104の振る舞いをモデル化しうる画面遷移グラフを生成するよう構成されていてもよい。例示的な画面遷移モデルが図5に見出されうるが、これについては後述する。そのような画面遷移グラフにおいて、状態を表すためにドットまたはノードが使用されてもよい。ここで、状態とは、ブラウザー上で観察される画面を表す。このように、画面遷移グラフは、対話的クライアント‐サーバー・アプリケーションの状態グラフであってもよい。状態間の遷移はさまざまな可能なユーザー動作を表していてもよい。たとえば、ボタン・クリックは、ある状態にあるウェブ・アプリケーションを異なる状態にジャンプさせうる。該異なる状態では、ウェブ・アプリケーションについての利用可能な動作は変化している。そのような画面遷移モデルが与えられると、所望される動作または他の診断アクションを検証するために、その後そのモデル上で有効確認検査が実行されうる。
クローリング・アプリケーションによって使用されるクロール情報は、作業者クローラー・アプリケーション218のようなクロールするアプリケーションの各インスタンスに提供されてもよい。それにより、分散式コンピューティング・システム100は、試験対象のウェブ・アプリケーション104の並列クロールを提供しうる。たとえば、クロール明細および/またはクロール・データがクロール・アプリケーション218に与えられてもよい。クロール明細はウェブ・アプリケーション104の形、ウェブ・アプリケーション104の期待される振る舞いまたはウェブ・アプリケーション104を使うことに関する他の任意の好適な情報を指示してもよい。クロール・データは、ブラウザー226によって取られるべき行動、入力されるべきデータ222または取るべき行動を指示する他の任意の情報を含んでいてもよい。たとえば、クロール明細によって定義される所与のページについて、クロール・データは、任意の数のマウスオーバーがウェブ・アプリケーション104のさまざまな個別要素に対して実施されるべきであることを指示してもよい。
マスター・クローラー・アプリケーション220は作業者ノード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は、該作業者ノード112の状態およびクロール結果をマスター・ノード110に通信し返してもよい。そのような情報は、作業者ノード112に割り当てられたさまざまなクロール・ジョブの完了状態を含んでいてもよい。この情報は、そのようなクロール・ジョブからの部分的結果をも含んでいてもよい。そのような情報は、作業者ノード112によって発見された新しいクロール・ジョブをも含んでいてもよい。作業者ノード112は、ウェブ・アプリケーション104の状態において未使用のアクションを判別することによって、新たなクロール・ジョブを発見するよう構成されていてもよい。そのようなアクションが未使用であるというのは、代わりに代替的なアクションが選ばれたからでありうる。新たなクロール・ジョブは、ウェブ・アプリケーションをクロールするための開始位置を有していてもよい。ここで、クロールは以前に未使用だったアクションを利用してもよい。マスター・ノード110は、諸作業者ノード112から受信された結果を、マスター状態グラフ236にマージするよう構成されていてもよい。
上述したように、各作業者ノード112は、クローラー・アプリケーションの一部または全部のコピーおよびクロール構成設定情報を有していてもよい。作業者ノード112は割り当てられたクロール・タスクを実行し、クロール中に発見された新たなクロール・ジョブを生成し、クロール結果および生成されたジョブをマスター・ノード110を報告してもよい。新たなクロール・ジョブは、作業者ノード112がクロール活動を実施するにつれて発見される、探査されるべき動的ウェブ・アプリケーション104の追加的な部分またはオプションを含んでいてもよい。
分散式コンピューティング・システム100は、動的ウェブ・アプリケーションの分散式の並列クロールのために同期方式を利用するよう構成されていてもよい。そのような方式は、マスター・ノード110と作業者ノード112の間の、マスター状態グラフ236のような、ウェブ・アプリケーション104のクロールの結果に関する情報の同期を可能にしてもよい。そのような方式の一環として、マスター・ノード110および作業者ノード112は、マスター状態グラフ236のような情報を同期させるためのそのようなエンティティ間の通信オーバーヘッドを減らすよう構成されていてもよい。諸作業者ノード112は、独立して、動的ウェブ・アプリケーションの自分の部分をクロールすることに続くよう構成されていてもよい。作業者ノード112は、定期的に、マスター・ノード110に、作業者ノード112の視点から見た状態グラフについての情報を提供してもよい。そのような情報は、部分的な状態グラフを含んでいてもよい。各作業者ノード112は、マスター・ノード110が見る完全なマスター状態グラフ110をもたなくてもよい。代わりに、各作業者ノード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によって保持される、どのジョブがどの作業者ノード112に割り当てられたかおよびそのようなジョブのスコープの指標の記録に基づいていてもよい。
マスター・ノード110は、ジョブ待ち行列232からのジョブを、資源待ち行列234内の作業者ノード112にスケジューリングするよう構成されていてもよい。マスター・ノード110はいかなる好適な基準に基づいてそのようなスケジューリングを行うよう構成されていてもよい。ある実施形態では、マスター・ノード110は、ジョブ待ち行列232からのジョブを資源待ち行列234内の作業者ノード112に、先入れ先出しに基づいてスケジューリングするよう構成されていてもよい。別の実施形態では、マスター・ノード100は、ジョブまたは資源の間の最良一致を判別することによって、ジョブ待ち行列232からのジョブおよび資源待ち行列234からの作業者ノード112を選択してもよい。そのような実施形態では、一致が判別されるのは、最良優先(best-first)ベースであってもよい。
最良優先基準を使って、マスター・ノード110は、スケジュールする最良候補ジョブをジョブ待ち行列232から選び、それをスケジュールする対象となる最良資源を資源待ち行列234内の利用可能な資源の間から選びうる。最良候補ジョブの選択はいかなる好適な因子に基づいていてもよい。ある実施形態では、ジョブのタイムスタンプが、最良候補ジョブを選択する際の因子として使用されてもよい。そのような実施形態では、タイムスタンプが早いジョブほど高い優先度を得てもよい。もう一つの実施形態では、ジョブについての初期化トレースの長さが、最良候補ジョブを選択する際の因子として使用されてもよい。そのような実施形態では、初期化トレースが小さいジョブほど初期化コストが低いことがあり、よって、利用可能な資源に依存して、優先されうる。
資源待ち行列234からの最良候補資源の選択は、いかなる好適な因子に基づいていてもよい。ある実施形態では、資源の挿入タイムスタンプが、最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、タイムスタンプが早い資源ほど高い優先度を得てもよい。これは資源の利用度を最大にするためである。もう一つの実施形態では、資源についての計算強度が、最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、資源の計算力が、それを適切な大きさのジョブとマッチさせるために使用されてもよい。さらにもう一つの実施形態では、資源の通信オーバーヘッドが最良候補資源を選択する際の因子として使用されてもよい。そのような実施形態では、資源のマスター・ノード110への接続トポロジーについての情報が既知であれば、マスター・ノード110とのより効率的な、より短い、あるいはより高速な通信をもつ資源に優先度を与えるために該情報が使用できる。そのような情報は、作業者ノード112がタスクを完了する統計的な結果によって決定されてもよい。
最良候補資源または最良候補ジョブのいずれかを決定するには、たとえば上記の因子の関数、たとえば重み付け和が、最良候補を決定するために用いられてもよい。そのような重み付け和は、最良候補を選ぶためのコスト関数として使用されてもよい。そのような場合、ジョブおよび資源のタイムスタンプが、ジョブおよび資源を選ぶための唯一の基準として使用されるならば、その方式は、基本的な待ち行列データ構造に典型的な先入れ先出し機構になり始める。
マスター・ノード110は、作業者ノード112から受領されたトレースおよび状態をマスター状態グラフに統合するよう構成されていてもよい。作業者ノード112は、完了され、クロールされたウェブ・アプリケーションの振る舞いのサブツリー(sub-tree)またはトレース(trace)を表す完了された計算を提供してもよい。マスター・ノード110はまた、一つまたは複数の作業者ノード112によって決定される新たな計算の指標をも受領してもよい。作業者ノード112からのトレースおよび状態の受領に際して、マスター・ノード110は、マスター状態グラフにおいてすでに決定された情報に比較して、あるいは他の作業者ノード112に割り当てられたジョブにおける状態に比較して、受領された状態またはトレース中に重複が存在するかどうかを判定するよう検査するよう構成されていてもよい。そのような重複が検出された場合、マスター・ノード110は、ジョブ待ち行列232から重複ジョブをパージするよう構成されていてもよい。マスター・ノード110はまた、パージ・コマンドを発することによって、作業者ノード112上で現在実行されている重複クロールをパージするよう構成されていてもよい。マスター・ノード110はまた、重複を除去して、受領された情報を、マスター状態グラフ中の情報とマージするよう構成されていてもよい。
図4は、遷移グラフ・モデル402の図解を通じて例示的な作業者ノード112の動作の結果を示している。上述したように、作業者ノード112は、クロール・アプリケーションのコピーを実行するよう構成されていてもよい。作業者ノード112はまた、試験されるべきウェブ・アプリケーションのための適切なクロール設定を含んでいてもよい。作業者ノード112は、マスター・ノード110によって与えられる部分的トレース404を用いてその動作を初期化するよう構成されていてもよい。そのような部分的トレース404は、作業者ノード112がマスター状態グラフ236の完全なコピーを用いてその動作を初期化することに対する代替であってもよい。しかしながら、マスター状態グラフ236を用いたそのような初期化は、作業者ノード112とマスター・ノード110の間の通信の面でよりコスト高となることがある。そのような部分的トレース404は、マスター状態グラフ内のS0のような特定の状態に到達するために、index.jspのようなウェブ・アプリケーション・スタート・ページ406からの取る必要のあるアクションの記述を含んでいてもよい。ここで、前記特定の状態は、マスター・ノード110によって割り当てられたジョブの一部として作業者ノード112によってクロールされるべきものである。作業者ノード112は、種々の分枝およびアクションを調べ、新たなジョブのような他の情報を記憶することによって、S0およびS1のようなその子状態からクロールすることを続けるよう構成されていてもよい。作業者ノード112は、ジョブが完了していなくても、ジョブのクロールにおける、そのトレースのクロールが終了する点に到達しうる。そのようなケースはのちに論じる。
もう一つの例では、作業者ノード112がクロールすべき動的ウェブ・アプリケーション内部の特定のページを与えられ、そのようなページ上で選択されるべきメニュー項目の選択肢を提示された場合、作業者ノード112は、該メニューにおける最初の選択肢を選択し、動的ウェブ・アプリケーションのその後の動作を探査し、残りの選択されなかったメニュー選択肢を表す状態またはアクションを将来のジョブとして記憶するよう構成されていてもよい。作業者ノード112が動的ウェブ・アプリケーションの、自分が割り当てられた部分をクロールする際、作業者ノード112は、遭遇した状態およびそのような状態に到達するために取られるアクションを表すローカル状態グラフを生成してもよい。作業者ノード112は、以前に見た状態に到達する場合、クロールを打ち切るよう構成されていてもよい。そのような状態は、ローカル状態グラフ内に存在する状態を含んでいてもよい。作業者ノード112は、クロールが、クロール明細によって設定された深さ限界または時間限界に達する場合にクロールを打ち切るよう構成されていてもよい。たとえば、ある特定の経路に沿って作業者ノード112がその後の10個のアクションの深さに達すると、作業者ノード112はそのクロールを終了してもよい。さらに、作業者ノード112は、マスター・ノード110からパージ・コマンドを受け取る場合にクロールを終了するよう構成されていてもよい。
作業者ノード112は、新しい状態、ウェブ・アプリケーションにおいて取られた決定経路を表す新しいトレースおよび新しいジョブについての情報を含む情報を、定期的にマスター・ノード110に送信するよう構成されていてもよい。そのような送信の定期的な性質は、分散式コンピューティング・システム100によって決定されるところの、通信と計算のトレードオフに基づいて静的にまたは動的に設定されてもよい。所与の分散式コンピューティング・システムの特定の定期的な性質は、分散式コンピューティング・システムの資源、試験される動的ウェブ・アプリケーションの性質または他の予見されない因子に依存してもよい。周期的な性質の特定また最適な値は、経験的に決定されてもよい。終了すると、作業者ノード112は、マスター・ノード110における利用可能な資源待ち行列234に自らを登録するよう構成されていてもよい。
分散式コンピューティング・システム100は、動的ウェブ・アプリケーションのステートレスな分散式の並列クロールのための技法を利用するよう構成されていてもよい。ある実施形態では、分散式コンピューティング・システム100は、クロールのステートレスな並列化またはステートフルな並列化の実施の間で選択するよう構成されていてもよい。クロールのステートフルな並列化は、本稿に記載されるステップを含んでいてもよい。ここで、マスター状態グラフに比較されるとき、作業者ノード112から返された結果の間の重複を探すために諸状態がマスター・ノード110において比較される。クロールのステートレスな並列化はマスター・ノード110に、そのような重複を消去しようとしないようにさせてもよく、結果として得られるマスター状態グラフは、実行ツリーにおけるより低く現れる状態がより高く現れる状態の重複であることを示さなくてもよい。ステートフルな並列化方式は、根底にある状態グラフがかなりの状態共有、状態再収束(reconvergence)およびサイクルをもつときにより有用でありうる。分散式コンピューティング・システム100は、所与の動的ウェブ・アプリケーションの状態グラフにほとんど再収束が存在しない場合に;たとえば状態グラフが主としてツリー様構造をもつ場合に、ステートレスな並列化を使うよう構成されていてもよい。ステートレスな並列化が分散式コンピューティング・システム100によって用いられるとき、マスターおよび作業者ノード112は状態比較を省略してもよい。そのような状態比較の省略は、状態グラフ・マージがより少数の資源で達成されうるので、マスター・ノード110の動作を高速化しうる。マスター・ノード110の要求されるパージ動作は、ステートレスな並列化の状態に依存して、なくしてもよい。同様に、作業者ノード112におけるクロール動作を高速化してもよい。さらに、作業者ノード112は、ステートレスな並列化を使うとき、計算の終わりに一度だけ結果を送信するよう構成されていてもよい。ただし、結果として得られるマスター状態グラフは、複数の位置において現れる状態を含むことがある。
作業者ノード112は、その動作および新たに発見されたジョブの状態を、任意の好適な手段を通じて圧縮するよう構成されていてもよい。ある実施形態では、作業者ノード112は、ある動的ウェブ・アプリケーションの相続くページが、前の状態から少ししか違わない状態を表すとき、そのような状態圧縮を使うよう構成されていてもよい。たとえば、AJAXビルドされたウェブ・アプリケーションの所与の画面に対する所与のユーザー・アクションが、現在の画面の小さな部分のみを変更または更新する結果を生じることがある。このように、こうして得られた新たな画面はその内容において、前の画面からわずかしか違わない。このように、作業者ノード112は、動的ウェブ・アプリケーションの相続く状態の文書オブジェクト・モデル間の差分のみを記憶するよう構成されていてもよく、その差分がその後マスター・ノード110に送信されて、該マスターによって圧縮解除されてそれぞれの状態の完全な表現を得ることができる。状態圧縮は、相続く状態の間の差分が所与の閾値より小さいときに有効にされてもよい。そのような閾値は、動的ウェブ・アプリケーションの相続く状態間の相対的なまたは絶対的な差に関して設定されてもよい。作業者ノード112は、現在クロールされている具体的なウェブ・アプリケーション・ページに依存して、状態圧縮を有効化および無効化するよう構成されていてもよい。
分散式コンピューティング・システム100は、いかなる好適な動的ウェブ・アプリケーションをクロールするよう構成されていてもよい。図5は、分散式コンピューティング・システム100によってクロールされうる例示的な動的ウェブ・アプリケーション500の画面遷移グラフである。この画面遷移グラフは状態グラフを含んでいてもよい。動的ウェブ・アプリケーション500は、二つのボタン、「ボタン1」および「ボタン2」を表示するよう構成されていてもよい。「ボタン1」および「ボタン2」の外観および外観に関連する機能は、ユーザーからのさまざまな以前のアクションに依存してもよい。動的ウェブ・アプリケーション500が存在しうる種々の状態がS1、S2、S3、S4によって表されている。図5の画面遷移グラフは、動的ウェブ・アプリケーション500の可能な状態を完全に表現しうる。このように、図5の画面遷移グラフは、動的ウェブ・アプリケーション500の動的にクロールの完了した結果であってもよい。
動的ウェブ・アプリケーション500のコードは次によって具現されうる:
このように、動的ウェブ・アプリケーション500は「ボタン1」の外観を変えるよう構成されていてもよい。ここで、「ボタン1」は最初「ここをクリック!」と表示し、クリックされると「クリック済み」と表示するよう設定されていてもよい。「ボタン1」は、その後のクリックに際してこれらの値の間で表示をトグルさせるよう構成されていてもよい。「ボタン2」は最初「ここもクリック!」と表示し、クリックされると無効となるよう構成されていてもよい。これは図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の状態にはいったら、動的ウェブ・アプリケーション500は状態S1およびS2に戻ることはできない。他方、「ボタン1」の状態は、やはり現在の状態に依存するが、トグルされてもよい。そのようなサイクルは、S1とS2の間のアクションにおいて、あるいはS3とS4の間のアクションにおいて存在しうる。
動作では、図3に戻ると、分散式コンピューティング・システム100は、動的ウェブ・アプリケーションを含む対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールを調整する技法を利用してもよい。
マスター・ノード110は、動的ウェブ・アプリケーションのクロールを調整するために必要ないかなる好適なアクションを取ってもよい。ある実施形態では、マスター・ノード110は、ペンディングのジョブを、そのようなジョブを実行するために待っている資源にスケジュールしてもよい。もう一つの実施形態では、マスター・ノード110は、作業者ノード112から受領された結果をマージしてもよい。そのような実施形態では、マスター・ノード110はそのような結果を、他の作業者ノード112から以前に受領された結果とマージしてもよい。
ある実施形態では、マスター・ノード110のタスクは、次の擬似コードの一部または全部を使って実装されてもよい:
上記の擬似コードにおいて、masterSTGはクロールされるアプリケーションのマスター画面遷移グラフ(screen transition graph)モデルを表しうる。図5はたとえば、動的ウェブ・アプリケーション500の完了されたマスター画面遷移グラフを表しうる。そのようなマスター画面遷移グラフはマスター状態グラフ236内に記憶されてもよい。JobQは、試験対象のウェブ・アプリケーションのクロールの一環として処理されるべきジョブのペンディングの待ち行列を表していてもよい。ある実施形態では、jobQはFIFO待ち行列として実装されてもよい。ResourceQは、ジョブを割り当てられるべき作業者ノード112のような資源のペンディングの待ち行列を表していてもよい。ある実施形態では、resourceQは先入れ先出し待ち行列として動作してもよい。
マスター・ノード110は、動的ウェブ・アプリケーションのクロールされるべき諸部分のようなペンディングのジョブを、作業者ノード112のような待っている資源にスケジュールしてもよい。上に示したように、マスター・ノード110は、JobQおよびresourceQの両方にエントリーが存在する間、ジョブ待ち行列232のいちばん上から第一のジョブを取得し、resourceQから最初の資源を取得し、前記ジョブを前記資源によって実施されるべくスケジュールしてもよい。jobQからジョブを、resourceQから資源を取得するには、いかなる好適な方法が使用されてもよい。ある実施形態では、最も長い間ペンディングであるジョブおよび/または資源が取得されてもよい。
マスター・ノード110は、作業者ノード112から返された作業者結果を、すでに生成されたトレースとマージしてもよい。マスター・ノード110と同期する各作業者ノード112は、マスター・ノード110にいかなる好適な情報を送ってもよい。実施形態では、そのような作業者ノード112は少なくとも二つのデータ項目をマスター・ノード110に送ってもよい。圧縮されたトレース(compTraceのような)と、作業者ノード112が動的ウェブ・アプリケーションの一部をクロールしている間に遭遇した(newJobsのような)ジョブの新たなセットとである。マスター・ノード110はそのような情報を、jobQ、resourceQおよびmasterSTGのようなマスター・ノード110において保持されている情報にマージしてもよい。マスター・ノード110はそのようなタスクをいかなる好適な仕方で実行してもよい。
ペンディングのジョブをスケジュールするのと並行して、マスター・ノード110は、作業者ノード112が遭遇した新たなトレースに関して受領された情報を、マスター画面遷移図にマージしてもよい。ある実施形態では、マスター・ノード110は、作業者ノード112によって圧縮された返されたトレースを圧縮解除してもよい。トレースは、状態および該状態間の遷移を含んでいてもよい。マスター・ノード110は、返されたトレースに見出される各状態について、そのような状態がマスター状態図に存在するかどうかを判定してもよい。そのような状態が存在しない場合、それはマスター状態図に加えられる。返されたトレースにおける各遷移について、マスター・ノード110はそのような遷移がマスター状態図に存在するかどうかを判定してもよい。そのような遷移が存在しない場合、それはマスター状態図に加えられる。まず新たな状態を判定して、その後新たな遷移に続くことが有利でありうる。
マスター・ノード110は、作業者ノード112によって遭遇または生成された新たなジョブに関する情報を、ジョブ待ち行列232にマージしてもよい。マスター・ノード110は、そのような情報をいかなる好適な仕方でマージしてもよい。ある実施形態では、マスター・ノード110は、マスター・ノード110に返されたnewJobs内の各ジョブについて、そのジョブがjobQ内にすでに存在しているかどうかを判定してもよい。そのジョブがjobQ内に存在しなければ、jobQに加えられてもよい。
図6a〜図6cは、マスター・ノード110がどのようにして作業者ノード112からの情報を加えてマスター画面遷移グラフを生成するかの例を示している。図6aは、空の画面遷移グラフが作業者ノード112からの返されたトレースと組み合わされうる場合を示している。返されたトレースにおいて、作業者ノード112は第一の状態S1から、「ボタン1」をクリックして第二の状態S2に進むことによってクロールし、再び「ボタン1」をクリックすることによって状態S1に戻るクロールをした。マスター画面遷移グラフには何の状態も遷移も既存ではないので、組み合わせの結果は、返されたトレースそのものとなる。状態S2における「ボタン2」のクリックのような選ばれなかったオプションは、完了されるべき将来のジョブを表しうる。これら将来のジョブは作業者ノード112によってマスター・ノード110に返され、ジョブ待ち行列232に加えられてもよい。
図6bは、マスター・ノード110がどのようにしてもう一つの作業者ノード112の結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示している。図6bにおける返されたトレースは、作業者ノード112が第一の状態S1から出発して、「ボタン2」をクリックすることによって状態S4にクロールした結果であってもよい。作業者ノード112は次いで、「ボタン1」をクリックすることによって状態S3にクロールし、もう一度「ボタン1」をクリックすることによって状態S4にクロールして戻っていてもよい。この返されたトレースを既存のマスター画面遷移グラフに加えることにより、マスター・ノード110は、返されたトレースのインスタンスを削ってもよいが、他の点では両方の状態および遷移についての二つのグラフの和集合を表しうる。作業者ノード112は、図6aにおいてトレースを返したものと同じまたは異なる作業者ノード112であってよい。
図6cは、マスター・ノード110がどのようにしてさらにもう一つの作業者ノード112の結果を、前の図から帰結する既存のマスター画面遷移グラフに加えうるかを示している。図6cにおける返されたトレースは、作業者ノード112が第一の状態S1から「ボタン1」をクリックして状態S2に遷移し、次いで「ボタン2」をクリックしてS3に遷移した結果であってもよい。ひとたびS3にはいると、作業者ノード112は「ボタン1」をクリックして状態S4にクロールし、再び「ボタン1」をクリックして状態S3に戻ってもよい。この返されたトレースを既存のマスター画面遷移グラフに加えることにより、マスター・ノード110は、S2からS3への遷移をマスター画面遷移グラフに加えてもよい。返されたトレースの残りの部分はマスター画面遷移グラフにすでに存在しているからである。作業者ノード112は、図6aおよび図6bにおいてトレースを返したものと同じまたは異なる作業者ノード112であってよい。作業者ノード112は、マスター・ノード110から出発状態としてS2を受領していてもよい。そのような命令は、作業者ノード112がS2において利用可能だが「ボタン2」を選択しないいくつかの動作を前に探査するといった、ジョブ待ち行列232に加えられた前に同定されたジョブから生じたのであってもよい。
図3に戻ると、分散式コンピューティング・システム100は、並列の分散環境において、動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの効率的な部分的クロールのための技法のための技法を利用してもよい。分散式コンピューティング・システム100における作業者ノード112は、動的ウェブ・アプリケーションの諸部分をクロールして、結果として発見されるトレースをマスター・ノード110に報告してもよい。作業者ノード112は動的ウェブ・アプリケーションをいかなる好適な仕方でクロールしてもよい。
一例では、作業者ノード112のタスクは、次の擬似コードの一部または全部を使って実装されてもよい。
マスター・ノード110は、LoadConfig(config)のような関数を使って、作業者ノード112を将来のクロール・タスクのために準備するために、構成設定configに従ってw1のような作業者ノード112上の作業者クローラー・アプリケーション218を初期化してもよい。ある実施形態では、作業者ノード112自身が作業者ノード112上の作業者クローラー・アプリケーション218を初期化してもよい。configは、作業者ノード112を初期化するためのいかなる好適な情報を含んでいてもよい。ある実施形態では、configは、クロールされるべき動的ウェブ・アプリケーションのurlのようなアドレスを含んでいてもよい。もう一つの実施形態では、configは、どのようにして動的ウェブ・アプリケーションをクロールするかについて作業者ノード112のための指令を含んでいてもよい。そのような指令は、標的〔ターゲット〕文書オブジェクト・モデル(DOM: document object model)エレメントに対する指令を含んでいてもよい。たとえばhtmlの<a>タグである。そのような指令はまた、動的ウェブ・ページ上で実行されるユーザー・アクションをも含んでいてもよい。たとえば、特定の(specific)または範疇をまとめた(categorical)項目をクリックすること、および/またはログイン・ページ上での認証データのようなクロール中の適切な段階で入力すべき特定のユーザー・データである。
ある実施形態では、この初期化プロセスは、文字列のような一組のパラメータを、作業者ノード112上で前に利用可能であった事前ビルドされたクローラー・アプリケーションに渡すことを利用してもよい。そのような事前ビルドされたクローラー・アプリケーションは、作業者クローラー・アプリケーション218において実装されてもよい。もう一つの実施形態では、この初期化プロセスは、config内の指令に基づいて新たなソース・コードを生成してもよく、そのソース・コードがその後コンパイルされて、w1上のクローラー・アプリケーションをドライブするために使われてもよい。そのようなクローラー・アプリケーションは、作業者クローラー・アプリケーション218において動作してもよい。新たなソース・コードの生成またはコンパイルは、マスター・ノード110上で、マスター・クローラー・アプリケーション220のようなアプリケーションにおいて実行されてもよい。新たなソース・コードの生成またはコンパイルは作業者ノード112上で実行されてもよい。
作業者ノード112は、指定された開始位置から出発して動的ウェブ・アプリケーションをクロールしてもよい。指定された開始位置は、前に決定された状態および遷移を含む既存の既知のトレースにおいて実装されてもよい。ある実施形態では、作業者ノード112は、上に示したような関数手順WorkerCrawlTrace(seedTrace)を利用してもよい。seedTraceはマスター・ノード110から作業者ノード112に渡される開始トレースであってもよい。
動的ウェブ・アプリケーションをクロールする前に、作業者ノード112はlocalStateGraphのようなローカル状態グラフを生成し、それを空に設定してもよい。作業者ノード112はクロール中に発見される新たなジョブを含めるためのnewJobsのような構造を生成し、それを空に設定してもよい。作業者ノード112は初期画面をロードしてもよい。作業者ノードはそれを行うために、上に示したようなLoadPage(url)のような関数を使用してもよい。それはinitScreenのような開始アドレスをその作業者クローラー・アプリケーション218にロードすることにより、当該アドレスに対応するウェブ・アプリケーションをクロールするための準備をする。ある実施形態では、アドレスはクロールされるべきウェブ・アプリケーションの初期ページまたはホーム・ページである。開始アドレスをウェブ・クローラー・アプリケーションにロードした結果は、currentStateのような構造中に記憶されてもよい。
作業者ノード112は次いで、所望される状態に到達するためにトレースをプログラム的に実行してもよい。そのような実行は関数ExecuteTrace(SeedTrace)を使ってもよい。ExecuteTraceは、SeedTraceにおける一連のアクションを実行するためにExecuteAction(action)のような関数を呼び出してもよい。actionは、特定のページに対する作業者ノード112の直接の動作を指揮する一つまたは複数のパラメータを含んでいてもよい。ある実施形態では、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内に存在する場合、作業者ノード112はその状態が以前に訪問されたことがあると判定してもよい。NotVisited関数は、その状態が以前に訪問されたことがある場合には偽を返し、それ以外の場合には真を返してもよい。そのような判定、作業者ノードが割り当てられたアプリケーションの限界内で動作しているかどうかは、関数WithinResourceBound(localStateGraph)のような任意の好適な方法を通じてできる。そのような例では、作業者ノード112は、localStateGraphのトレースが、当該ノードが可能性としてはLoadConfigを使って初期化される際に用いられたconfigで指定されている資源限界内であるかどうかを判定してもよい。そのような限界は、いかなる好適なメトリックを通じて定義されてもよい。ある実施形態では、localStateGraphをなすトレース中の状態の数が、最大閾値と比較されてもよい。もう一つの実施形態では、localStateGraphをなすトレースにおいてクロールが実行された深さが閾値と比較されてもよい。さらにもう一つの実施形態では、現在のクロール・タスクの開始以来経過した時間が最大閾値と比較されてもよい。さまざまな実施形態において、configにおいて指定された資源限界において二つ以上のそのような基準が組み合わされていてもよい。
そのようなシーケンスは以下のステップの一つまたは複数を含んでいてもよい。作業者ノード112は、localStateGraphのようなローカル状態グラフがマスター・ノード110と同期される準備ができているかどうかを判定してもよく、もし準備ができていれば、localStateGraphを、newJobs構造内のもののような生成された新たなジョブがあればそれとともに、同期してもよい。作業者ノード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はマスター・ノード110と同期してもよい。作業者ノード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のようなグラフの一部に、該一部が将来の同期イベントにおいて再送信されないよう、注釈付けしてもよい。そのようなマークは、CompressGraphまたはSendToMasterのような関数によって、状態グラフの所定の部分がマスター・ノード110に再送信される必要がないことを判別するために使用されてもよい。
状態が以前に訪問されたことがあるとき、あるいはローカル状態グラフのクロールが定義された資源限界を超えたとき、作業者ノード112はマスター・ノード110と同期してもよい。ある実施形態では、作業者ノード112は、このノード上の最後の同期イベント以降に生成されたグラフの諸部分を表すlocalStateGraphおよびクロール中に生成され、マスター・ノード110によって割り当てられる作業者ノード112によって将来実行される可能性があるペンディング・クロール・ジョブのリストを含むnewJobsを使ってマスター・ノード110と同期してもよい。localStateGraphは圧縮され、deltaTraceのような構造中に記憶されてもよい。deltaTraceは、動的ウェブ・アプリケーションのトレースのうち、作業者ノードの観点から、マスター・ノード110に含まれていないかもしれない諸部分を含んでいてもよい。localStateGraphのような既存のローカル状態グラフは、マスター・ノード110と同期されたとしてマークされてもよい。作業者ノード112は、マスター・ノード110と同期されるべき新たなジョブを含む構造を、リセットするか空にするかしてもよい。
分散式コンピューティング・システム100は、動的ウェブ・アプリケーションを含む対話的クライアント‐サーバー・アプリケーションのクロールにおいて、状態情報の圧縮技法を利用してもよい。上述したように、作業者ノード112は状態グラフを圧縮して同期の際にマスター・ノード110に送信される情報を減らしてもよく、マスター・ノード110は状態グラフを圧縮解除して新たに発見された状態を再構成してもよい。
ある実施形態では、作業者ノード112は、動的ウェブ・アプリケーションにおいて遭遇された、前の画面の軽微な修正しか含まない逐次の状態または画面を圧縮することによって、状態グラフを最適化してもよい。そのような実施形態では、二つの相続く画面は根底にあるDOMの多くを共有する。たとえば、図6の画面遷移グラフについて、上に説明した初期状態S1の根底にあるDOM表現は、「ボタン1」に割り当てられた値「ここをクリック!」および「ボタン2」に割り当てられた値「ここもクリック!」を示す。この画面で「ボタン1」がクリックされて状態S2への遷移が起こるとき、根底にあるDOMにおける唯一の変化は、エレメント/HTML[1]/BODY[1]/INPUT[1]の値属性が「ここをクリック!」から「クリック済み」に変わることである。このように、状態S2は完全な表現の代わりに、下記によって表現されうる。
このように、ある実施形態において、作業者ノード112は、動的ウェブ・アプリケーションの現在の画面(上の例ではS2)の、該現在の画面が直前のまたは基準画面(上の例ではS1)から異なっている部分のみをマークし、表現してもよい。作業者ノード112は、現在の画面の、前の画面から異なっている部分のみをマークし、表現することを、いかなる好適な仕方で行ってもよい。ある実施形態では、作業者ノード112はこれらのタスクを、次の擬似コードの全部または一部を通じて達成してもよい。
作業者ノード112は、refScrnのような基準画面とnewScrnのような標的画面との間で状態または画面を圧縮してもよい。標的画面は、その圧縮された表現が必要とされている画面であってもよい。基準画面はいかなる好適な画面であってもよい。基準画面は、標的画面との類似性に基づいて選択されてもよい。よって、標的画面を訪れる直前に訪れた画面または別の先行画面が選ばれる可能性が高い。基準画面は、圧縮が実行される基準を与えてもよい。作業者ノード112は状態グラフ内の所与の状態の圧縮を、主として二つのフェーズにおいて行ってもよい:後述するマーク付けフェーズと抽出フェーズである。
作業者ノード112は標的画面内の各ノードを初期化し、次いでマーク付けフェーズにはいり、次いで抽出フェーズにはいってもよい。この抽出フェーズで、マーク付けフェーズの結果が抽出され、圧縮されたフェーズとして返される。
初期化の間、作業者ノード112は、refScrnのような基準画面を基準としてnewScrnのような新たにクロールされた標的画面の状態を圧縮するために、まず標的画面内のすべてのノードを初期化してもよい。作業者ノード112は、当該ノード中の変化を表すおよび子ノード中の変化を表すマーカーを偽に設定してもよい。作業者ノード112は、所与の画面または問題の画面のDOMにおいて各ノードに取り付けられるべき二つのマーカーを設定してもよい。第一のマーカーは、基準画面と標的画面の間で現在のノードになされた変化を表してもよい。第一のマーカーはchangeと記されてもよい。さまざまな実施形態において、changeは三つの異なる値をもちうる:「false」〔偽〕、「attr」〔属性〕または「tag」〔タグ〕である。「false」値はノードが標的画面と基準画面で同じことを表しうる。そのような表示はタグ名、属性または他の任意の好適な特性を用いてできる。「attr」値はそのノードが、標的画面において、基準画面におけるのと同じタグ名をもつが、属性のうち一つまたは複数の属性の値が異なることを表しうる。「tag」値はこのノードは両画面において構造的に異なる表現をもつことを表しうる。たとえば、そのような構造的に異なる表現は、両画面でその位置において異なるタグをもつノードを含んでいてもよい。あるいは基準画面においてその位置にノードが存在しない場合、あるいは基準画面においてその位置により多数の子をもつノードが存在する場合がある。第二のマーカーは、そのノードの子孫のうちの一つまたは複数が、そのchangeマーカーを偽でない値にセットされており、よってそのノードは、変化を経験した子孫への経路を与えるために、圧縮された表現において存在する必要があるかもしれないことを表しうる。第二のマーカーはchildDiffと記されてもよい。childDiffは真または偽の値を受け容れうる。ここで、真の値は当該ノードの子孫に変化が起こっていることを示す。
次に、マーク付けフェーズにおいて、作業者ノード112は標的画面を基準画面と比較してもよい。標的画面のどの部分が基準画面と異なっているかを識別し、しかるべくマーク付けするためである。作業者ノード112はこのタスクをいかなる好適な方法を通じて達成してもよい。ある実施形態では、作業者ノード112は関数MarkChangeを使って基準画面と新画面を比較してもよい。作業者ノード112は、標的画面の、基準画面に対して変化した部分をマークしてもよい。作業者ノード112は、標的画面のルートからそのようなマーク付けを開始してもよい。
標的画面と基準画面の間の相違にマークする際、作業者ノード112はnodeのような開始ノードから開始してもよい。これは、標的画面のルートに対応してもよい。作業者ノード112はnodeが基準画面におけるその対応物と異なるかどうかを判定してもよい。もし異なれば、作業者ノード112は基準画面と標的画面の間に変化があったと判定してもよい。作業者ノード112はそのような判定を、基準画面にnodeが存在するかどうかを検査し、基準画面中のnodeの双子の相手を取得し、nodeの子の数と基準画面中のnodeの双子の相手の子の数とを比較することによって行ってもよい。
基準画面中にnodeが存在するかどうかを検査する際、作業者ノード112は、nodeのような特定のDOMエレメントと同じxpath〔x経路〕位置および同じタグ名をもつノードが標的画面に存在するかどうかを判定してもよい。作業者ノード112は、そのような判定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112は、上に示したExists(node,refScrn)関数を使うことによって判定を確かなものにしてもよい。この関数は、newScrn中のDOMエレメントnodeと同じxpath位置に同じタグ名でrefScrn中にノードがある場合にかつその場合にのみ真を返してもよい。
nodeの双子の相手を取得する際、作業者ノード112は基準画面中の特定の指定されたノードを見出し、返してもよい。作業者ノード112はそのような発見をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112はそのような判定を、上に示したGetTwin(node,refScrn)関数を使って行ってもよい。作業者ノード112は、上記のExists()によって使用されるxpath対応基準を使ってrefScrn中に存在するnodeに対応するノードを返してもよい。
nodeの子の数をnodeの双子の相手の子の数と比べる際、作業者ノード112は、ある画面または状態のDOMツリーにおける所与のノードの子ノードの数を決定しうる。作業者ノード112はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112は、上に示したようなNumChild(node)関数を使ってそのような決定を行ってもよい。
nodeの双子の対応物が基準画面中に存在し、それがnodeと同数以下の子を持つ場合、作業者ノード112はnodeの双子の相手がnodeと厳密に同じ属性をもつかどうかを判定し、もしそうでなければ、nodeおよびその親のマーカーを、nodeのchangedマーカーを「attrs」に割り当てることによってそのような条件を反映し、nodeの親を取得して該親のchildDiffマーカーを「true」に変更するよう変更してもよい。
nodeの親を取得する際、作業者ノード112はDOMツリー内の指定されたノードの親ノードを決定してもよい。作業者ノード112はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112はそのような決定を、上に示したようなGetParent(node)関数を使って行ってもよい。この関数は、DOMツリー内のnodeの親ノードを返しうる。
双子ノードの属性がnodeと同一であれば、作業者ノード112はnodeが不変であると記してもよい。さらに、Exists(node,refScrn)&NumChild(node)≧NumChild(GetTwin(node,refScrn))〔refScrnにnodeが存在し、かつnodeの子の数が双子の相手のnodeの子の数以上〕が真を返す場合、nodeの各子について、作業者ノード112は上述したマーキング方式を使ってその子を再帰的に処理してもよい。ある実施形態では、そのようなマーキングは、nodeについて見出された各子についてMarkChangeを呼び出すことによって達成されてもよい。
nodeの子を決定する際、作業者ノード112はDOMツリー内の指定されたノードの子ノードを決定してもよい。作業者ノード112はそのような決定をいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112はそのような決定を、上に示したようなChildNodes(node)を使って行ってもよい。この関数は、DOMツリー内のnodeのような指定されたノードの子ノードの順序付けられたリストを返してもよい。
そうでなく、可能性としてはExists(node;refScrn)&NumChild(node)≧NumChild(GetTwin(node;refScrn))を呼び出し偽の戻り値を得ることによって、nodeに関して基準画面と標的画面の間に変化があった場合、作業者ノード112はnodeが変化したと記してもよい。ある実施形態では、作業者ノード112は、nodeのchangedタグを「tag」に設定することによってそのような指定を行ってもよい。さらに、作業者ノード112はnodeの親のタグを、該親が変化した子を持つことを示すよう設定してもよい。これは、GetParent(node)を呼び出し、その結果のchildDiffパラメータを「真」に設定することによって達成されてもよい。
最後に、作業者ノード112はnodeが変化した子をもつかどうかを判定し、もしそうであればnodeの親のタグを、nodeの親が変化した子をもつことを示すよう設定してもよい。これは、nodeのchildDiffパラメータを検査し、GetParent(node)を呼び出し、その結果のchildDiffパラメータを「真」に設定することによって達成されてもよい。
抽出フェーズでは、作業者ノード112は、標的画面と基準画面の間の差のマーキングを使って、基準画面を基準としての標的画面の圧縮された表現を抽出してもよい。作業者ノード112はこのタスクをいかなる好適な方法を通じて行ってもよい。ある実施形態では、作業者ノード112は、標的画面の圧縮された表現を抽出するために関数ExtractDeltaを使ってもよい。作業者ノード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、その属性および子孫ノードのサブツリー714のようなDOMノード内の変化として反映されてもよい。さらに、HEADノードの属性706のみに対する変化があったことがありうる。これは、「ここをクリック!」ボタンをクリックした結果であってもよい。それにより、スクリプトの諸部分がアクティブ化されてボタン値への変更がなされる。マーク付けされたDOMモデルのこれらの諸部分は変化したとマーク付けされてもよく、よって返されるべきDOMモデルの圧縮されたバージョンに含められてもよい。一方、DOMモデルの他の多くの部分716、718は二つの状態S1とS2の間で不変のままでありうる。よって、これらの部分は不変とマークされ、よって返されるべきDOMモデルの圧縮されたバージョンでは除去されてもよい。HTMLノード702、HEADノード704およびBODYノード708のようないくつかのセクションは二つの状態S1とS2の間で不変のままでありうるが、変化した子を有することがある。よって、これらのセクションは、変化した部分への経路〔パス〕を提供するよう、返されるべきDOMモデルの圧縮されたバージョン内に保持されてもよい。
このように、作業者ノード112は図7の保持されるとマークされた諸部分を、deltaScrnのような圧縮された表現として返してもよい。そのような圧縮された表現は、deltaScrnおよびrefScrnからもとの表現newScrnを一意的かつ完全に再構成するのに十分な情報を有していてもよい。
図8aおよび図8bは、動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションの分散式の並列クロールを調整するための方法800の例示的な実施形態である。分散式コンピューティング・システム100の動作において上記した擬似コードが方法800の一部または全部を実装してもよい。
ステップ805では、ウェブ・アプリケーションがクロールのために初期化されてもよい。そのような初期化は、該ウェブ・アプリケーションをクロールするための開始位置または初期トレースを表現して、一つまたは複数の初期ジョブを決定することを含んでいてもよい。ある実施形態では、生成される初期ジョブの数は、並列にそのようなジョブを実行するのに利用可能な資源の数より多くてもよい。ステップ810では、任意のそのような決定されたジョブがジョブ待ち行列に加えられてもよい。
方法800の二つ以上の分枝が並列して実行されてもよい。一つのそのような分枝はステップ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では、ローカル・グラフに従って、現在状態が以前に訪問されたことがあるかどうかが判定されてもよい。もしそうであれば、ジョブのクロールは終了されてもよく、方法800はステップ975に進んでもよい。もしそうでなければ、ステップ920において、ジョブの実行が定義された限界内であるかどうかが判定されてもよい。ジョブの実行が定義された限界内であるかどうかを判定するいかなる好適な方法が使用されてもよい。もしそうでなければ、ジョブのクロールは終了されてもよく、方法800はステップ975に進んでもよい。もしそうであれば、ステップ930において、状態グラフが同期されるべく準備ができているかどうかが判定されてもよい。そのような判定は、状態グラフを定期的に同期させてもよい。もしそうであれば、ステップ932において、状態グラフはマスター状態グラフと同期されてもよく、方法はステップ935に進んでもよい。もしそうでなければ、方法はステップ935に進んでもよい。
ステップ935では、ウェブ・アプリケーションのクロールは、まず現在状態において利用できる可能なアクションを判別することによって行われてもよい。ある実施形態では、そのようなアクションは、状態のDOM内に含まれる情報に基づいていてもよい。ステップ940では、それらの可能なアクションは未実行のアクションのリストに加えられてもよい。ステップ945では、実行されるべきアクションが、未実行のアクションのリストから選択されてもよい。どのアクションが実行されるべきかを選択するには、いかなる好適な基準、クロール技術または検索ストラテジーが使用されてもよい。選択されたアクションはステップ950において未実行アクションリストから除去されてもよく、次いでステップ955において実行されてもよい。ステップ960では、ステップ955の実行の結果が、新たな現在状態として指定されてもよい。ステップ965では、一つまたは複数のジョブが、未実行アクションのリストから生成されてもよく、ステップ970では新たなジョブが新たなジョブのリストに加えられてもよい。そのような新たなジョブのリストは、資源による将来の実行のために、同期の際に、ジョブ待ち行列に送信されてもよい。方法800は次いでステップ915に戻ってもよい。
ステップ975では、状態グラフはマスター状態グラフと同期されてもよい。このステップは、ステップ932と同じ仕方で実装されてもよい。ジョブの実行に関する他の情報がマスター・ノードに送信されてもよい。ステップ980では、現在の作業者ノード112が利用可能であることの指示が資源待ち行列に登録されてもよい。
図10は、対話的クライアント‐サーバー・アプリケーションの一部をクロールすることから生成された状態グラフを、該アプリケーションのマスター状態グラフと同期させる方法1000の例示的な実施形態である。いくつかの実施形態では、方法1000は図9のステップ932および975の一部または全部を実装してもよい。分散式コンピューティング・システム100の動作において上記した擬似コードが方法1000の一部または全部を実装してもよい。
ステップ1005において、マスター状態グラフと同期されるべき状態グラフが圧縮されてもよい。グラフ内の各状態は、本稿で論じているものも含めいかなる好適な技法を使って圧縮されてもよい。状態グラフは、クロールされるべきウェブ・アプリケーションの一部を指示するジョブを実行することからの情報を含んでいてもよい。ステップ1010では、そのような圧縮の結果が記憶されてもよい。該結果は、当該状態グラフとすでに同期された前の状態グラフとの間の差を表現してもよい。ステップ1015では、圧縮された状態グラフおよび/または新たなジョブのリストがマスター・ノードに送られてもよい。該マスター・ノードはマスター状態グラフを制御/管理してもよく、その二つをマージするよう構成されていてもよい。ステップ1020では、状態グラフはマスター・ノードと同期されたとしてマークされてもよい。そのようなマーク付けは、方法1000の将来のインスタンスによってステップ1010の間に使用されてもよい。ステップ1025では新たなジョブのリストがクリアされてもよい。
図11は、動的ウェブ・アプリケーションのような対話的クライアント‐サーバー・アプリケーションのクロールにおける状態情報の圧縮のための方法1100の例示的な実施形態である。分散式コンピューティング・システム100の動作において上記した擬似コードが方法1100の一部または全部を実装してもよい。
ステップ1105において、アプリケーションがクロールされて状態グラフを生成してもよい。状態グラフは該アプリケーションの動作を表していてもよい。あるいはまた、状態グラフは、受領され、あるいは他の仕方で決定されてもよい。状態グラフ中の各状態について、ステップ1115〜1145が実施されてもよい。
ステップ1115では、所与の状態に関連付けられた画面が判別されてもよい。後続のステップは、そのような画面を圧縮することを試みてもよい。ステップ1120では、画面のモデルが判別されてもよい。ある実施形態では、そのようなモデルはDOMモデルを含んでいてもよい。ステップ1125では、その画面についての基準画面が決定されてもよい。そのような基準画面は前の画面を含んでいてもよい。該前の画面上である動作が行われた結果、前記の所与の画面になったものである。
前記所与の画面は、そのモデルの一部として一つまたは複数のノードを含んでいてもよい。そのような各ノードについて、ステップ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に進んでもよい。
現在ノードが双子ノードと同数またはそれ以上の子をもたない場合、方法はステップ1255に進んでもよい。ここで、当該ノードは、変化したとマークされる。ステップ1260では、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが該親が変化した子ノードをもつことを示すようマーク付けされていてもよい。ステップ1260およびステップ1247は同じ仕方で実装されてもよい。方法1200は次いでステップ1265に進んでもよい。
ステップ1265では、当該ノードが変化した子ノードをもつかどうかが判定されてもよい。そのような判定は、そのような指定があるかどうか当該ノードの指示を調べることによってなされてもよい。当該ノードは、当該ノードの子について方法1200の再帰的な呼び出しを通じてそのようにマーク付けされたことがありうる。方法1200の動作中に、ノードが、変化した子をもつとしてマーク付けされたことがありうるのである。当該ノードが変化した子ノードをもつ場合、ステップ1270において、当該ノードの親が判別されてもよく、そのような親ノード上のインジケーターが、該親が変化した子ノードをもつことを示すようマーク付けされてもよい。ステップ1270、1260および1247は同様にして実装されうる。方法1200は次いでステップ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)
クローリング・アプリケーションを含むメモリおよび該メモリに結合されたプロセッサを有する電子装置であって、前記プロセッサは、前記クローリング・アプリケーションを実行するよう構成されており、前記クローリング・アプリケーションは、前記プロセッサに:
初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバー・アプリケーションの部分を指示する、段階と;
境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバー・アプリケーションをクロールする段階と;
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を報告する段階とを実行させるよう構成され、
前記対話的クライアント‐サーバー・アプリケーションをクロールする段階は:
前記対話的クライアント‐サーバー・アプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;
前記第一の状態を記録する段階と;
動作を選択する段階と;
行われない動作を記録する段階と;
前記動作を行う段階と;
前記対話的クライアント‐サーバー・アプリケーションの第二の状態に到達する段階と;
前記第二の状態を記録する段階と;
前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、
前記対話的クライアント‐サーバー・アプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、
電子装置。
(付記2)
前記対話的クライアント‐サーバー・アプリケーションが動的ウェブ・アプリケーションである、付記1記載の装置。
(付記3)
付記1または2記載の装置であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、当該装置がクロールを開始する出発点となる初期化状態を与える、装置。
(付記4)
付記1ないし3のうちいずれか一項記載の装置であって、前記メモリに記憶されたローカル状態グラフをさらに有しており、前記ローカル状態グラフは:
前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに
前記対話的クライアント‐サーバー・アプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移
の記録を含み、
前記ローカル状態グラフは当該装置がクロールを開始する出発点となる初期化状態を含む、装置。
(付記5)
付記1ないし4のうちいずれか一項記載の装置であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、装置。
(付記6)
付記1ないし5のうちいずれか一項記載の装置であって、前記境界条件がクロール深さ限界を含み、前記対話的クライアント‐サーバー・アプリケーションの新しい状態につながる動作の選択は前記クロール深さをインクリメントする、装置。
(付記7)
付記1ないし6のうちいずれか一項記載の装置であって、前記境界条件が時間限界を含み、前記時間限界は、前記対話的クライアント‐サーバー・アプリケーションをクロールするのに費やされる時間の長さに対する限界である、装置。
(付記8)
付記1ないし7のうちいずれか一項記載の装置であって、前記境界条件がパージ・コマンドを受信することを含む、装置。
(付記9)
付記1ないし8のうちいずれか一項記載の装置であって、前記プロセッサがさらに:
新たなジョブを判別し;
前記新たなジョブを報告するが、該ジョブを実行はしないよう構成されており、
前記新たなジョブは、行われなかった前記動作の一つを含む、
装置。
(付記10)
付記9記載の装置であって、前記プロセッサはさらに、前記境界条件に達する前に前記新たなジョブを報告するよう構成される、装置。
(付記11)
付記9記載の装置であって、前記プロセッサはさらに、前記境界条件に達したときに前記新たなジョブを報告するよう構成される、装置。
(付記12)
付記9記載の装置であって、前記プロセッサはさらに、報告条件に達したときに前記新たなジョブを報告するよう構成される、装置。
(付記13)
付記12記載の装置であって、前記報告条件が、新たなジョブを報告してから次に新たなジョブを報告するまでの定期的な遅延を含む、装置。
(付記14)
付記13記載の装置であって、前記ジョブが前記定期的な遅延を含む、装置。
(付記15)
付記13記載の装置であって、前記プロセッサがさらに:
実行を待ってペンディングであるジョブの数が下の閾値に到達したことを判別し;
前記ジョブの実行の際の前記ジョブの前記定期的な遅延を変更するよう構成されている、
装置。
(付記16)
付記1ないし15のうちいずれか一項記載の装置であって、前記プロセッサがさらに、前記結果を、報告する前に圧縮するよう構成されている、装置。
(付記17)
付記1ないし16のうちいずれか一項記載の装置であって、前記プロセッサがさらに、当該電子装置を利用可能資源データ構造に登録するよう構成されており、前記利用可能資源データ構造は、前記対話的クライアント‐サーバー・アプリケーションをクロールするクローリング・ジョブを受け容れるのに利用可能である資源の指標を含む、装置。
(付記18)
対話的クライアント‐サーバー・アプリケーションをクロールする方法であって:
初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバー・アプリケーションの部分を指示する、段階と;
境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバー・アプリケーションをクロールする段階と;
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を報告する段階とを含み、
前記対話的クライアント‐サーバー・アプリケーションをクロールする段階は:
前記対話的クライアント‐サーバー・アプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;
前記第一の状態を記録する段階と;
動作を選択する段階と;
行われない動作を記録する段階と;
前記動作を行う段階と;
前記対話的クライアント‐サーバー・アプリケーションの第二の状態に到達する段階と;
前記第二の状態を記録する段階と;
前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、
前記対話的クライアント‐サーバー・アプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、
方法。
(付記19)
前記対話的クライアント‐サーバー・アプリケーションが動的ウェブ・アプリケーションである、付記18記載の方法。
(付記20)
付記18または19記載の方法であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、クロールが始まる出発点となる初期化状態を与える、方法。
(付記21)
付記18ないし20のうちいずれか一項記載の方法であって、ローカル状態グラフを記憶することをさらに含み、前記ローカル状態グラフは:
前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに
前記対話的クライアント‐サーバー・アプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移
の記録を含み、
前記ローカル状態グラフはクロールが始まる出発点となる初期化状態を含む、方法。
(付記22)
付記18ないし21のうちいずれか一項記載の方法であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、方法。
(付記23)
付記18ないし22のうちいずれか一項記載の方法であって、前記境界条件がクロール深さ限界を含み、前記対話的クライアント‐サーバー・アプリケーションの新しい状態につながる動作の選択は前記クロール深さをインクリメントする、方法。
(付記24)
付記18ないし23のうちいずれか一項記載の方法であって、前記境界条件が時間限界を含み、前記時間限界は、前記対話的クライアント‐サーバー・アプリケーションをクロールするのに費やされる時間の長さに対する限界である、方法。
(付記25)
付記18ないし24のうちいずれか一項記載の方法であって、前記境界条件がパージ・コマンドを受信することを含む、方法。
(付記26)
付記18ないし25のうちいずれか一項記載の方法であって、さらに:
新たなジョブを判別し;
前記新たなジョブを報告するが、該ジョブを実行はしないことを含み、
前記新たなジョブは、行われなかった前記動作の一つを含む、
方法。
(付記27)
付記26記載の方法であって、前記境界条件に達する前に前記新たなジョブを報告することを含む、方法。
(付記28)
付記26記載の方法であって、前記境界条件に達したときに前記新たなジョブを報告することを含む、方法。
(付記29)
付記26記載の方法であって、報告条件に達したときに前記新たなジョブを報告することを含む、方法。
(付記30)
付記29記載の方法であって、前記報告条件が、新たなジョブを報告してから次に新たなジョブを報告するまでの定期的な遅延を含む、方法。
(付記31)
付記30記載の方法であって、前記ジョブが前記定期的な遅延を含む、方法。
(付記32)
付記30記載の方法であって、さらに:
実行を待ってペンディングであるジョブの数が下の閾値に到達したことを判別し;
前記ジョブの実行の際の前記ジョブの前記定期的な遅延を変更することを含む、
方法。
(付記33)
付記18ないし32のうちいずれか一項記載の方法であって、さらに、前記結果を、報告する前に圧縮することを含む、方法。
(付記34)
付記18ないし33のうちいずれか一項記載の方法であって、さらに、当該方法を実行する電子装置を利用可能資源データ構造に登録するよう構成されており、前記利用可能資源データ構造は、前記対話的クライアント‐サーバー・アプリケーションをクロールするクローリング・ジョブを受け容れるのに利用可能である資源の指標を含む、方法。
(付記35)
コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、前記コンピュータ実行可能命令はプロセッサに:
初期化情報を含むジョブを受信する段階であって、前記初期化情報は、クロールされるべき対話的クライアント‐サーバー・アプリケーションの部分を指示する、段階と;
境界条件に達するまで前記初期化情報に基づいて前記対話的クライアント‐サーバー・アプリケーションをクロールする段階と;
前記対話的クライアント‐サーバー・アプリケーションをクロールした結果を報告する段階とを実行させるものであり、
前記対話的クライアント‐サーバー・アプリケーションをクロールする段階は:
前記対話的クライアント‐サーバー・アプリケーションの第一の状態で利用可能な二つ以上の可能な動作をプログラム的に判別する段階と;
前記第一の状態を記録する段階と;
動作を選択する段階と;
行われない動作を記録する段階と;
前記動作を行う段階と;
前記対話的クライアント‐サーバー・アプリケーションの第二の状態に到達する段階と;
前記第二の状態を記録する段階と;
前記第一の状態と前記第二の状態の間の遷移として、行われた前記動作を記録する段階とを含み、
前記対話的クライアント‐サーバー・アプリケーションの結果を報告する段階は、前記第一の状態、第二の状態、前記遷移および行われなかった一つまたは複数の動作を報告することを含む、
媒体。
(付記36)
前記対話的クライアント‐サーバー・アプリケーションが動的ウェブ・アプリケーションである、付記35記載の媒体。
(付記37)
付記35または36記載の媒体であって、前記初期化情報がマスター状態グラフの部分的トレースを含み、前記部分的トレースが一連のコマンドを含み、前記一連のコマンドの実行は、クロールが始まる出発点となる初期化状態を与える、媒体。
(付記38)
付記35ないし37のうちいずれか一項記載の媒体であって、メモリに記憶されたローカル状態グラフを前記プロセッサに管理させる命令をさらに含み、前記ローカル状態グラフは:
前記初期化情報中の前記コマンドを実行するときに遭遇した状態および遷移のシーケンス;ならびに
前記対話的クライアント‐サーバー・アプリケーションのクロールの際に遭遇したその後の状態および遷移があれば該状態および遷移
の記録を含み、
前記ローカル状態グラフはクロールが始まる出発点となる初期化状態を含む、媒体。
(付記39)
付記35ないし38のうちいずれか一項記載の媒体であって、前記境界条件が、当該アプリケーションをクロールする際に以前に遭遇されたものである前記第二の状態に到達することを含む、媒体。
(付記40)
付記35ないし39のうちいずれか一項記載の媒体であって、前記境界条件がクロール深さ限界を含み、前記対話的クライアント‐サーバー・アプリケーションの新しい状態につながる動作の選択は前記クロール深さをインクリメントする、媒体。
(付記41)
付記35ないし40のうちいずれか一項記載の媒体であって、前記境界条件が時間限界を含み、前記時間限界は、前記対話的クライアント‐サーバー・アプリケーションをクロールするのに費やされる時間の長さに対する限界である、媒体。
(付記42)
付記35ないし41のうちいずれか一項記載の媒体であって、前記境界条件がパージ・コマンドを受信することを含む、媒体。
(付記43)
付記35ないし42のうちいずれか一項記載の媒体であって、前記プロセッサに:
新たなジョブを判別し;
前記新たなジョブを報告するが、該ジョブを実行はしないことを実行させる命令をさらに含み、
前記新たなジョブは、行われなかった前記動作の一つを含む、
媒体。
(付記44)
付記43記載の媒体であって、前記プロセッサに、前記境界条件に達する前に前記新たなジョブを報告させる命令をさらに含む、媒体。
(付記45)
付記43記載の媒体であって、前記プロセッサに、前記境界条件に達したときに前記新たなジョブを報告させる命令をさらに含む、媒体。
(付記46)
付記43記載の媒体であって、前記プロセッサに、報告条件に達したときに前記新たなジョブを報告させる命令をさらに含む、媒体。
(付記47)
付記46記載の媒体であって、前記報告条件が、新たなジョブを報告してから次に新たなジョブを報告するまでの定期的な遅延を含む、媒体。
(付記48)
付記47記載の媒体であって、前記ジョブが前記定期的な遅延を含む、媒体。
(付記49)
付記47記載の媒体であって、前記プロセッサに:
実行を待ってペンディングであるジョブの数が下の閾値に到達したことを判別し;
前記ジョブの実行の際に前記ジョブの前記定期的な遅延を変更することをさせる命令をさらに含む、
媒体。
(付記50)
付記35ないし49のうちいずれか一項記載の媒体であって、前記プロセッサに、前記結果を、報告する前に圧縮することをさせる命令をさらに含む、媒体。
(付記51)
付記35ないし50のうちいずれか一項記載の媒体であって、前記プロセッサに、電子装置を利用可能資源データ構造に登録させる命令をさらに含み、前記利用可能資源データ構造は、前記対話的クライアント‐サーバー・アプリケーションをクロールするクローリング・ジョブを受け容れるのに利用可能である資源の指標を含む、媒体。