ホームページ >PHPフレームワーク >Laravel >Baidu クローラーに対抗するために Laravel を使用した経験を記録する
次のチュートリアルコラムでは、Laravel-s を使用して Baidu クローラーに対抗する経験を記録します。 !
Laravel-sとはLaravelSは、Swooleを高速に統合するための接着プロジェクトです。パフォーマンスを向上させるために Laravel または Lumen を組み込む
github アドレスLaravel-s を使用する理由
Baidu アプレットが起動された後、Baidu クローラーの高い QPS (同時実行性) により CPU がフルロードされ、サーバーがクラッシュしました。サーバーは 4 コア、8G メモリ、5M ブロードバンドで構成されていました。この時どうすればいいでしょうか?
php-fpm パラメータを調整して静的に設定します。静的モードは動的モードよりもパフォーマンスが高くなります。たとえば、子プロセスの数を 255 またはそれ以上に設定した場合、その数が大きくなるほど同時実行性の量は増加しますが、数が大きくなるほど占有するメモリも多くなります。結論としては、ある程度の効果はありますが、同時実行性が高い状況では役に立ちません。
Baidu にフィードバックして、クローラーのクロール頻度を調整します。結論、ちょっと待ってください、ニッコウキスゲはすでに寒いですが、フィードバックをした方が良いです。
当時、全期間の統計がなかったためです。 timeqps 具体的な値であるため、正確な結論を導き出す方法はなく、調整前と調整後のマシン負荷に基づいて比較することしかできません。
展開前、cpu はフルロードされており、マシンは N 回ダウンして麻痺していました。外部ネットワークのブロードバンドがいっぱいです (5M)。展開後、CPU はすぐに
20
cpu は
60% に達します外部ネットワークのブロードバンドはまだ完全に占有されています (Baidu クローラーが本物であるとしか言えません。必要なだけの帯域幅を取得できます)。結論として、少なくとも 5 倍のパフォーマンス向上がもたらされます。
特定の展開
クローラーによってクロールされるページはページの一部にすぎないため、オンライン プロジェクトは に変換されません。 laravel-s も非現実的です。クロールされたページを分離し、それらを個別に laravel-s
にデプロイするだけです。#新しい空のプロジェクトを作成します。ビジネス ロジックはキャプチャされたページのみを処理します
api
。プロジェクトのポート番号は 6501
location ~ ^/v1/test.* { proxy_pass http://127.0.0.1:6501; proxy_set_header Host $host;}
、デフォルト 有効な worker の数は、
cpularavles
はメモリ内の swoole
で実行されています。コードを変更するたびに、
記事 2 の理由により、データベース接続を解放できません。切断して再接続するには、
laravel
を有効にする必要があります (>laravle5.1) 。 conf/database.php
<pre class="brush:php;toolbar:false;">&#39;options&#39; => [
// 开启持久连接
\PDO::ATTR_PERSISTENT => true,],</pre> を追加します
以上がBaidu クローラーに対抗するために Laravel を使用した経験を記録するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。