検索エンジンはどこから始まるのか、クローラーについてのいくつかの考え

独自の検索エンジンに関する開始されたトピックの続き



そのため、検索システムが解決しなければならないいくつかの主要なタスクがあります。個別のページを取得して保存する必要があるという事実から始めましょう。

将来選択する処理方法に応じて、いくつかの方法があります。



長い冬の夜にそれらを見るためだけに、より良いものが発明されない場合、明らかに、ウェブからダウンロードする必要があるページのキューが必要です。 サイトとそのメインページのキュー、および今回処理するもののローカルミニキューを作成することを好みます。 理由は簡単です-わずか1か月でダウンロードしたいすべてのページのリストは、かなり大きなハードドライブのサイズを大幅に超える可能性があります:)





次のページをロードするとき、このページからのすべてのリンクは、処理中のサイト内、または遅かれ早かれ戻らなければならないサイトのメインリスト内に残っている場合、ローカルキューに追加する必要があります。



一度に1つのサイトから取得するページ数は? 個人的には、この制限を1,000ページのみに定期的に変更していますが、私は100,000以下を好みます。 そして、より多くのページがあるサイトはそれほど多くありません。

ここで、さらに詳しく検討してください。



一度に1ページ、すべてのページを順番に取得する場合、たとえば1時間でいくつのページを処理しますか?

-ページの取得時間は次のとおりです。

・CSNの応答を待機している時間(練習が示すように、十分ではありません)。 CSNはサイト「site.ru」の名前を、それが置かれているサーバーのIPアドレスにマップします。これは、サイトが移動する傾向があること、パケットルーティングルートが変更されることなどを考慮すると簡単な作業ではありません。 要するに、DNSサーバーはアドレステーブルを保存し、アドレスを理解するためにそれをたたくたびに-ページのどこに行くか。

・接続と要求の送信の時間(少なくとも平均的なチャネルがある場合はすばやく)

・実際の応答の受信時間-ページ



噂によると、Yandexはかつて非常に最初の問題に直面した理由です-あなたが本当に多くのページを取得した場合、プロバイダーのCSNはこれに対処できません-私の経験では、特にあなたが答えを送信する必要があるため、アドレスまでの遅延は最大10秒でしたネットワーク上を行き来し、私だけがプロバイダーではありません。 1つのサイトから1000ページを順番にリクエストする場合、毎回プロバイダーを1000回プルすることに注意してください。



最新のハードウェアを使用すると、ローカルネットワークにローカルDNSサーバーキャッシングサーバーをインストールし、プロバイダーではなく作業でロードするのは非常に簡単です。プロバイダーはパケットをより速く送信し始めます。 ただし、かなり低いレベルで書き込むと、混乱してページローダー内にキャッシュを書き込むことができます。

Perl用のLWPやHTTPモジュールなどの既製のソリューションを使用する場合、ローカルDNSサーバーが最適です。



ここで、答えは平均して1〜10秒であるとしましょう。高速なサーバーがあり、非常に遅いサーバーがあります。 その後、1分あたり6から60ページ、1時間あたり360から3600、1日あたり約8000から60,000を受け取りました(実際には、あらゆる種類の遅延を意識して切り捨てます:実際には、チャネル100mbit / sでローカルDNSなしで一度に1ページを要求した場合もちろん、サイトが異なる場合、1日あたり10,000ページを受け取ります。



そして、ここでは処理時間が考慮されていないことを考慮しても、ページの保存は率直に言って悲惨な結果です。



OK、私は言って、一度に128のリクエストを並行して行い、すべてがうまく飛んだ-1時間あたり12万ページのピーク、DDoS攻撃をノックしていたサーバー管理者からわいせつなログが来るまで、まあ、5分で5000リクエストホスティングは許可されていません。



すべては、同時に2〜3ページを超えない8〜16の異なるサイトの読み込みを開始したという事実によって決定されました。 1時間あたり約2万から3万ページの何かが判明しました。 私は夜に指標がはるかに高いと言わなければなりません



検索エンジンに関する私の記事の全内容とリストはここで更新されます: http : //habrahabr.ru/blogs/search_engines/123671/



All Articles