ホームページ  >  記事  >  PHPフレームワーク  >  Baidu クローラーに対抗するために Laravel を使用した経験を記録する

Baidu クローラーに対抗するために Laravel を使用した経験を記録する

藏色散人
藏色散人転載
2020-08-22 13:21:443368ブラウズ

次のチュートリアルコラムでは、Laravel-s を使用して Baidu クローラーに対抗する経験を記録します。 !

Baidu クローラーに対抗するために Laravel を使用した経験を記録する

Laravel-sとは

LaravelSは、Swooleを高速に統合するための接着プロジェクトです。パフォーマンスを向上させるために Laravel または Lumen を組み込む

github アドレス


Laravel-s を使用する理由

Baidu アプレットが起動された後、Baidu クローラーの高い QPS (同時実行性) により CPU がフルロードされ、サーバーがクラッシュしました。サーバーは 4 コア、8G メモリ、5M ブロードバンドで構成されていました。この時どうすればいいでしょうか?

php-fpm パラメータを調整して静的に設定します。静的モードは動的モードよりもパフォーマンスが高くなります。たとえば、子プロセスの数を 255 またはそれ以上に設定した場合、その数が大きくなるほど同時実行性の量は増加しますが、数が大きくなるほど占有するメモリも多くなります。結論としては、ある程度の効果はありますが、同時実行性が高い状況では役に立ちません。

  • Baidu にフィードバックして、クローラーのクロール頻度を調整します。結論、ちょっと待ってください、ニッコウキスゲはすでに寒いですが、フィードバックをした方が良いです。

  • #負荷分散。他のサーバーにプレッシャーを共有させる 十分なサーバーがあり、同じコードをデプロイする必要があり、他のサーバーが本来担当するビジネスに影響を与えることができないことが前提となります。または、特定のクラウドに N 台のサーバーを一時的に申請しますが、クローラがいつ来て、いつ去っていくかわかりません。これは非現実的です。

  • 次のステップは、この記事のトピックである、Laravel-s を使用して http 応答を高速化することです。

  • Laravel にはどのくらいの加速効果がありますか?

当時、全期間の統計がなかったためです。 timeqps 具体的な値であるため、正確な結論を導き出す方法はなく、調整前と調整後のマシン負荷に基づいて比較することしかできません。

展開前、

cpu はフルロードされており、マシンは N 回ダウンして麻痺していました。外部ネットワークのブロードバンドがいっぱいです (5M)。展開後、CPU はすぐに 20

に低下します。ブロードバンドを一時的に 15M にアップグレードした後、

cpu60% に達します外部ネットワークのブロードバンドはまだ完全に占有されています (Baidu クローラーが本物であるとしか言えません。必要なだけの帯域幅を取得できます)。結論として、少なくとも 5 倍のパフォーマンス向上がもたらされます。 特定の展開

クローラーによってクロールされるページはページの一部にすぎないため、オンライン プロジェクトは に変換されません。 laravel-s も非現実的です。クロールされたページを分離し、それらを個別に laravel-s

にデプロイするだけです。

#新しい空のプロジェクトを作成します。ビジネス ロジックはキャプチャされたページのみを処理しますapi。プロジェクトのポート番号は 6501

    # などです。
  • #デプロイメント laravel-s、テスト API および ab ストレス テスト

    オンライン プロジェクトは、クローラによってクロールされたページ パスを新しいプロジェクト (
  • 127.0 など) にプロキシします。 .0.1:6501
  • location ~ ^/v1/test.* {
     proxy_pass http://127.0.0.1:6501;
     proxy_set_header Host $host;}
  • #注意すべき点がいくつかあります:

conf/ laravels.php

、デフォルト 有効な worker の数は、

cpu
    コアの数の 2 倍です。
  • laravles はメモリ内の swoole で実行されています。コードを変更するたびに、

    laravel-s を再起動する必要があります。
  • 記事 2 の理由により、データベース接続を解放できません。切断して再接続するには、laravel を有効にする必要があります (>laravle5.1) 。 conf/database.php

    mysql
  • 設定に
  • <pre class="brush:php;toolbar:false;">&amp;#39;options&amp;#39; =&gt; [ // 开启持久连接 \PDO::ATTR_PERSISTENT =&gt; true,],</pre> を追加します

以上がBaidu クローラーに対抗するために Laravel を使用した経験を記録するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。